解决微信小程序bindgetphonenumber和wx.login获取的code不同步问题

这篇具有很好参考价值的文章主要介绍了解决微信小程序bindgetphonenumber和wx.login获取的code不同步问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

解决微信小程序bindgetphonenumber和wx.login获取的code不同步问题

微信小程序使用手机号快速验证组件在获取用户手机号的时候,经常会因为提交参数的code和iv、encryptedData参数匹配不一致而报错。其根本原因在官方有相应的解释:注意使用旧版本组件时,需先调用wx.login接口。所以在用户点了拒绝之后授权之后,需要重新获取调用wx.login获取最新code。解决微信小程序bindgetphonenumber和wx.login获取的code不同步问题
所以,基于code需要在bindgetphonenumber事件的回调之前获取,这里给出一个比较合理且通用的解决方案:文章来源地址https://www.toymoban.com/news/detail-501901.html

  1. 利用wx.checkSession校验当前code的有效性。
// 检查最新的微信code
  getLastNewCode(code) {
    return new Promise(resolve => {
      wx.checkSession({
        success: () => {
          // session_key 未过期,并且在本生命周期一直有效
          console.log('检查最新的微信code: session_key 未过期');
          resolve(code);
        },
        fail: async () => {
          // session_key 已经失效,需要重新执行登录流程
          // 重新登录
          console.log('session_key 已经失效: 开始重新授权');
          const wxCode = await getWxCode();
          this.setData({ wxCode });
          resolve(code);
        }
      });
    });
  },
  1. 在bindgetphonenumber回调里面对code进行校验
  // 获取用户手机号
  async getPhoneNumber(e) {
    console.log('getPhoneNumber:', e);
    const {
      detail: { encryptedData, iv, errMsg }
    } = e;
    const {
      data: { wxCode }
    } = this;
    // 获取最新登录code
    const code = await this.getLastNewCode(wxCode);
    if (errMsg != 'getPhoneNumber:ok') {
      return;
    }
    // 1.获取用户手机号--接口请求
    parsePhoneNumber({ code, encryptedData, iv })
      .then(data => {
        console.log('parsePhoneNumber:', data);
        this.setData({ mobile: data.purePhoneNumber });
        this.handelContinue();
      })
      .catch(() => {});
  },

到了这里,关于解决微信小程序bindgetphonenumber和wx.login获取的code不同步问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信接口wx.login()、wx.request()中获取的内容不能赋值给全局变量(已解决)

    微信接口wx.login()、wx.request()中获取的内容不能赋值给全局变量(已解决) 在写登录模块的时候,需要使用微信的 wx.login() 接口获取临时code,并利用临时code向开发者服务器端发送请求,然后获取openid以及session_key。 官方提供的模板: 我开始的想法 : 在onLoad中按照顺序执行两

    2024年02月09日
    浏览(30)
  • 企业微信小程序在调用wx.qy.login时返回错误信息qy.login:fail

    原因是大概是绑定了多个企业但是在开发者工具中没有选择正确的企业 解决方法:  重新选择企业后即可成功获取code

    2024年02月13日
    浏览(35)
  • 微信小程序授权登录wx.getUserProfile获取不到昵称及头像解决方案

    半年前做的个小程序,更新了二个文字,重新上传审核通过,悲剧了,新用户的昵称全部变为微信用户,头像全部变为默认头像,查了半天代码没找到原因,相当头大,搜了一下文档,尴尬了,11月9号新更新的规则,不再返回昵称和头像值....需要用头像昵称获取能力去触发获

    2024年02月11日
    浏览(31)
  • 微信小程序中使用 wx.getLocation获取当前详细位置并计算距离

    wx.getLocation只能够获取经纬度,不能够拿到详细地址;如果你的项目刚好也使用腾讯地图的api,那么可以通过腾讯地图的逆解析就能拿到详细地址了; 先介绍一下wx.getLocation()方法的使用; 此方法可以获取当前的经纬度和速度、高度;官网链接 想要使用这个方法,先需要在

    2024年02月08日
    浏览(41)
  • 微信小程序wx.getFuzzyLocation获取经纬度的成功使用示例,以及注意事项

    注意事项: 1. 微信小程序基础库必须在 2.25.0及以上 才可以用这个接口,并且微信开发者工具也要是最新的 2.这个定位接口在编译器中报错,只有在 真机中好用 (偶尔在编译器中也好用),可以使用真机调试进行开发查看效果 上代码。 第一步:先在小程序公众平台    开发

    2024年02月11日
    浏览(33)
  • 微信小程序不能使用wx.getlocation的解决方法

    1、没在小程序开发平台申请开通wx.getlocation API; 2、没有在app.json文件中声明配置; 3、开发版本库较高,调到2.25.3试试; 4、打开微信小程序页面右上角三个点,打开小程序设置,查看是否允许使用位置信息。

    2024年02月11日
    浏览(42)
  • 微信小程序toast组件(解决wx.showToast文本最多显示两行问题)

    创建toast组件  index.wxmi index.less index.json index.ts toast.js 使用 index.json index.wxml  index.ts  效果

    2024年02月12日
    浏览(78)
  • 微信小程序报错“qqmap-wx-jssdk.js‘ is not defined”解决方法

    一、问题描述 在使用微信小程序开发过程中,有时会遇到“qqmap-wx-jssdk.js‘ is not defined”的报错信息。这个错误通常与腾讯地图SDK相关,表明小程序试图引用一个未定义的脚本。 二、解决方案 解决此问题的方法有多种,以下是一些常见的解决方案: 检查引用顺序:确保在使

    2024年04月15日
    浏览(40)
  • 微信小程序报错qqmap-wx-jssdk.js‘ is not defined解决方法

     今天做了一个需求,需要接入腾讯地图,报错qqmap-wx-jssdk.js\\\' is not defined报了一下午,我苦苦找不到原因,太自信了,因为另外一个地方的腾讯地图引入很轻松,我也是按照官网给的方法写的,怎么都引入不进去,网上的方法都尝试了一遍都不行。刚刚解决了,先说报错原因

    2024年02月04日
    浏览(44)
  • 微信小程序 wx.showModal

    微信小程序--wx.showModal_海轰Pro的博客-CSDN博客

    2024年02月15日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包