当前位置: 首页>编程语言>正文

微信普通获取的access_token凭证如何改成可多个公众号获取 微信小程序获取access_token


  • 一、微信接口文档
  • 二、access_token 的存储与更新
  • 三、PHP调微信小程序接口生成access_token
  • 1、代码
  • 2、打印


一、微信接口文档

  • 导航:微信官方文档 --> 服务端 --> 接口调用凭证 --> getAccessToken
  • 具体调用请前去官方文档查看

二、access_token 的存储与更新

接口文档里写了,请仔细阅读接口文档

  • access_token 的存储至少要保留 512 个字符空间;
  • access_token 的有效期目前为 2 个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效;
  • 建议开发者使用中控服务器统一获取和刷新 access_token,其他业务逻辑服务器所使用的 access_token 均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致 access_token 覆盖而影响业务;
  • access_token 的有效期通过返回的 expires_in 来传达,目前是7200秒之内的值,中控服务器需要根据这个有效时间提前去刷新。在刷新过程中,中控服务器可对外继续输出的老 access_token,此时公众平台后台会保证在5分钟内,新老 access_token 都可用,这保证了第三方业务的平滑过渡;
  • access_token 的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新 access_token 的接口,这样便于业务服务器在API调用获知 access_token 已超时的情况下,可以触发 access_token 的刷新流程。

详情可参考微信公众平台文档 《获取access_token

三、PHP调微信小程序接口生成access_token

1、代码

public function test() {
    $accessToken = self::getAccessToken();
    echo "access_token is {$accessToken}";
}

public function getAccessToken() {
    $url = 'https://api.weixin.qq.com/cgi-bin/token';
    $data = [
        'grant_type' => 'client_credential', //填写 client_credential
        'appid' => 'wx523***********', //小程序唯一凭证:AppID 16位16进制(字母小写)
        'secret' => 'c4ca4238a0************9a6f75849b' //小程序唯一凭证:AppSecret 32位16进制(字母小写) => 类似于md5()
    ];
    $apiUrl = self::getUrl($url, $data);
    $result =  json_decode(self::curlGet($apiUrl),true);
    $accessToken = isset($result['access_token']) ? $result['access_token'] : '';
    if (!$accessToken) {
        die(json_encode($result, JSON_UNESCAPED_UNICODE)); //输出错误
    }
    return $accessToken;
}

//url生成器
public function getUrl($apiUrl, $param = []){
    $param = http_build_query($param);
    return $apiUrl . '?' . $param;
}

public function curlGet($url, $header = []) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPGET, true);
    if ($header) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    }
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置超时时间:30s
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //忽略ssl检测
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //1 或 TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。-
    curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 时追踪句柄的请求字符串,从 PHP 5.1.3 开始可用。这个很关键,就是允许你查看请求header
    $output = curl_exec($ch);
    if (!$output) {
//        echo "request $url fail:", (array)curl_error($ch); //记录日志
    }
    curl_close($ch);
//    echo "request $url success:" . json_encode(array($url, $header, $output), true); //记录日志
    return $output;
}

2、打印

  • 由于appidsecret不是真实有效的,所以打印如下
{"errcode":40013,"errmsg":"invalid appid rid: 609deb67-3288bef4-69fe5dee"}
  • 正常返回
{"access_token":"ACCESS_TOKEN","expires_in":7200}



https://www.xamrdz.com/lan/59j1935523.html

相关文章: