微信小程序报错 "errcode":40163,"errmsg":"code been used

最近刚开始学习小程序,刚解决了一个前后端数据传递的问题,成功将用户信息存储到数据库,然后又遇到一个新的问题.

问题:
我使用getUserInfo来获取用户信息的,然而获取的信息里是没有唯一标识的,都无法作为主键,我后端是通过idWorker随机生成的id.
没错,问题就是数据库数据会重复,因为我无法判断数据是否在数据库已经存在,在这样的情况下,我了解到了login方法,可以生成code进行解析,解析出openid,而openid是可以作为用户id存入数据库的,我跟着官方文档操作了一遍,具体流程就不放了,网上和文档介绍的都比较详细,.
操作的比较成功,前后端都获取到了openid,但是获取完毕后前端又发送了一次请求,然后就这样了:
前端:
微信小程序报错
后端也是如此,于是我又一次面向百度编程.
了解几点:
1.code使用一次之后就失效
2.5分钟有效期
从后端打印数据也能看出,多次发请求但是我的url中的code并没有刷新,但是前端传递过来的code已经发生变化,所以报错了
多次传递的code:
微信小程序报错
url中的code:
微信小程序报错
我的方法中是有将url替换的操作,就算每次传递进来的code是新的,我的url应该也会随之更新的,继续打断点,终于发现问题
微信提供的url是这样的:
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

我的方法是这样的(因为url中只有code的值在变,所以我写在了yml中,方便使用):
在这里插入图片描述
所以我的这个方法只能替换微信的这里的数据,
在这里插入图片描述
当执行一次后JSCODE字符串已经被替换为上一次的code,所以再次执行时是没有JSCODE这个字符串的,因此url不会再变化.

只需要略微修改即可:
在这里插入图片描述
在创建get请求时执行replace方法,利用string数据的特性,原始的url是不会发生变化的.
再次运行,结果如下:
在这里插入图片描述
url随着code的更新也更新了,问题解决

总结:其实我这问题纯粹是自己粗心造成的,和我一样的可能不多,但报这个错误的话可以多打印几次GET的url看一看,问题大概率是在这里.

你可能感兴趣的:(微信小程序报错 "errcode":40163,"errmsg":"code been used)