微信获取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;
        }
    }
相关推荐
Nathan__2710 小时前
PHP面试题——情景应用
开发语言·php
北京盛世宏博13 小时前
异地机房采集踩坑笔记:以太网温湿度记录仪跨网段通信调试实战
开发语言·笔记·单片机·php·传感器·温湿度
盛世宏博智慧档案15 小时前
IP 温湿度设备频繁断连?TCP 心跳保活机制调试与参数设置指南
网络·网络协议·tcp/ip·php·传感器·温湿度
凡泰极客科技16 小时前
如何让企业App像微信一样,运行短剧、外卖和小游戏?
微信
Soari16 小时前
交换机转发模式
开发语言·网络·php
ESDWAN17 小时前
海外股票网络环境优化与交易场景应用:从行情获取到交易系统稳定性设计
开发语言·网络·php
WeiXin_DZbishe1 天前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
WeiXin_DZbishe1 天前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
WeiXin_DZbishe1 天前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计
Hum8le1 天前
漏洞知识点《php伪协议》
开发语言·安全·web安全·php