2017-07-29:结贴
昨天研究了半天,也没解决,看到出错的http头里面有PHPSESSID,回头去修改了一下程序里的session部分的代码(这部分代码在微信网页受权以后),,也不知道是腾讯那边修正了bug仍是我修改了正确的session代码,反正这个问题没了,已经正常运行了一天了~php
2017-07-28:第三次更新
加了https以后,就我本身调试的那个帐号的安卓设备能够了,其余帐号仍是会出现问题,并且此次不出错误40163了,压根白页面,过会儿出现网页找不到,复制连接一看还在index.php里,压根不转入oauth.php了,看来问题的确是在公众号后台那边。html
不用https,用日志记录,确实oauth.php被调用了两次,http头记录以下:ios
errorweb
2017-07-27 14:48:29 【021HVeVO1RRzU31O5ZXO1LdhVO1HVeVe】json
2017-07-27 14:48:29 【{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/wxpic,image/sharpp,/;q=0.8","Accept-Encoding":"gzip","Accept-Language":"zh-CN,en-US;q=0.8","Connection":"close","Cookie":"PHPSESSID=2nogkq0l072jvnt8728jonned4","Host":"www.yoookosoft.cn","Upgrade-Insecure-Requests":"1","User-Agent":"Mozilla/5.0 (Linux; Android 6.0.1; MI 4LTE Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043409 Safari/537.36 MicroMessenger/6.5.10.1080 NetType/WIFI Language/zh_CN","X-Forwarded-For":"114.231.66.45"}】api
2017-07-27 14:48:39 【021HVeVO1RRzU31O5ZXO1LdhVO1HVeVe】缓存
2017-07-27 14:48:39 【{"Host":"www.yoookosoft.cn","Connection":"keep-alive","Upgrade-Insecure-Requests":"1","User-Agent":"Mozilla/5.0 (Linux; Android 6.0.1; MI 4LTE Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043409 Safari/537.36 MicroMessenger/6.5.10.1080 NetType/WIFI Language/zh_CN","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/wxpic,image/sharpp,/;q=0.8","Accept-Encoding":"gzip, deflate","Accept-Language":"zh-CN,en-US;q=0.8","Cookie":"PHPSESSID=2nogkq0l072jvnt8728jonned4"}】安全
ok服务器
2017-07-27 14:50:05 【001zXCac2zuXTQ0f747c2CFAac2zXCam】微信
2017-07-27 14:50:05 【{"Host":"www.yoookosoft.cn","Upgrade-Insecure-Requests":"1","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89 MicroMessenger/6.5.10 NetType/WIFI Language/zh_CN","Accept-Language":"zh-cn","Accept-Encoding":"gzip, deflate","Connection":"keep-alive"}】
暂时还没解决办法,今天继续排查~
--------------------------------------------------------------------------------------------
点击一个公众号菜单,跳转到【微信网页受权】,ios平台没问题,安卓平台始终是错误40163,官方的说法是code被重复使用了,从index.php里获取了立刻就跳转到oauth.php里去换取access_token,中间没有任何使用过!看到网上一条线索,用苹果手机没任何问题,安卓一直是错误40163,换了两台安卓设备,微信都更新到了最新版本,错误一直在~
代码以下:
index.php
<?php header('location:https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$myappurl.'oauth.php&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect');
oauth.php
<?php $code = $_GET['code']; $state = $_GET['state']; if (empty($code)) $this->error('受权失败'); //获取oauth_token $token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type=authorization_code'; $token = json_decode(file_get_contents($token_url)); if (isset($token->errcode)) { echo '<h1>错误:</h1>'.$token->errcode; echo '<br/><h2>错误信息:</h2>'.$token->errmsg; exit; } //……
安卓手机错误画面:
苹果手机正确画面:
2017-07-26:第一次更新
我又在header以前加了不使用缓存,强制不使用缓存,仍是有这个错误~
<?php header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-cache"); header("Pragma: no-cache"); header('location:https://open.weixin.qq.com/connect/oauth2/authorize?appid=个人AppID&redirect_uri=个人URL/ oauth.php&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect');
而后找了【微信web开发者工具】,在pc上模拟访问微信网页受权,此次发现点线索,照理说用snsapi_userinfo方式访问微信网页受权(若是是snsapi_base是不会出现下面的窗口的),会跳一个受权窗口,在调试工具里是跳的,可是在手机里不出现如下画面,不知道为何,怀疑跟这里有关……
我怀疑是否是跟这里有关,在安卓手机上如今不显示上述提示窗口了,而后进度条走了很长时间以后,就开始出错误40163,在【微信web开发者工具】上是会出现提示窗口的!感受应该是微信安卓版的问题,可是微信又没有什么能够提问的平台,微信客服形同虚设,真郁闷。
各类方法解决不了之下,又继续读公众号的官方文档https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842,读到这一部分
“受权后重定向的回调连接地址,请使用urlEncode对连接进行处理”
官方的例子就是用urlEncode的,立刻改为urlEncode,可是错误依旧;
“尤为注意:跳转回调redirect_uri,应当使用https连接来确保受权code的安全性。”
再看官方的跳转地址,第一个snsapi_base是有https的,第二个snsapi_userinfo没有用https,个人服务器上是有部署https的,立刻在http后面加了个s,我靠,问题解决了!!!
安卓也再没有错误40163了,苹果为何没事呢?苹果的app是强制使用https的,安卓没有强制!!!
为何每次刚重启服务器的时候安卓好用的呢?如今的网络环境太差了,谁知道在传输过程当中被加了些什么?看来https真的是有必要大力推广!!!
如下是官方的例子:
scope为snsapi_base https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdap ter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_bas e&state=123#wechat_redirect scope为snsapi_userinfo https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type= code&scope=snsapi_userinfo&state=STATE#wechat_redirect