Sample.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. $redis = new Redis(config('redis.'));
  32. $key = 'dingtalk_accessToken';
  33. $access_token_data = $redis->get($key);
  34. if ($access_token_data) {
  35. return json_decode($access_token_data, true);
  36. }
  37. $client = self::createClient();
  38. $getAccessTokenRequest = new GetAccessTokenRequest([
  39. "appKey" => "dingilnkljzq3a4chjrw",
  40. "appSecret" => "Dt-nHAw4G-dniS7P9VmbnQRIKHQfGIQNIVHVNVHOZMtLPcsIv4KJYk_AjBCRsaH4"
  41. ]);
  42. try {
  43. $res = $client->getAccessToken($getAccessTokenRequest);
  44. } catch (Exception $err) {
  45. if (!($err instanceof TeaError)) {
  46. $err = new TeaError([], $err->getMessage(), $err->getCode(), $err);
  47. }
  48. if (!Utils::empty_($err->code) && !Utils::empty_($err->message)) {
  49. // err 中含有 code 和 message 属性,可帮助开发定位问题
  50. }
  51. p($err->getMessage(), $err->getCode());exit;
  52. }
  53. // {"accessToken" : "fw8ef8we8f76e6f7s8dxxxx","expireIn" : 7200}
  54. $data = [
  55. 'accessToken' => $res->body->accessToken,
  56. 'expireIn' => $res->body->expireIn,
  57. ];
  58. $redis->set($key, json_encode($data), 7100);
  59. return $data;
  60. }
  61. /**
  62. * 获取jsapiTicket
  63. **/
  64. public static function jsapiTickets(){
  65. $redis = new Redis(config('redis.'));
  66. $key = 'dingtalk_jsapiTicket';
  67. $access_token_data = $redis->get($key);
  68. if ($access_token_data) {
  69. return json_decode($access_token_data, true);
  70. }
  71. $accessToken = self::accessToken()['accessToken'];
  72. $client = self::createClient();
  73. $createJsapiTicketHeaders = new CreateJsapiTicketHeaders([]);
  74. $createJsapiTicketHeaders->xAcsDingtalkAccessToken = $accessToken;
  75. try {
  76. $res = $client->createJsapiTicketWithOptions($createJsapiTicketHeaders, new RuntimeOptions([]));
  77. } catch (Exception $err) {
  78. if (!($err instanceof TeaError)) {
  79. $err = new TeaError([], $err->getMessage(), $err->getCode(), $err);
  80. }
  81. if (!Utils::empty_($err->code) && !Utils::empty_($err->message)) {
  82. // err 中含有 code 和 message 属性,可帮助开发定位问题
  83. }
  84. p($err->getMessage(), $err->getCode());exit;
  85. }
  86. // {"jsapiTicket" : "fw8ef8we8f76e6f7s8dxxxx","expireIn" : 7200}
  87. $data = [
  88. 'jsapiTicket' => $res->body->jsapiTicket,
  89. 'expireIn' => $res->body->expireIn,
  90. ];
  91. $redis->set($key, json_encode($data), 7100);
  92. return $data;
  93. }
  94. }