Dingtoken.php 1.9 KB

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