DDUtils.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace addons\csmadmin\library;
  3. use fast\Http;
  4. use think\Cache;
  5. class DDUtils
  6. {
  7. public static function getAccessToken()
  8. {
  9. trace("==getAccessToken==");
  10. $token = Cache::get('csmwx_dd_accesstoken');
  11. if (! $token) {
  12. $config = get_addon_config(CsmContants::$ADDONS);
  13. $params = [
  14. 'appkey' => $config['ddappid'],
  15. 'appsecret' => $config['ddappsecret']
  16. ];
  17. $url = "https://oapi.dingtalk.com/gettoken";
  18. $result = Http::sendRequest($url, $params, 'GET');
  19. trace($result);
  20. if ($result['errcode'] == '0') {
  21. $token = $result['access_token'];
  22. Cache::set('csmwx_dd_accesstoken', $token, 3600);
  23. }
  24. }
  25. return $token;
  26. }
  27. /**
  28. * 钉钉扫码登录文档:https://ding-doc.dingtalk.com/doc#/serverapi2/kymkv6
  29. */
  30. public static function getUserInfoByLoginTmpCode($loginTmpCode)
  31. {
  32. trace("==getUserInfoByLoginTmpCode==");
  33. $config = get_addon_config(CsmContants::$ADDONS);
  34. $params = [
  35. 'tmp_auth_code' => $loginTmpCode
  36. ];
  37. $accessKey = $config['ddappid'];
  38. $timestamp = time() * 1000;
  39. $signature = static::signature($timestamp);
  40. $url = "https://oapi.dingtalk.com/sns/getuserinfo_bycode?accessKey={$accessKey}&timestamp={$timestamp}&signature={$signature['urlencode_signature']}";
  41. $headers = [
  42. 'Content-type: application/json'
  43. ];
  44. $options = [
  45. CURLOPT_HTTPHEADER => $headers
  46. ];
  47. trace($url);
  48. trace($params);
  49. $result = Http::post($url, json_encode($params), $options);
  50. trace($result);
  51. $result = json_decode($result, true);
  52. if ($result['errcode'] == '0') {
  53. return $result['user_info'];
  54. } else {
  55. return null;
  56. }
  57. }
  58. private static function signature($timestamp)
  59. {
  60. $config = get_addon_config('csmadmin');
  61. // 根据timestamp, appSecret计算签名值
  62. $s = hash_hmac('sha256', $timestamp, $config['ddappsecret'], true);
  63. $signature = base64_encode($s);
  64. // var_dump($signature);
  65. $urlencode_signature = urlencode($signature);
  66. // var_dump($urlencode_signature);
  67. return [
  68. 'signature' => $signature,
  69. 'urlencode_signature' => $urlencode_signature];
  70. }
  71. }