123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- <?php
- namespace addons\csmadmin\library;
- use fast\Http;
- use think\Cache;
- class DDUtils
- {
- public static function getAccessToken()
- {
- trace("==getAccessToken==");
- $token = Cache::get('csmwx_dd_accesstoken');
- if (! $token) {
- $config = get_addon_config(CsmContants::$ADDONS);
- $params = [
- 'appkey' => $config['ddappid'],
- 'appsecret' => $config['ddappsecret']
- ];
- $url = "https://oapi.dingtalk.com/gettoken";
- $result = Http::sendRequest($url, $params, 'GET');
- trace($result);
- if ($result['errcode'] == '0') {
- $token = $result['access_token'];
- Cache::set('csmwx_dd_accesstoken', $token, 3600);
- }
- }
- return $token;
- }
- /**
- * 钉钉扫码登录文档:https://ding-doc.dingtalk.com/doc#/serverapi2/kymkv6
- */
- public static function getUserInfoByLoginTmpCode($loginTmpCode)
- {
- trace("==getUserInfoByLoginTmpCode==");
- $config = get_addon_config(CsmContants::$ADDONS);
- $params = [
- 'tmp_auth_code' => $loginTmpCode
- ];
- $accessKey = $config['ddappid'];
- $timestamp = time() * 1000;
- $signature = static::signature($timestamp);
- $url = "https://oapi.dingtalk.com/sns/getuserinfo_bycode?accessKey={$accessKey}×tamp={$timestamp}&signature={$signature['urlencode_signature']}";
- $headers = [
- 'Content-type: application/json'
- ];
- $options = [
- CURLOPT_HTTPHEADER => $headers
- ];
- trace($url);
- trace($params);
- $result = Http::post($url, json_encode($params), $options);
- trace($result);
- $result = json_decode($result, true);
- if ($result['errcode'] == '0') {
- return $result['user_info'];
- } else {
- return null;
- }
- }
- private static function signature($timestamp)
- {
- $config = get_addon_config('csmadmin');
- // 根据timestamp, appSecret计算签名值
- $s = hash_hmac('sha256', $timestamp, $config['ddappsecret'], true);
- $signature = base64_encode($s);
- // var_dump($signature);
- $urlencode_signature = urlencode($signature);
- // var_dump($urlencode_signature);
- return [
- 'signature' => $signature,
- 'urlencode_signature' => $urlencode_signature];
- }
- }
|