Sample.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace app\extend\Dingtalk;
  3. use AlibabaCloud\SDK\Dingtalk\Voauth2_1_0\Dingtalk;
  4. use \Exception;
  5. use AlibabaCloud\Tea\Exception\TeaError;
  6. use AlibabaCloud\Tea\Utils\Utils;
  7. use Darabonba\OpenApi\Models\Config;
  8. use AlibabaCloud\SDK\Dingtalk\Voauth2_1_0\Models\GetAccessTokenRequest;
  9. use AlibabaCloud\SDK\Dingtalk\Voauth2_1_0\Models\CreateJsapiTicketHeaders;
  10. use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
  11. use think\cache\driver\Redis;
  12. class Sample
  13. {
  14. /**
  15. * 使用 Token 初始化账号Client
  16. * @return Dingtalk Client
  17. */
  18. public static function createClient()
  19. {
  20. $config = new Config([]);
  21. $config->protocol = "https";
  22. $config->regionId = "central";
  23. return new Dingtalk($config);
  24. }
  25. // 获取应用身份相关访问凭证
  26. /**
  27. * 获取企业内部应用的accessToken
  28. **/
  29. public static function accessToken()
  30. {
  31. $options = config('redis.');
  32. $redis = new Redis($options);
  33. $key = 'dingtalk_accessToken';
  34. $access_token_data = $redis->get($key);
  35. if ($access_token_data) {
  36. return json_decode($access_token_data, true);
  37. }
  38. $client = self::createClient();
  39. // $getAccessTokenRequest = new GetAccessTokenRequest([
  40. // "appKey" => "dingekepwoyycxfbtyvg",
  41. // "appSecret" => "EjM9WohvKHo3eNqZGGbQHhbjM80QzapdC_f_reYiOCyEFOtaG1qoG2KzEfpSoLWe",
  42. // ]);
  43. $getAccessTokenRequest = new GetAccessTokenRequest([
  44. "appKey" => "dingilnkljzq3a4chjrw",
  45. "appSecret" => "Dt-nHAw4G-dniS7P9VmbnQRIKHQfGIQNIVHVNVHOZMtLPcsIv4KJYk_AjBCRsaH4"
  46. ]);
  47. try {
  48. $res = $client->getAccessToken($getAccessTokenRequest);
  49. } catch (Exception $err) {
  50. if (!($err instanceof TeaError)) {
  51. $err = new TeaError([], $err->getMessage(), $err->getCode(), $err);
  52. }
  53. if (!Utils::empty_($err->code) && !Utils::empty_($err->message)) {
  54. // err 中含有 code 和 message 属性,可帮助开发定位问题
  55. }
  56. p($err->getMessage(), $err->getCode());exit;
  57. }
  58. // {"accessToken" : "fw8ef8we8f76e6f7s8dxxxx","expireIn" : 7200}
  59. $data = [
  60. 'accessToken' => $res->body->accessToken,
  61. 'expireIn' => $res->body->expireIn,
  62. ];
  63. $redis->set($key, json_encode($data), 7100);
  64. return $data;
  65. }
  66. /**
  67. * 获取jsapiTicket
  68. **/
  69. public static function jsapiTickets(){
  70. $options = config('redis.');
  71. $redis = new Redis($options);
  72. $key = 'dingtalk_jsapiTicket';
  73. $access_token_data = $redis->get($key);
  74. if ($access_token_data) {
  75. return json_decode($access_token_data, true);
  76. }
  77. $accessToken = self::accessToken()['accessToken'];
  78. $client = self::createClient();
  79. $createJsapiTicketHeaders = new CreateJsapiTicketHeaders([]);
  80. $createJsapiTicketHeaders->xAcsDingtalkAccessToken = $accessToken;
  81. try {
  82. $res = $client->createJsapiTicketWithOptions($createJsapiTicketHeaders, new RuntimeOptions([]));
  83. } catch (Exception $err) {
  84. if (!($err instanceof TeaError)) {
  85. $err = new TeaError([], $err->getMessage(), $err->getCode(), $err);
  86. }
  87. if (!Utils::empty_($err->code) && !Utils::empty_($err->message)) {
  88. // err 中含有 code 和 message 属性,可帮助开发定位问题
  89. }
  90. p($err->getMessage(), $err->getCode());exit;
  91. }
  92. // {"jsapiTicket" : "fw8ef8we8f76e6f7s8dxxxx","expireIn" : 7200}
  93. $data = [
  94. 'jsapiTicket' => $res->body->jsapiTicket,
  95. 'expireIn' => $res->body->expireIn,
  96. ];
  97. $redis->set($key, json_encode($data), 7100);
  98. return $data;
  99. }
  100. }