博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP(YII2实现) 微信网页授权
阅读量:7169 次
发布时间:2019-06-29

本文共 2855 字,大约阅读时间需要 9 分钟。

 

参考地址

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

实现步骤分析: 获取code->access_token(不同于普通的微信access_token等会详细说明) ->openid->通过openid 获取用户信息

 

预先工作:

回调地址配置

 

 

tips:其中填写域名地址只需要填写到对应的访问到index.php 入口目录级别 (即比如百度 只需要 www.baidu.com 不需要http 和后面什么参数)

 

 

 

第一步:用户同意授权,获取code

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

scope参数中的snsapi_base(用户不需要确认)和snsapi_userinfo(需要确认)

用户同意授权后

如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE

 

第二步:通过code换取网页授权access_token

首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。

获取方式

获取code后,get获取: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

第三步:刷新access_token(基本不需要)

 原因:1每次生成获取的code有效次数为1并且5分钟失效,不同的code通过第二步获取的授权access_token 不一样

            2授权access_token 无限次数

 

第四步:拉取用户信息(需scope为 snsapi_userinfo)

http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

 

代码实现

采用YII2 basic版本

public function actionUserRedirect()    {        $request = \Yii::$app->request;        $code = $request->get('code');        $data = json_decode(wx_tools::getWebAccessToken($code),true);        if (is_array($data)) {            $user_info = wx_tools::getWebUserInfo($data['access_token'],$data['openid']);            $re = json_decode($user_info);        }else{            $re = $data;        }        $get  = $request->get();        $post = $request->post();        return $this->render('user-redirect',[            'code'=>$code,            'get'=>$get,            'post'=>$post,            're'=>$re,        ]);    }

 

 

 

第一步:用户同意授权,获取code

$app_id = \Yii::$app->params['app_id'];$redirect_uri = 'http://dev-test.heyin365.com/coffee/index.php/site/user-redirect';$redirect_uri = urlencode($redirect_uri);$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$app_id.'&redirect_uri='.$redirect_uri.'&response_type= code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect';

 

 

第二步:通过code换取网页授权access_token

public static function getWebAccessToken($code)    {        $app_id = \Yii::$app->params['app_id'];        $app_secret = \Yii::$app->params['app_secret'];        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $app_id . '&secret=' . $app_secret . '&code=' . $code . '&grant_type=authorization_code';        return wx_tools::getCurl($url);    }

第三步:拉取用户信息(需scope为 snsapi_userinfo)

 

public static function getWebUserInfo($access_token, $openid)    {        $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN';        return wx_tools::getCurl($url);    }

 

 

附注 wx_tools的postUrl方法和 getCurl方法前篇提供

 

转载于:https://www.cnblogs.com/lt-com/p/9341497.html

你可能感兴趣的文章
为什么要进行项目总结呢?又如何进行项目总结呢?
查看>>
iOS——重写Cell分割线
查看>>
window与linux下,php的redis扩展安装
查看>>
VirtualBox虚拟机网络设置
查看>>
Mongodb 之 安全权限控制
查看>>
httpclient发送网络请求
查看>>
可自动切换登录不同系统测试实例
查看>>
jQuery Validate
查看>>
Building IKEv1 and IKEv2 on CentOS 7
查看>>
Spring AOP就是这么简单啦
查看>>
如何解决生产环境宕机问题
查看>>
阿里云弹性容器实例产品 ECI ——云原生时代的基础设施
查看>>
织梦程序和ZBLOG系统比较:哪个更加适合建设中小型网站?[图]
查看>>
当移动数据分析需求遇到Quick BI
查看>>
图解分布式系统架构演进之路
查看>>
JavaScript面向对象程序设计创建对象的方法分析
查看>>
程序员笔记|常见的Spring异常分析及处理
查看>>
Java基础:面向对象四大特征、五大原则
查看>>
JSP 生命周期
查看>>
量化交易系统开发:自动化(机器人或EA)交易的优点
查看>>