uni-app uniCloud.getPhoneNumber获取手机号报错

发布于 1周前 作者 yibo5220 来自 Uni-App

uni-app uniCloud.getPhoneNumber获取手机号报错

开发环境 版本号 项目创建方式
Windows win10 HBuilderX

示例代码:

云函数内容

exports.main = async (event, context) => {  
//event为客户端上传的参数  
const res = await uniCloud.getPhoneNumber({  
appid: 'xxxx', // 替换成自己开通一键登录的应用的DCloud appid,使用callFunction方式调用时可以不传(会自动取当前客户端的appid),如果使用云函数URL化的方式访问必须传此参数  
provider: 'univerify',  
access_token: event.queryStringParameters.access_token,  
openid: event.queryStringParameters.openid  
})  
// 执行用户信息入库等操作,正常情况下不要把完整手机号返回给前端  
// 如果数据库在uniCloud上,可以直接入库  
// 如果数据库不在uniCloud上,可以通过 uniCloud.httpclient API,将手机号通过http方式传递给其他服务器的接口,详见:https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=httpclient  
//返回数据给客户端  
return {  
code: 0,  
message: '获取手机号成功',  
data: res  
}  
}  

云函数报错日志

请求入参: {  
"args": {  
"path": "/",  
"httpMethod": "POST",  
"headers": {  
"content-length": "445",  
"cookie": "acw_tc=ac110000117060771325737275e05cabce5e3d8872f529952d42f95f981ef57; aliyungf_tc=2095bbff2ee5f6e2dffed5a0c11bb3047e87c238aa8d791550cc9241840af08b",  
"postman-token": "50a605dd-ed27-4ece-97bf-0996112d3563",  
"x5-uuid": "264aec9df7e46a6009aec04b2c1a3945",  
"x-client-ip": "60.24.14.42",  
"x-forwarded-for": "60.24.14.42, 118.178.15.147, 39.96.119.203",  
"accept": "*/*",  
"x-real-ip": "60.24.14.42",  
"x-sinfo": "on",  
"host": "fc-mp-eff5c0e6-6cf7-4ca5-abf7-281f6501b2d7.next.bspapp.com",  
"content-type": "multipart/form-data; boundary=--------------------------432763011242833951379464",  
"x-forwarded-by": "172.28.195.0:80",  
"accept-encoding": "gzip, deflate, br",  
"user-agent": "PostmanRuntime/7.29.2"  
},  
"queryStringParameters": {  
"access_token": "000gtc_eb45c0a3b2a22d9078770d1fe157245f66",  
"openid": "U1RzaWQwMDAwMDAxNzA2MDc3NDUwOTg1bWwyT2VwTDRXOXp6MDAwMG9UcWQ4SHQ4cjl6c05QdTh8fDF8djJ8MXxiZTBiMWZmOWY2MzNmZjcxMThkNmFkMzNhNjdiYmQy"  
},  
"isBase64Encoded": false,  
"body": ""  
},  
"requestId": "ac1cc3001706077726462159343"  
}  
[getPhoneNumber/ac1cc3001706077726462159343/970ms/ERROR] Cannot read property 'mobile' of undefined  
TypeError: Cannot read property 'mobile' of undefined  
at Object.C [as univerify] (/tmp/function/@common_modules/uni-cloud-verify/index.js:1:5295)  
at <anonymous>  
at process._tickCallback (internal/process/next_tick.js:189:7)  

2 回复

已解决,是我自己的问题access_token 和 openid传反了


在使用 uni-appuniCloud.getPhoneNumber 方法获取手机号时,可能会遇到一些常见的错误。以下是一些可能的原因及解决方法:

1. 未正确配置云函数

  • 确保你已经正确配置了云函数,并且在云函数中使用了 uniCloud.getPhoneNumber 方法。
  • 云函数需要在 uniCloud 中创建,并且需要在 uni-app 项目中正确调用。

解决方法:

  • 检查云函数的代码,确保 uniCloud.getPhoneNumber 方法调用正确。
  • 确保云函数已经部署到云端。

2. 未获取到用户授权

  • uniCloud.getPhoneNumber 方法需要用户授权才能获取手机号。如果用户没有授权,或者授权失败,可能会导致报错。

解决方法:

  • 确保在调用 uniCloud.getPhoneNumber 之前,用户已经完成了手机号的授权操作。
  • 检查授权流程是否正确,确保用户点击了“同意获取手机号”的按钮。

3. 云函数返回错误

  • 云函数在执行过程中可能会返回错误,导致 uniCloud.getPhoneNumber 方法无法正确获取手机号。

解决方法:

  • 检查云函数的日志,查看是否有错误信息。
  • 确保云函数的代码逻辑正确,特别是处理手机号的逻辑。

4. 未正确传递参数

  • uniCloud.getPhoneNumber 方法可能需要传递一些参数,例如 code 等。如果参数传递不正确,可能会导致报错。

解决方法:

  • 检查调用 uniCloud.getPhoneNumber 时传递的参数是否正确。
  • 确保 code 等参数是从前端获取并正确传递的。

5. 云函数权限问题

  • 云函数可能需要特定的权限才能调用 uniCloud.getPhoneNumber 方法。如果权限不足,可能会导致报错。

解决方法:

  • 检查云函数的权限配置,确保有足够的权限调用 uniCloud.getPhoneNumber
  • 如果需要,可以在 uniCloud 后台配置相应的权限。

6. 网络问题

  • 如果网络不稳定,可能会导致 uniCloud.getPhoneNumber 方法调用失败。

解决方法:

  • 检查网络连接,确保网络稳定。
  • 可以尝试重新调用 uniCloud.getPhoneNumber 方法。

7. uni-app 版本问题

  • 如果你使用的 uni-app 版本较旧,可能会导致 uniCloud.getPhoneNumber 方法无法正常工作。

解决方法:

  • 更新 uni-app 到最新版本,确保使用的是支持 uniCloud.getPhoneNumber 的版本。

8. 平台差异

  • 不同平台(如微信小程序、支付宝小程序等)对 uniCloud.getPhoneNumber 的支持可能有所不同。

解决方法:

  • 检查目标平台的文档,确保 uniCloud.getPhoneNumber 方法在该平台上可用。
  • 根据平台的不同,可能需要调整代码逻辑。

示例代码

以下是一个简单的示例代码,展示了如何正确使用 uniCloud.getPhoneNumber 方法:

// 前端代码
uni.login({
  provider: 'weixin',
  success: function (loginRes) {
    uniCloud.callFunction({
      name: 'getPhoneNumber',
      data: {
        code: loginRes.code
      },
      success: function (res) {
        console.log('获取手机号成功:', res.result);
      },
      fail: function (err) {
        console.error('获取手机号失败:', err);
      }
    });
  }
});

// 云函数代码
exports.main = async (event, context) => {
  const { code } = event;
  const res = await uniCloud.getPhoneNumber({
    code: code
  });
  return res;
};
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!