Sample.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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 think\cache\driver\Redis;
  10. class Sample
  11. {
  12. /**
  13. * 使用 Token 初始化账号Client
  14. * @return Dingtalk Client
  15. */
  16. public static function createClient()
  17. {
  18. $config = new Config([]);
  19. $config->protocol = "https";
  20. $config->regionId = "central";
  21. return new Dingtalk($config);
  22. }
  23. /**
  24. * 获取企业内部应用的accessToken
  25. **/
  26. public static function main()
  27. {
  28. $options = config('redis.');
  29. $redis = new Redis($options);
  30. $key = 'dingtalk_access_token';
  31. $access_token_data = $redis->get($key);
  32. if ($access_token_data) {
  33. return json_decode($access_token_data, true);
  34. }
  35. $client = self::createClient();
  36. // $getAccessTokenRequest = new GetAccessTokenRequest([
  37. // "appKey" => "dingekepwoyycxfbtyvg",
  38. // "appSecret" => "EjM9WohvKHo3eNqZGGbQHhbjM80QzapdC_f_reYiOCyEFOtaG1qoG2KzEfpSoLWe",
  39. // ]);
  40. $getAccessTokenRequest = new GetAccessTokenRequest([
  41. "appKey" => "'dingilnkljzq3a4chjrw",
  42. "appSecret" => "Dt-nHAw4G-dniS7P9VmbnQRIKHQfGIQNIVHVNVHOZMtLPcsIv4KJYk_AjBCRsaH4"
  43. ]);
  44. try {
  45. $res = $client->getAccessToken($getAccessTokenRequest);
  46. } catch (Exception $err) {
  47. if (!($err instanceof TeaError)) {
  48. $err = new TeaError([], $err->getMessage(), $err->getCode(), $err);
  49. }
  50. if (!Utils::empty_($err->code) && !Utils::empty_($err->message)) {
  51. // err 中含有 code 和 message 属性,可帮助开发定位问题
  52. }
  53. p($err->getMessage(), $err->getCode());exit;
  54. }
  55. if ($res->body) {
  56. $data = [
  57. 'accessToken' => $res->body->accessToken,
  58. 'expireIn' => $res->body->expireIn,
  59. ];
  60. $redis->set($key, json_encode($data), 7000);
  61. return $data;
  62. } else {
  63. return false;
  64. }
  65. }
  66. }