php 接入专有钉钉

专有钉钉sdk地址:专有钉钉门户

下载过来的sdk直接使用会有问题 直接上代码

<?php
/**
 * 开放平台调用SDK
 */
namespace app\common;

    class ExecutableClient
    {
        var $configs=null;
        var $headers=null;
        var $timestamp=null;
        public function __construct(){  #初始化方法
            $this->configs['epaas'] = array(
                'api_version' => '1.0',
                'api_timeout' => 3// 超时时间,单位秒
            );
            $date = date_create();
            $timestamp = date_timestamp_get($date);

            //注意他说要加8小时 但是加了就会报错 不知道为啥
           // $timestamp += 28800;
            $this->timestamp = $timestamp;
        }
        function configs(){
            return $this->configs;
        }
        function setDomain($domain)
        {
            $this->configs['epaas']['api_server']=$domain;
        }
        function setAccessKey($accessKey){
            $this->configs['epaas']['api_key'] = $accessKey;
        }
        function setSecretKey($secretKey){
            $this->configs['epaas']['api_secret'] = $secretKey;
        }
        function setApiName($apiName){
            $this->configs['epaas']['api_name'] = $apiName;
        }
        function addParameter($key,$value){
            $this->configs['epaas']['params'][$key][] = $value;
            //print_r($this->configs['epaas']);
        }

        function epaasNicInfo()
        {
            $cmd = '/sbin/ifconfig eth0|/usr/bin/head -2';
            $output = `$cmd`;
            if (!$output) {
                return false;
            }
            $lines = explode("\n", $output);
            $ret = array();
            foreach ($lines as $line) {
                $tmp = array();
                if (preg_match('/HWaddr ((?:[0-9A-Fa-f]{2}:)+[0-9A-Fa-f]{2})/', $line, $tmp)) {
                    $ret['mac'] = $tmp[1];
                    continue;
                }
                if (preg_match('/inet addr:((?:[0-9]{1,3}\.)+[0-9]{1,3})/', $line, $tmp)) {
                    $ret['ip'] = $tmp[1];
                    continue;
                }
            }
            return $ret;
        }

        function epaasSignature($method, $timestamp, $nonce, $uri, $params)
        {
            $init = $this->configs();
            $bytes = sprintf("%s\n%s\n%s\n%s", $method, $timestamp, $nonce, $uri);
            if(!empty($params)){
                $bytes = sprintf("%s\n%s\n%s\n%s\n%s", $method, $timestamp, $nonce, $uri, $params);
            }
            #print_r($bytes);
            $hash = hash_hmac('sha256', $bytes, $init['epaas']['api_secret'], true);
            return base64_encode($hash);
        }

        function epaasHeaders($method)
        {
            $timestamp = $this->timestamp;
            $init = $this->configs();
            $params = !empty($init['epaas']['params']) ? $init['epaas']['params'] :[];
            $api = $init['epaas']['api_name'];

            //这里ip和mac写的是假的,用户调用时改为自己的ip和mac
            $addr = array(
                'ip'=>'192.168.1.109',
                'mac'=>'9C-29-76-E2-3D-FD'
            );//$this->epaasNicInfo();
            if (!$addr) {
                return false;
            }

          //  timestamp = datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%f+08:00")
            $formatTime = strftime('%Y-%m-%dT%H:%M:%S.000+08:00', $timestamp);
            $nonce = sprintf('%d000%d', $timestamp, rand(1000, 9999));
            if(!empty($params)){
                ksort($params, SORT_STRING);
            }
            $ret = array();
            #print_r($ret);
            if(!empty($params)){
                foreach ($params as $k => $v) {
                    foreach ($v as $value)
                    {
                        $ret[] = sprintf('%s=%s', $k, $value);
                    }
                }
            }

            sort($ret);
            $sig = $this->epaasSignature($method, $formatTime, $nonce, $api, implode('&', $ret));
            $this->headers = array(
                'X-Hmac-Auth-Timestamp' => $formatTime,
                'X-Hmac-Auth-Version' => $init['epaas']['api_version'],
                'X-Hmac-Auth-Nonce' => $nonce,
                'apiKey' => $init['epaas']['api_key'],
                'X-Hmac-Auth-Signature' => $sig,
                'X-Hmac-Auth-IP' => $addr['ip'],
                'X-Hmac-Auth-MAC' => $addr['mac']
            );
            return $this->headers;
        }


        function epaasCurlGet($timeout = 1, $onlyReturnContent = true)
        {
            $headerAry = $this->epaasHeaders('GET');
            $init = $this->configs();
            $params=!empty($init['epaas']['params']) ? $init['epaas']['params'] :[];
            $api = $init['epaas']['api_name'];
            $url=sprintf('%s%s', $init['epaas']['api_server'], $api);
            if(!empty($params)){
                ksort($params, SORT_STRING);
            }
            $ret = array();
            if(!empty($params)){
                foreach ($params as $k => $v) {
                    foreach ($v as $value)
                    {
                        $ret[] = sprintf('%s=%s', $k, $value);
                    }
                }
            }

            $getparam = implode('&', $ret);
            $url=sprintf('%s?%s', $url, $getparam);
            #print($url);
            #print("\n");
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            if ($headerAry) {
                $tmp = array();
                foreach ($headerAry as $k => $v) {
                    $tmp[] = sprintf('%s: %s', $k, $v);
                }
                curl_setopt($ch, CURLOPT_HTTPHEADER, $tmp);
            }
            $data = curl_exec($ch);
            $error = curl_error($ch);
            if ($error) {
                $msg = "epaasCurlPost|curl error: " . $error . "|" . $url . "|";
                error_log($msg);
            }
            curl_close($ch);
            $ret = json_decode($data, true);
            if (!$ret['success']) {
                $msg = "epaasCurlPost|result not success: " . $data . "|" . $url . "|";
                error_log($msg);
            }

            if ($onlyReturnContent) {
                return $ret['content'];
            } else {
                return $ret;
            }
        }
        /**
         * 以POST方式请求epaas
         * @param int $timeout
         * @param bool $onlyReturnContent 是否只返回结果中的content
         * @return mixed
         */
        function epaasCurlPost($timeout = 1, $onlyReturnContent = true)
        {
            $headerAry = $this->epaasHeaders('POST');
            $init = $this->configs();

            $params=!empty($init['epaas']['params']) ? $init['epaas']['params'] :[];
            $api = $init['epaas']['api_name'];
            $url=sprintf('%s%s', $init['epaas']['api_server'], $api);
            $ch = curl_init();
            $ret = array();
            if(!empty($params)){
                foreach ($params as $k => $v) {
                    foreach ($v as $value)
                    {
                        $ret[] = sprintf('%s=%s', $k, $value);
                    }
                }
            }

            $getparam = implode('&', $ret);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $getparam);
            curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            if ($headerAry) {
                $tmp = array();
                foreach ($headerAry as $k => $v) {
                    $tmp[] = sprintf('%s: %s', $k, $v);
                }
                curl_setopt($ch, CURLOPT_HTTPHEADER, $tmp);
            }
            $data = curl_exec($ch);
            $error = curl_error($ch);
            if ($error) {
                $msg = "epaasCurlPost|curl error: " . $error . "|" . $url . "|";
                error_log($msg);
            }
            curl_close($ch);
            $ret = json_decode($data, true);


            if (empty($ret['success'])) {
                $msg = "epaasCurlPost|result not success: " . $data . "|" . $url . "|";
                error_log($msg);
            }

            if ($onlyReturnContent) {
                return $ret['content'];
            } else {
                return $ret;
            }
        }
    }

调用代码:

private $appKey = "";
 private $appSecret = "";
 private $domain = "https://openplatform.dg-work.cn";
 
public function loginAction(){
    try {
        //获取access_token
        $executableClient = new ExecutableClient();
        $executableClient->setDomain($this->domain);
        $executableClient->setAccessKey($this->appKey);
        $executableClient->setSecretKey($this->appSecret);
        $executableClient->setApiName('/gettoken.json');
        $ret = $executableClient->epaasCurlPost(3);
        var_dump($ret);
    } catch (Exception $e) {
        $msg = "getFilterWords|err, code: ". $e->getCode() . "|message: ". $e->getMessage();
        error_log($msg);
        return ;
    }
}

环境    开放平台域名(调接口使用)    登录域名(构造登录页面)
Saas    openplatform.dg-work.cn           login.dg-work.cn
浙政钉 openplatform-pro.ding.zj.gov.cn    login-pro.ding.zj.gov.cn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值