【坑爹微信】微信开发基础 --- 微信快捷登陆问题解决
目录 List
- 那一抹淡淡的忧伤—–微信开发基础
- 用纯js是不可能用纯js了,这辈子都不用纯js了 —– 微信JSSDK开发以及问题解答
- 要你命3000 —— 微信支付开发系列问题解决
导语
微信快捷登陆是基于OAuth2.0 (如果想深入了解,点击查看博主的另一篇博文)和OPenid 等多种机制融合在一起的一种第三方授权协议接口的简称。
引用微信自己的话来讲快捷登陆的作用就是:如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑
简而言之就是拿着微信客户的资料入我们自己的系统完成我们自己的业务逻辑,这样做的好处是减少了用户注册登陆等环节的麻烦事,并且基于微信内置游览器能很好的延展我们要展现的业务功能,使操作流畅度增加。
微信开发前准备
这点准备其实你完全可以参考微信开发者文档
反正最后你得拥有以下这些:
- Appid
- Appsecret
- Mchid
- Key
- 证书并且上传至服务器
- JSSDK 安全授权目录配置好了
- 支付安全目录配置好了
- 支付回调目录配置好了
注意: 1和2是最基础的,你一定要有。后面的可以慢慢申办。
微信快捷登陆
终于说到正题了
首先我们要了解微信快捷登陆的步骤
1 第一步:用户同意授权,获取code
2 第二步:通过code换取网页授权access_token
3 第三步:拉取用户信息(需scope为 snsapi_userinfo)
其实你完全可以参考微信开发者文档
我现在直接将实施步骤,直接上代码
第一步:用户同意授权,获取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参数对应的授权作用域权限。
warning “: 尤其注意:由于授权操作安全等级较高,所以在发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问
//拼接跳转地址
$oauthUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->config['wechat_appid'] . '&redirect_uri=' . urlencode($customeUrl) . '&response_type=code&scope=snsapi_userinfo&state=' . $_SESSION['weixin']['state'] . '#wechat_redirect';
//跳转换code
header('Location:'.$oauthUrl);
注意这里面的可选参数state,虽然微信官方标注这个state是可选参数,但是事实告诉我,这个参数是必须加的,因为苹果手机的防火墙会自动先进行一次请求,会让你的code被使用而过期,所以只有验证你给state是否是你当前给的再使用code才是正确的步骤,那么代码改成:
//真正意义上的超全局变量$GLOBALS['_SESSION']['weixin']['state'] = md5(uniqid());//先正则匹配掉以前客户端可能存下的code$customeUrl = preg_replace('#&code=(\\w+)#', '', $this->config['site_url'] . $_SERVER['REQUEST_URI']);//拼接出要跳转的URL来给微信(这里的state状态值必须还是填上,因为苹果手机的防火墙会自动先进行一次请求,会让你的code被使用而过期)$oauthUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->config['wechat_appid'] . '&redirect_uri=' . urlencode($customeUrl) . '&response_type=code&scope=snsapi_userinfo&state=' . $_SESSION['weixin']['state'] . '#wechat_redirect';//进行下一步跳转header('Location:'.$oauthUrl);
第二步:通过code换取网页授权access_token
首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。
//只有带state的请求才是正式请求所以要先判断if (isset($_GET['code']) && isset($_GET['state']) && ($_GET['state'] == $GLOBALS['_SESSION']['weixin']['state'])) {unset($_SESSION['weixin']);//根据拿的code来拿access_token$return = $this->https_request('https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->config['wechat_appid'] . '&secret=' . $this->config['wechat_appsecret'] . '&code=' . $_GET['code'] . '&grant_type=authorization_code');$jsonrt = $return;
第三步:拉取用户信息(需scope为 snsapi_userinfo)
如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
$url='https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid.'&lang=zh_CN';//通过access_token和openid调用此接口获得用户详细信息$res=$this->https_request($url);//下方写上你的业务逻辑
到这里整个流程走完。
获取整段代码可以加qq 1577452412
出现问题的解决
我们排查错误先从前端表现来说
如果你还没有出现微信授权页面,那就是第一步就错了
如果你出现了授权页面,但是点击后有错误那就是卡在第二步后面
第一步出错的:
请排查
1.APPID是否对应当前公众号
2.REDIRECT_URI 是否是正确的url 里面有没有乱码或者有没有屏蔽掉&code这样的参数
3.snsapi_userinfo 只有这种模式的登陆才能出现快捷登陆授权页面
上面所有方法的调试都很简单就是直接打印出当前的请求url 看看到底是啥
第二步出错的:
请排查
1.SECRET 是否是当前公众号的
2. CODE 是否过期(code只能使用一次,5分钟未被使用自动过期。 )
3. 必须保证跳转url完整 检查state=STATE 这个有没有漏掉
以上调试的方法直接打印请求结果就可以了
第三步出错的:
1.access_token是否有效
以上方法请参考 验证access_token
所有问题都可以加qq 1577452412来问我,共同进步
【坑爹微信】微信开发基础 --- 微信快捷登陆问题解决相关推荐
- 微信 考勤 php,微信企业号开发之微信考勤Cookies的使用_javascript技巧
在上篇文章给大家介绍了微信企业号开发之微信考勤百度地图定位,接下来通过本文学习微信企业号开发之微信考勤Cookies的使用,具体内容如下. 使用微信考勤,每次使用微信企业号开发:微信用户信息和web网 ...
- 微信支付开发 认清微信支付v2和v3
微信支付现在分为v2版和v3版 2014年9月10号之前申请的为v2版(旧版本),之后申请的为v3版. V2版中的参数有 AppID AppSecret 支付专用签名串PaySignKey 商户号Pa ...
- 微信程序开发之微信接入(详细开发)
目录 前言:关于微信程序开发的网站 一.公众号分类 二.微信公众号开发 1.先进入到测试号进行测试 2.获取令牌access_token 3.制作自定义菜单 4.接口配置信息 1.注册的时候必须要实名 ...
- php+微信接口开发的微信分销平台拆分讲解(一)微信oauth2接口
本文不提供整套系统源码,只会开放部分源码,讲诉开发的经历.思路.问题解答,希望对新手有帮助,至于高手和大神一下而过或留下宝贵意见在此谢过. 废话不多说了开始进入正题. 基础篇 php当前主流WEB开发 ...
- 微信小游戏开发之Cocos Creator使用微信云开发和微信开放能力
主题 Cocos Creator集成微信云开发和调用微信开放能力 特别说明 CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文档中有 ...
- 单点服务器微信公众号,腾讯云联合微信降低开发门槛 微信生态从单点云开发到全面云开发...
本报记者 许洁 11月29日,由腾讯云与微信联合主办的第二届"小程序·云开发"技术峰会在京召开.来自腾讯的数据显示,云开发的注册用户数已达56万,较去年同期增长1.5倍,服务超过1 ...
- 微信平台开发与微信营销
一个二维码,一个商家在线商城,一套管理系统及平台,一个营销渠道,一个时机 1998年马化腾开QQ,让你注册,你不注册,现在一个5位数的QQ好几万: 2003年马云说开淘宝店不要钱,让你开店,你不开,1 ...
- 微信网页开发调用微信jssdk接口遇到的坑以及最终解决方法 (持续更新)
1.微信网页开发调用jssdk时报permission denied 大致是两个原因 (1)首先注册时未将你所调用的接口名字添加至jsApiList (2)第二个就是你的这个公众号没有权限使用这个ap ...
- java微信红包开发_微信现金红包开发1(JAVA)
参数3 : 商户订单号 mch_billno String mch_billno = mch_id + GenerateSequenceUtil.generateSequenceNo(); 些一个G ...
最新文章
- 将win7电脑变身WiFi热点,让手机、笔记本共享上网
- Java中ListE对象赋值问题(引用传递和值传递)
- 9th, Jan 2012 养成好的生活习惯真的很不容易
- Altium AD20批量修改丝印大小、更改丝印字体、丝印显示中文、更改位号丝印 相对元件的位置
- 讯飞输入法将深度神经网络DNN技术应用于语音识别达到业界领先水平
- 【不积跬步,无以致千里】linux下如何查看自己的外网IP
- 关于使用Kaptcha验证码框架遇到的问题
- cmake 交叉编译_如何使用CMake编译RTT微内核
- voronoi图代码_在Unity中实时计算Voronoi图
- 自主创新战略下的技术创新之道
- mysql数据库的索引及优化小技巧!
- TCP有限状态机(全网最全)
- 亚马逊云服务AWS Marketplace “重塑”企业软件SaaS之旅
- 用vue+element-ui快速写一个注册登录页面
- Algorithm:数学建模大赛(CUMCM/NPMCM)之全国大学生数学建模竞赛历年考察知识点统计可视化分析、论文评阅标准参考、国内外CUMCM数学建模类参考文献论文集合之详细攻略
- 工具系列 | 使用Lodop进行WEB打印程序开发
- navicat premium 15 下载安装详细教程
- 部署harbor并实现https(SAN签发证书)
- 考虑交通网络流量的电动汽车充电站规划matlab 采用matlab软件参照相关资料完成电动汽车程序
- 关于程序集成线上支付模块