作微信支付的时候,须要微信受权拿openIdhtml
大概流程就是,把用户重定向到微信一个地址,而后微信带着code重定向回来,而后拿code换用户的openIdandroid
这期间发生了一件比较有意思的事情,android版的微信受权失败致使无法支付,看了一下服务器上报错以下服务器
System.Collections.Generic.KeyNotFoundException: 给定关键字不在字典中。
在 System.Collections.Generic.Dictionary`2.get_Item(TKey key)
在 WxPayAPI.JsApiPay.GetOpenidAndAccessTokenFromCode(String code)
{"errcode":40163,"errmsg":"code been used, hints: [ req_id: tivCza01272165 ]"}微信
我支付代码是和官方demo同样的,基本没改。微信支付
而后看到这个错误,我第一反映是打一下日志,我把受权页面打上了日志,记录了一下访问时间和访问的url完整地址,也就是包含参数部分的。url
而后再把用code换openId的result也用日志记录了。日志
而后发现code
我请求拿code后,微信同一个code给我重定向回来了两次,第一次我换取到了openId,第二次没换到openI的,错误内容是 code has been used,也就是code被使用过了。htm
因此问题确定是出在两次重定向。可是为何会同一个code重定向两次?我搜了一下,不少开发同窗都碰到过,有的人请求受权的时候加了一个参数 &connect_redirect=1 ,我看了一下不少人的反馈,有些人是能够解决问题的,有些人依然没解决,好比我。。。。。blog
而后搜来搜去,还有人在园子里说是360搞的鬼,见帖子: http://www.cnblogs.com/Can-daydayup/p/10128324.html
而后我服务器也安装了 360 ,而后我一退出就不会了。因此我想问问@MJ0011,为何咱们服务器发起请求,你360要作一次?
360能给个说法么?这是要解决什么问题因此要重发一个请求?