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

news/2024/7/20 3:32:20 标签: 微信小程序, 小程序

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

小程序>微信小程序使用手机号快速验证组件在获取用户手机号的时候,经常会因为提交参数的code和iv、encryptedData参数匹配不一致而报错。其根本原因在官方有相应的解释:注意使用旧版本组件时,需先调用wx.login接口。所以在用户点了拒绝之后授权之后,需要重新获取调用wx.login获取最新code。在这里插入图片描述
所以,基于code需要在bindgetphonenumber事件的回调之前获取,这里给出一个比较合理且通用的解决方案:

  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(() => {});
  },

http://www.niftyadmin.cn/n/471874.html

相关文章

js通过原型链的形式封装方法为组件

首先我们可以看看下面一张图 控制区有两个功能&#xff0c;一方面是和前端做交互渲染&#xff0c;另一方面是调用缓存区中所返回回来的封装方法所产生的值 此处我们采用的是angular.js的形式 html文件为 <!DOCTYPE html> <html lang"en"><head>…

HOT22-相交链表

leetcode原题链接&#xff1a;相交链表 题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结…

Python零基础入门(六)——超详细的字符串与正则表达式

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python入门专栏&#xff1a;《Python入门》欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; 码字不易&#xff0c;如果觉得文章不…

【layui-全部导出】layui添加全部导出按钮

layui的表格导出功能是只有导出单页的操作&#xff0c;但是没有全部导出的功能&#xff0c;所以需要手动添加一个按钮 1、在表单的左边自定义头部工具栏添加一个全部导出的按钮 <script type"text/html" id"toolbarDemo"><div class"layui…

解决 Mac 安装 brew 的龟速问题

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

标量、向量、矩阵、张量的定义

1、标量 标量(scalar)&#xff1a;标量就是单独的数(整数或实数)。 a 12、向量 向量(vector)&#xff1a;一个向量表示一组有序排列的数&#xff0c;通过次序中的索引我们能够找到每个单独的数&#xff0c;向量相当于Python中的一维数组。 import numpy as np #行向量 a …

13.RocketMQ之消息的存储与发送

1. 消息存储 1.1 消息存储 分布式队列因为有高可靠性的要求&#xff0c;所以数据要进行持久化存储。 消息生成者发送消息Broker收到消息&#xff0c;将消息进行持久化&#xff0c;在存储中新增一条记录返回ACK给生产者Broker消息给对应的消费者&#xff0c;然后等待消费者返回A…

多个消费者订阅一个Kafka的Topic(使用KafkaConsumer和KafkaProducer)

记录&#xff1a;466 场景&#xff1a;一个KafkaProducer在一个Topic发布消息&#xff0c;多个消费者KafkaConsumer订阅Kafka的Topic。每个KafkaConsumer指定一个特定的ConsumerGroup&#xff0c;达到一条消息被多个不同的ConsumerGroup消费。 版本&#xff1a;JDK 1.8,Sprin…