收藏
回答

为什么一直报错errCode: 40029?

一直报错

设计一个登录代码,用的是"openapi.phonenumber.getPhoneNumber但是一直报错

  1. errCode40029
  2. errMsg"openapi.phonenumber.getPhoneNumber:fail invalid code hint: [rJfaxzI2e-sp68Oa] rid: 659fe0ac-422701b8-010bb3f1"

以下是前端代码

<button open-type="getPhoneNumberbindgetphonenumber="onGetPhoneNumber">登录/注册</button>

以下是js代码

  onGetPhoneNumber: function(e) {

    if (e.detail.errMsg === 'getPhoneNumber:ok'{

      // 调用wx.login获取code

      wx.login({

        success: res => {

          if (res.code{

            // 调用云函数进行登录或注册

            wx.cloud.callFunction({

              name: 'getPhoneNumber',

              data: {

                code: res.code

              },

              success: result => {

                console.log('登录或注册成功:', result);

              },

              fail: error => {

                console.error('登录或注册失败:', error);

              }

            });

          } else {

            console.log('登录失败:' + res.errMsg);

          }

        }

      });

    } else {

      console.log('用户拒绝授权获取手机号');

    }

  },

以下是云函数的代码(因为我要把手机号码存到数据库中):

const cloud = require('wx-server-sdk');

cloud.init({

  env: cloud.DYNAMIC_CURRENT_ENV

});

exports.main = async (event, context) => {

  const { code } = event;

  const wxContext = cloud.getWXContext();

  // 使用code调用getPhoneNumber接口

  try {

    const result = await cloud.openapi.phonenumber.getPhoneNumber({

      code: code

    });

    if (result.errCode === 0{

      const phoneNumber = result.phone_info.phoneNumber;

      const db = cloud.database();

      const userCollection = db.collection('user');

      console.log("phoneNumber:"+phoneNumber);

      // 检查用户是否已注册

      const userResult = await userCollection.where({

        phoneNumber: phoneNumber

      }).get();

      if (userResult.data.length === 0{

        // 用户未注册,执行注册流程

        await userCollection.add({

          data: {

            phoneNumber: phoneNumber,

            createTime: new Date()

          }

        });

        return { result: '注册成功', phoneNumber: phoneNumber };

      } else {

        // 用户已注册,返回登录成功

        return { result: '登录成功', phoneNumber: phoneNumber };

      }

    } else {

      return { error: result.errMsg };

    }

  } catch (err{

    return { error: err };

  }

};



最后一次编辑于  01-11
回答关注问题邀请回答
收藏

1 个回答

  • Mr.Zhao
    Mr.Zhao
    发表于移动端
    01-11
    代码写个寂寞,你从wx.login获取code,为啥还要写获取手机号?
    01-11
    有用
    回复 5
    • 小陈和小宇
      小陈和小宇
      01-12
      code不是传给getPhoneNumber微信接口来获取手机号吗
      01-12
      回复
    • Mr.Zhao
      Mr.Zhao
      01-12回复小陈和小宇
      wx.login有个code, getPhoneNumber也有个code,两个code呢,断章取义了
      01-12
      回复
    • 小陈和小宇
      小陈和小宇
      01-12
      那要怎么做才可以实现登录,注册(在数据库中加openid和手机号)呢
      01-12
      回复
    • Mr.Zhao
      Mr.Zhao
      01-12回复小陈和小宇
      wx.login获取openid,getPhoneNumber获取手机号
      01-12
      回复
    • Mr.Zhao
      Mr.Zhao
      01-12回复小陈和小宇
      手机号的code在这里,云函数里面可以直接获取openid
      01-12
      回复
登录 后发表内容