$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]; } }