微信获取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;
        }
    }
相关推荐
OKUNP5 小时前
Docker高级管理--容器通信技术与数据持久化
docker·容器·php
hunzi_16 小时前
搭建商城系统
java·uni-app·php
今日热点6 小时前
小程序主体变更全攻略:流程、资料与异常处理方案
经验分享·微信·小程序·企业微信·微信公众平台·微信开放平台
泉城老铁10 小时前
SpringBoot对接微信公众号并实现消息发送功能详解
后端·微信
mon_star°14 小时前
搭建一款结合传统黄历功能的日历小程序
微信·微信小程序·小程序·微信公众平台
果子⌂14 小时前
Docker-构建镜像并实现LNMP架构
mysql·nginx·docker·容器·架构·php
tomcsdn3115 小时前
SMTPman,smtp的端口号是多少全面解析配置
服务器·开发语言·php·smtp·邮件营销·域名邮箱·邮件服务器
Q_Q51100828517 小时前
python的保险业务管理与数据分析系统
开发语言·spring boot·python·django·flask·node.js·php
hrrrrb18 小时前
【TCP/IP】5. IP 协议
网络协议·tcp/ip·php