微信获取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;
        }
    }
相关推荐
darkb1rd1 小时前
二、PHP 5.4-7.4版本演进与安全改进
安全·php·webshell
程序 代码狂人1 小时前
CentOS7初始化配置操作
linux·运维·开发语言·php
m0_748233172 小时前
PHP版本演进:从7.x到8.x全解析
java·开发语言·php
zhengfei6112 小时前
精选的优秀法证分析工具和资源列表
开发语言·php
REDcker3 小时前
RFC1918私有IP地址空间详解
网络协议·tcp/ip·php
云云只是个程序马喽5 小时前
AI短剧创作系统源码(PHP+MySQL+Uniapp)实现方案
php
Godspeed Zhao17 小时前
现代智能汽车系统——总线技术1
网络·汽车·php
stwood00720 小时前
如何在 EC-CUBE 4 中为产品图像启用 WebP 格式图像
php
一人の梅雨20 小时前
VVIC图片搜索接口进阶实战:服装批发场景下的精准识图与批量调度方案
开发语言·机器学习·php
m0_7482299920 小时前
Laravel 2.x:框架的早期特性解析
php·laravel