WechatAccessTokenHelper.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <?php
  2. namespace addons\WechatVideoShop\common\helper;
  3. use addons\WechatVideoShop\common\expand\sdk\weixin\src\model\basic\AccessTokenModel;
  4. use addons\WechatVideoShop\common\expand\sdk\weixin\src\request\basic\AccessTokenRequest;
  5. use GuzzleHttp\Exception\GuzzleException;
  6. use yii\helpers\Json;
  7. class WechatAccessTokenHelper
  8. {
  9. /**
  10. * @param array $config
  11. * @return mixed
  12. * @throws GuzzleException
  13. * @throws \Exception
  14. */
  15. public static function getAccessToken(array $config)
  16. {
  17. $key = "wechat:video:shop:access_token:{$config['wechat_appid']}";
  18. $access_token = \Yii::$app->redis->get($key);
  19. if (empty($access_token)) {
  20. $accessTokenModel = new AccessTokenModel();
  21. $accessTokenModel->grant_type = 'client_credential';
  22. $accessTokenModel->appid = $config['wechat_appid'];
  23. $accessTokenModel->secret = $config['wechat_secret'];
  24. $resp = WechatRequestHelper::execute(new AccessTokenRequest($config), $accessTokenModel, false);
  25. $ret = $resp->toArray();
  26. if (empty($ret['access_token'])) throw new \Exception("access token为空");
  27. $access_token = $ret['access_token'];
  28. // 每个小时一次
  29. \Yii::error("WechatAccessTokenHelper 微信视频号小店access token-> " . Json::encode($ret));
  30. \Yii::$app->redis->setex($key, !empty($ret['expires_in']) ? intval($ret['expires_in']) - 1000 : 3600, $access_token);
  31. }
  32. return $access_token;
  33. }
  34. }