火坑啊,微信网页授权redirect_uri通知两次啊,这个有解吗?? code 和状态state都一样导致报错.
发布于 7 年前 作者 xdayannanfei 7275 次浏览 来自 问答

req method: GET req.originalUrl: /x_ready_pay?code=061eY9xX08tQu02IH4wX05BjxX0eY9xA&state=123456 req ip: ::ffff:101.226.233.152

req method: GET req.originalUrl: /x_ready_pay?code=061eY9xX08tQu02IH4wX05BjxX0eY9xA&state=123456 req ip: ::ffff:113.108.11.52

一次成功获取的数据. data:{“access_token”:“FjZx0nDhX3u3CmFr8cTOEQ2amaPvnLBzOY NvCIOJTehpisqvm5XwDHJ8lCaR0WoUrYLS1xhbIqnV06WWlCiNJME7sNMpEuCz1qqvmAHNTIs”,“expi res_in”:7200,“refresh_token”:“FjZx0nDhX3u3CmFr8cTOEdruHHr0G-GbOXrpz-C5Ir59aryUjl UU1LAKcLVBXAQkJUBz15q8hjr12BG_j0CNFSWsDWA0lugYNqV6_7L4858”,“openid”:“oP5iOxJjYbB WAQNUey4TEfhmfRQU”,“scope”:“snsapi_base”} 一次失败获取的数据. -data:{“errcode”:40163,“errmsg”:“code been used, hints: [req_id: s3ClBa0052th26 ]”}

5 回复

这个会执行两次: function x_ready_pay_Handler(req, res) { var code = req.query.code; var state = req.query.state; console.log(’/x_ready_pay code=[’ + code + ‘], state=[’ + state + ‘]’); weixinutils.getopenid(req, code).then((data) => { if (req.weixin.openid) { //res.redirect(’/readypay.jsp?openid=’ + req.weixin.openid); //res.end(req.weixin.openid); res.sendFile(path.join(__dirname, ‘views/login.html’)); } else { console.log(’########################################################’); res.end(’’); } }, (err) => { console.log(‘x_pay_Handler:’, err); res.send(err); }); } app.get(’/x_ready_pay’, x_ready_pay_Handler);

这个论坛好像不杂的啊。。。。。。

之前碰到过,我记得是虽然返回多次,但是http code状态是不一样的。你可以看一下。稳一点的方案是,如果处理过就不在处理,做一个10分钟的缓存去判断。

code只能被使用一次

有可能多次通知的,自己业务里面处理重复啊

回到顶部