开发工具:uniApp

使用场景:点击按钮一键获取微信用户号手机号,并进行登录。

过程解析:

要获得手机号,前端需要实现以下的代码:

<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber" type="default">微信一键登录</button>

写好了以上内容,我们就需要通过回调函数getPhoneNumber来获得返回给我们的信息,通过以下的代码我们可以发现,系统返回了一个对象数据。其中包含的encryptedData、iv就是我们想要的信息。通过这个信息再配合uni.login(res)返回给我们的code,再传给后台,后台通过sessionKey进行解密,通过接口就可以拿到我们想要的手机号了。

getPhoneNumber(e){console.log(e.detail)
},

我们继续完善一下上面的js代码:

getPhoneNumber(e){console.log(e.detail)uni.login({success: (res) => {if(e.detail.errMsg == "getPhoneNumber:ok"){_this.$reqHttp({url:'/user/wx-login',data:{code:res.code,iv:e.detail.iv,encryptedData:e.detail.encryptedData,},success:(res) => {if(res.data.success){//成功时候的要做的动作}else{}},})}else{_this.$message("微信登录授权失败")}},fail: () => {_this.$message("微信登录授权失败")}})}

通过以上代码,我们理论上会获取到微信用户的手机号。但是,第一次无法获取到。主要原因是在回调中调用 uni.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。

那么现在已经找到原因了,我们再将上面的改写一下。

onload(){uni.login(res){uni.setStorageSync('wxcode',res.code)}
},
methods:{
getPhoneNumber(e){console.log(e.detail)uni.login({success: (res) => {if(e.detail.errMsg == "getPhoneNumber:ok"){_this.$reqHttp({url:'/user/wx-login',data:{code:res.code,iv:e.detail.iv,encryptedData:e.detail.encryptedData,},success:(res) => {if(res.data.success){//成功时候的要做的动作uni.setStorageSync('wxcode',res.code)}else{}},})}else{_this.$message("微信登录授权失败")}},fail: () => {_this.$message("微信登录授权失败")}})}
}

参考资料:https://blog.csdn.net/hl18730262380/article/details/89671346

微信小程序授权微信手机号踩坑,第一次无法获取到手机号,第二次成功的解决方案相关推荐

  1. java微信小程序授权微信登录获取手机号

    微信小程序获取手机号流程 1.先调用微信登录wx.login()获取code,通过code在后台获取session_key和openid(为了安全方面的原因,请不要直接使用这些信息作为你小程序的用户标 ...

  2. 微信小程序插件下发优惠券踩坑

    辛辛苦苦摸索一天多,一把辛酸泪. <send-coupon @click='bindsendcoupon()' :send_coupon_params="send_coupon_par ...

  3. 微信小程序项目转uniapp踩坑日记

    本文目录 一.前言 二.转换方式 三.后语 四.其他:node报错 1.包默认C盘存放,而不是安装目录E盘 2.正确的环境变量添加 3.npm install 命令报错 4.npm install - ...

  4. 微信小程序wepy框架+minui踩坑之路

    近期项目涉及微信小程序,鉴于原生小程序文件结构过于复杂,决定使用wepy框架开发 wepy框架类似Vue的MVVM开发模式,并且支持promise与ES7 asnyc异步函数,记录一 下项目开发过程中 ...

  5. 微信小程序录制视频方法踩坑总结

    ** 工作中需要微信小程序实现录制15s视频上传,部分用户反馈无法录制视频的问题,所以在此总结一下经验 ** 下面这张图片这是问题的表现,部分机型用户松开拍摄时提示未完成拍摄,导致无法上传视频. 上面 ...

  6. 微信小程序真机调试踩坑

    今天调试微信小程序的时候,发现我的手机(红米)调试微信小程序时功能正常,为了测一下兼容性,借了同事的苹果手机来调试,结果发现不能正常进去调试页面,扫码之后白屏.我以为是安卓系统和IOS系统的问题,我查 ...

  7. 微信小程序 短剧开发技术踩坑指南 仿抖音快手小视频

    1.Video组件 微信官方文档地址: https://developers.weixin.qq.com/miniprogram/dev/component/video.html uniapp官方文档 ...

  8. 微信小程序和webview通信踩坑(表单篇)

    背景 为了适配多端小程序,通用的功能一般采用webview的方式引入小程序,这次的移动管理端也不例外. 需求 h5表单的地图选择功能.如下所示: 可行性分析 方案: 引入第三方地图 使用微信sdk的地 ...

  9. 【微信小程序】 wx.onBluetoothDeviceFound 安卓机第一次可以连接蓝牙设备,第二次搜索不到问题

    问题: wx.onBluetoothDeviceFound 安卓机第一次可以连接蓝牙设备,第二次搜索不到问题 原因: wx.onBluetoothDeviceFound这个方法只能找到新的蓝牙设备,之 ...

最新文章

  1. iOS基础-UIKit框架-高级视图-UIDatePicker
  2. boost::math模块演示负二项分布使用的简单示例的测试程序
  3. iOS中js与objective-c的交互(转)
  4. 微服务 第六章 springboot 通过Spring-data-jpa 配置Oracle数据源(简单步骤)
  5. 发球机器轰灭了中国姑娘的奇迹
  6. [译]Kinect for Windows SDK开发入门(二):基础知识 上
  7. void和void *
  8. Spring AOP 底层原理_001----AspectJ与CGLIB介绍
  9. 【超链接】一些OI学习网站
  10. ME53N采购申请查询时增加屏幕的增…
  11. cdr添加节点快捷键_常用CDR快捷键
  12. 遗传算法的应用之函数优化和组合优化
  13. 分数阶微积分基本理论(课堂笔记1)
  14. 中国网游用户调查:可玩性高才是王道
  15. 使用 {}.format 对字符串进行格式(一)
  16. 地方论坛门户网站运营之我见-上篇
  17. 计算机内存管理之虚拟内存
  18. TypeScript Property ‘XXX‘ does not exist on type ‘never‘.
  19. Java SE加强篇——超详细,Java入门,这一篇就够了
  20. 知网专利信息爬虫!强无敌!

热门文章

  1. redis-GEO地理位置
  2. latex语法_【研创基地科研实训】关于举办第27期“LaTeX使用技巧交流分享会” 线上科研实训交流活动的通知...
  3. Finger.01 - ESP8266模块STA模式调试
  4. YoLo: You Only Look Once: Unified, Real-Time Object Detection译文
  5. oracle误删数据恢复方法
  6. 【Little Demo】从简单的Tab标签到Tab图片切换
  7. svn上文件符号的意思
  8. 2022年lazada跨境店 新,马,泰,菲等4个国家正式开放食品类目招商
  9. win7如何看计算机几核,win7系统查看CPU是几核的操作方法
  10. 爱奇艺,美团打车Java岗面试经历,这些问题我是真没抗住