【小程序】企业微信小程序跳转普通微信无法获取手机号

项目场景:

小程序获取用户手机号


问题描述

在企业微信中, 通过扫码能够进入微信小程序, 但无法获取code, 也就无法换取手机号

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
Page({
  getPhoneNumber (e) {
    console.log(e.detail.code)
  }
})

原因分析:

运行环境

小程序基础库: 2.24.5
企业微信版本: 4.0.6
微信版本: 8.0.23
在这里插入图片描述
在这里插入图片描述

解决方案:

  1. 通过提示等方式告知用户不要在企业微信中进入小程序获取手机号;
  2. 静静等待腾讯发布更新

参考:
https://developers.weixin.qq.com/community/develop/doc/000c0e84f742b80c276b52da859400
https://developers.weixin.qq.com/community/develop/doc/000860197308d08fba7bb1c555bc00

### 微信小程序获取用户手机号、头像和昵称的方法 在微信小程序中,获取用户手机号、头像和昵称通常需要通过授权登录的方式实现。以下是具体的实现方法: #### 1. 获取用户头像和昵称 可以通过 `open-data` 组件直接展示用户的头像和昵称,无需额外的权限申请[^5]。 ```html <!-- 获取头像 --> <open-data type="userAvatarUrl"></open-data> <!-- 获取昵称 --> <open-data type="userNickName" lang="zh_CN"></open-data> ``` 如果需要将头像上传到服务器,则可以使用 `button` 的 `open-type="chooseAvatar"` 属性来获取头像,并通过 `uni.uploadFile` 方法上传到后台[^2]。 ```html <button :plain="true" class="btn_ads" open-type="chooseAvatar" @chooseavatar='chooseavatar'></button> ``` ```javascript chooseavatar(e) { let that = this; uni.uploadFile({ url: '', // 后台上传接口 filePath: e.detail.avatarUrl, // 上传图片 url name: 'file', header: { 'Content-Type': 'multipart/form-data', 'Authorization': uni.getStorageSync('token') }, success(res) { let img = JSON.parse(res.data).url; that.userInfo.headImg = img; // 赋值 } }); } ``` #### 2. 获取用户手机号 获取用户手机号需要用户主动授权。可以通过 `button` 的 `open-type="getPhoneNumber"` 属性来触发授权操作[^4]。 ```html <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号</button> ``` 在 JavaScript 中处理 `getPhoneNumber` 的回调函数,具体实现方式取决于是否使用云开发功能: - **云开发方式**:调用云函数解密用户手机号[^4]。 ```javascript getPhoneNumber(e) { wx.cloud.callFunction({ name: 'getPhone', data: { action: 'getcellphone', id: e.detail.cloudID } }).then(res => { console.log('res: ', res); }); } ``` - **第三方后台方式**:将加密数据发送到后台进行解密[^4]。 ```javascript getPhoneNumber(e) { const encryptedData = e.detail.encryptedData; const iv = e.detail.iv; if (e.detail.errMsg === "getPhoneNumber:ok") { wx.login({ success(e) { const data = { appId: "wx26c7560a9f8f6c49", code: e.code, encryptedData: encryptedData, iv: iv }; wx.request({ url: 'https://XXXXX/app/wechats/users/phone/decrypt', data: data, success(e) { console.log("request==>", e); } }); } }); } else { wx.showToast({ title: '您已经拒绝', }); } } ``` #### 3. 用户授权逻辑 在实际开发中,可能需要对用户授权状态进行判断。例如,当用户拒绝授权时,提示用户再次授权跳转到其他页面[^1]。 ```javascript wx.getSetting({ success(res) { if (!res.authSetting['scope.userInfo']) { wx.authorize({ scope: 'scope.userInfo', success() { // 用户授权 }, fail() { // 用户授权,可引导用户前往设置页面 wx.openSetting(); } }); } } }); ``` ### 注意事项 - 模拟器调试时,拒绝授权可能会出现不同的行为,建议在真机上测试以确保逻辑正确性[^1]。 - 用户拒绝授权后,需妥善处理拒绝场景,避免影响用户体验[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值