123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- <?php
- namespace app\extend\Dingtalk;
- use AlibabaCloud\SDK\Dingtalk\Voauth2_1_0\Dingtalk;
- use \Exception;
- use AlibabaCloud\Tea\Exception\TeaError;
- use AlibabaCloud\Tea\Utils\Utils;
- use Darabonba\OpenApi\Models\Config;
- use AlibabaCloud\SDK\Dingtalk\Voauth2_1_0\Models\GetAccessTokenRequest;
- use AlibabaCloud\SDK\Dingtalk\Voauth2_1_0\Models\CreateJsapiTicketHeaders;
- use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
- use think\cache\driver\Redis;
- class Sample
- {
- /**
- * 使用 Token 初始化账号Client
- * @return Dingtalk Client
- */
- public static function createClient()
- {
- $config = new Config([]);
- $config->protocol = "https";
- $config->regionId = "central";
- return new Dingtalk($config);
- }
- // 获取应用身份相关访问凭证
- /**
- * 获取企业内部应用的accessToken
- **/
- public static function accessToken()
- {
- $redis = new Redis(config('redis.'));
- $key = 'dingtalk_accessToken';
- $access_token_data = $redis->get($key);
- if ($access_token_data) {
- return json_decode($access_token_data, true);
- }
- $client = self::createClient();
- $getAccessTokenRequest = new GetAccessTokenRequest([
- "appKey" => "dingilnkljzq3a4chjrw",
- "appSecret" => "Dt-nHAw4G-dniS7P9VmbnQRIKHQfGIQNIVHVNVHOZMtLPcsIv4KJYk_AjBCRsaH4"
- ]);
- try {
- $res = $client->getAccessToken($getAccessTokenRequest);
- } catch (Exception $err) {
- if (!($err instanceof TeaError)) {
- $err = new TeaError([], $err->getMessage(), $err->getCode(), $err);
- }
- if (!Utils::empty_($err->code) && !Utils::empty_($err->message)) {
- // err 中含有 code 和 message 属性,可帮助开发定位问题
- }
- p($err->getMessage(), $err->getCode());exit;
- }
- // {"accessToken" : "fw8ef8we8f76e6f7s8dxxxx","expireIn" : 7200}
- $data = [
- 'accessToken' => $res->body->accessToken,
- 'expireIn' => $res->body->expireIn,
- ];
- $redis->set($key, json_encode($data), 7100);
- return $data;
- }
- /**
- * 获取jsapiTicket
- **/
- public static function jsapiTickets(){
- $redis = new Redis(config('redis.'));
- $key = 'dingtalk_jsapiTicket';
- $access_token_data = $redis->get($key);
- if ($access_token_data) {
- return json_decode($access_token_data, true);
- }
- $accessToken = self::accessToken()['accessToken'];
- $client = self::createClient();
- $createJsapiTicketHeaders = new CreateJsapiTicketHeaders([]);
- $createJsapiTicketHeaders->xAcsDingtalkAccessToken = $accessToken;
- try {
- $res = $client->createJsapiTicketWithOptions($createJsapiTicketHeaders, new RuntimeOptions([]));
- } catch (Exception $err) {
- if (!($err instanceof TeaError)) {
- $err = new TeaError([], $err->getMessage(), $err->getCode(), $err);
- }
- if (!Utils::empty_($err->code) && !Utils::empty_($err->message)) {
- // err 中含有 code 和 message 属性,可帮助开发定位问题
- }
- p($err->getMessage(), $err->getCode());exit;
- }
- // {"jsapiTicket" : "fw8ef8we8f76e6f7s8dxxxx","expireIn" : 7200}
- $data = [
- 'jsapiTicket' => $res->body->jsapiTicket,
- 'expireIn' => $res->body->expireIn,
- ];
- $redis->set($key, json_encode($data), 7100);
- return $data;
- }
- }
|