errorcode 微信分享_微信公众号网页授权code问题

最近做微信开发,在网页授权的时候,总是出现异常

time:2017-03-10

问题:手机端访问网页没问题,电脑端微信测试就会出现code过期情况,导致服务器错误

错误情况:

只要出现上述申请访问连接,点击后code就会过期

code过期导致服务器报错

问题原因:

客户端以及微信方同时带code请求服务器多次,用户真实请求时code已经过期

解决方法:

万金油解决方法,第一次通过code获取到信息后就把code存入session中,短时间内直接从session中获取,不再请求微信防止服务器报错,下面的php代码给用户30秒缓存时间.

session_start();

if(isset($_SESSION['user'])){

$time = time()-$_SESSION['session_time'];

if($time>30){

unset($_SESSION['user']);

unset($_SESSION['session_time']);

}

}

if(isset($_SESSION['user'])){

$userinfo = $_SESSION['user'];

}else{...}

分析请求头找出用户真是请求,加以排除.注意要有上述情况的再尝试此方法

if(!isset($_SERVER['HTTP_UPGRADE_INSECURE_REQUESTS'])){

if(!isset($_GET['nsukey'])||$_SERVER['HTTP_CONNECTION']=='close'){

die;

}

}

后面发现自己刚开始用.top域名访问时候总是出现这个原因,后期换成.com就不会让申请跳转直接进去落地页了.可能是微信设置原因.

下方阐述原因以及排错经过,无聊发泄,没事干的可以看看

网页写好后,电脑版微信测试时候总是无缘无故500报错,找到报错原因就是code失效,一头雾水,检查自己代码检查了好久,最后手机端一看页面好好的! 艹!

很明显code是电脑版使用时候,在用户访问之前已经被用了,啥都不说了,先打开抓包工具看一看

可以看到我还没点继续访问的时候,就已经有一个请求冲到我的服务器把code用掉啦!

在我点完之后多了一个请求过去,不过明显已经晚了..code已经失效

现在找到原因很明显要区别哪个是用户真正的请求,分析下请求头发现后面访问的url参数里有有一个叫nsukey的参数,那就好办了 有这个参数的再请求获取code,没有的直接退出呗,代码上传一试

靠!继续报错!

目测还有别的请求也访问了服务器,本地抓包没抓到,八成是微信自己访问的,怎么办呢?

$file = fopen("HELLO.TXT",'a+');

$txt = json_encode($_SERVER);

fwrite($file, "\n".$txt);

fclose($file);

die;

生气了,只要有请求就把信息打印出来看看呗,写好后在用电脑版试一试

打开hello.txt,乖乖!微信也请求了两次!

再次分析信息,发现微信请求的HTTP_CONNECTION没有开启,现在就办了

if(!isset($_GET['nsukey'])||$_SERVER['HTTP_CONNECTION']=='close'){

die;

}

这两种情况屏蔽掉最后就是真是请求了呗,看着很完美,试一下也连接成功啦!

可惜最重要的手机端试一下GG,没办法在用上面方法把手机端的也打印出来看看

发现手机端有一个独特的HTTP_UPGRADE_INSECURE_REQUESTS

OK,那就再判断下吧..

if(!isset($_SERVER['HTTP_UPGRADE_INSECURE_REQUESTS'])){

if(!isset($_GET['nsukey'])||$_SERVER['HTTP_CONNECTION']=='close'){

die;

}

}

坑爹的微信,自己设置code只有一次机会,自己还跑去请求那么多次.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值