微信获取access_token授权的两种不同情况

1.网页授权:需要页面调用授权的sdk,首先需要获取到code参数

(A.网页版的获取code参考另一篇文章:https://blog.csdn.net/ettamei/article/details/148763361?spm=1011.2415.3001.5331

B.前端sdk提供:code只有5分钟的有效期

2A.第一种的获取access_token就是在获取code之后获取用户信息

只做获取用户信息,如果有之后需要js-sdk的操作这个access_token都是无效的,之后js-sdk使用的access_token也无法使用到获取用户信息中

php 复制代码
function usrAccessToken(string $code){
        $appid = $this->wechatConfig['appid'];
        $secret = $this->wechatConfig['app_secret'];
        //获取请求地址
        //获取code后,请求以下链接获取access_token
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$secret}&code={$code}&grant_type=authorization_code";
        $res_data = $this->curl_get($url);
        Tools::log_to_write_txt(['通过code换取网页授权access_token$res_data'=>$res_data]);
        $data = json_decode($res_data['data'], true);
        if(isset($data['errcode']) && ($data['errcode'] == 40163 || $data['errcode'] == 40029)){
            throw new \Exception('code已失效,请重新授权');
        }
        cache($data['openid'].'wx_access_token', $data["access_token"],7000);//保存
        return $data;
    }

获取到的信息例子:

php 复制代码
{  
"access_token":"94_S4F2QWpTjFMJhQ",//访问接口的令牌,用于调用受保护的资源(如用户信息)。 
"expires_in":7200,//有效时间,单位为秒。 
"refresh_token":"94_2wXpmw7nRpZ9Vi-w27O",//作用:刷新 access_token 的令牌。当access_token 过期后,可以用 refresh_token 获取新的access_token。 
"openid":"oC2wtxPWLc",//用户的唯一标识 ID,用于识别用户身份。 
"scope":"snsapi_userinfo"//表示当前授权的权限范围。snsapi_userinfo 表示可以调用接口获取用户详细信息(如昵称、头像等)。  
}

2B.获取js-sdk中使用的access_token:获取这个access_token是需要在微信公众号中设置ip白名单,如果使用的服务器ip地址不稳定需要设置静态ip或者使用云服务器

php 复制代码
 function getAccessTokenNow(){
        try{
            //实时获取
            $appid = $this->wechatConfig['appid'];
            $appsecret = $this->wechatConfig['app_secret'];
            //获取请求地址
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($ch);
            curl_close($ch);
            $jsoninfo = json_decode($output, true);
            Tools::log_to_write_txt(['网页授权access_token$res_data'=>$jsoninfo]);
            cache('wx_access_token', $jsoninfo["access_token"],7000);//保存
            return $jsoninfo["access_token"];
        }catch (\Exception $e){
            Tools::log_to_write_txt(['error_title'=>'[错误]获取票据出错:'.$e->getMessage(),'error_info'=>$e->getTraceAsString()]);
            return false;
        }
    }
相关推荐
子玖15 分钟前
实现微信扫码注册登录-基于参数二维码
后端·微信·go
ServBay1 小时前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户962377954483 小时前
CTF 伪协议
php
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel