|
@@ -14,6 +14,9 @@ class WeixinService extends Service
|
|
|
const TOKEN = '';
|
|
|
const KEY = 'weixintnine';
|
|
|
|
|
|
+ const STABLE_TOKEN_URL = 'https://api.weixin.qq.com/cgi-bin/stable_token'; // 稳定版接口
|
|
|
+ const KEY_STABLE = 'weixinMessage';
|
|
|
+
|
|
|
public function getToken(){
|
|
|
$token_key = self::KEY.'_'.'token';
|
|
|
$token = Redis::get($token_key);
|
|
@@ -32,6 +35,36 @@ class WeixinService extends Service
|
|
|
return [true,$token];
|
|
|
}
|
|
|
|
|
|
+ public function getTokenSTABLE() {
|
|
|
+ $token_key = self::KEY_STABLE . '_token';
|
|
|
+ $token = Redis::get($token_key);
|
|
|
+
|
|
|
+ // 缓存存在且有效
|
|
|
+ if ($token) return [true, $token];
|
|
|
+
|
|
|
+ // 构建 POST 请求体
|
|
|
+ $postData = json_encode([
|
|
|
+ 'grant_type' => 'client_credential',
|
|
|
+ 'appid' => self::APPID,
|
|
|
+ 'secret' => self::APPSECRET,
|
|
|
+ // 可选:'force_refresh' => true 强制刷新
|
|
|
+ ]);
|
|
|
+
|
|
|
+ list($status, $res) = $this->post_helper(self::STABLE_TOKEN_URL, $postData);
|
|
|
+ if(! $status) return [false, $res];
|
|
|
+
|
|
|
+ // 错误处理
|
|
|
+ if (isset($res['errcode']) && $res['errcode'] != 0) return [false, "{$res['errcode']}: {$res['errmsg']}"];
|
|
|
+ if (empty($res['access_token'])) return [false, 'access_token missing'];
|
|
|
+
|
|
|
+ // 缓存 Token(有效期7200秒,提前300秒刷新)
|
|
|
+ $token = $res['access_token'];
|
|
|
+ $expire = $res['expires_in'] - 300; // 实际6900秒(1小时55分)
|
|
|
+ Redis::setex($token_key, $expire, $token);
|
|
|
+
|
|
|
+ return [true, $token];
|
|
|
+ }
|
|
|
+
|
|
|
public function getOpenid($data){
|
|
|
if(empty($data['code'])) return [false, 'code不能为空'];
|
|
|
$code = $data['code'];
|