微信小程序获取手机信息(微信小程序获取手机号的踩坑记录)
微信小程序获取手机信息
微信小程序获取手机号的踩坑记录前言
最近在开发小程序遇到这样一个问题, 在用户点击授权后去解密手机号时会出现第一次失败,第二次成功的情况。研究了一段时间,终于找到比较合理的解决方案,在此记录并总结一下,希望可以帮助到大家。
需求描述
在用户点击获取电话按钮后, 将用户在微信内设置的电话解密显示在联系电话输入框内
具体代码
<view class="cu-form-group"> <view class="title text-black">联系电话</view> <input class="radius" name="mobile" placeholder="请输入联系电话" value="{{detail.mobile}}" bindinput="onInputMobile"></input> <button bindgetphonenumber="getPhoneNumber" class="cu-btn line-blue sm" openType="getPhoneNumber">获取电话</button> </view>
首先需要小程序button组件并设置 openType="getPhoneNumber"
onLoad: async function () { this.getSessionKey() }, async getSessionKey() { const { code } = await wx.login() const res = await Index.getSessionKey({ code }) if (res.code == 1) { this.setData({ session_key: res.data }) } }, getPhoneNumber: async function (e) { if (e.detail.errMsg === "getPhoneNumber:ok") { const res = await Index.getPhone({ iv: e.detail.iv, encryptedData: e.detail.encryptedData, session_key: this.data.session_key }) if (res.err == 0) { wx.showToast({ title: '网络有点儿小波动,请点击重试', icon: 'none' }) return } const detail = this.data.detail detail.mobile = res.err.phoneNumber this.setData({ detail }) } else if (e.detail.errMsg === "getPhoneNumber:fail user deny") { wx.showModal({ title: '提示', content: '你已拒绝授权,请重新点击并授权', showCancel: false, confirmText: "知道了" }) } },
在 onLoad生命周期内获取登录code, 并将code码发送给服务端获取session_key
服务端获取session_key请参考小程序官方文档。
在用户点击获取电话按钮后, 将session_key以及获取到的iv,encryptedData发送给服务端进行解密。
这样就可以获取到用户的手机号了。
坑
之前我们的方案是, 在用户点击获取电话按钮后, 直接在getPhoneNumber函数内调用wx.logon(),将code,iv,encryptedData发送给服务端, 服务端先拿code获取session_key, 然后和iv,encryptedData结合进行解密,这样做的话就会出现第一次解密失败,然后再次点击按钮调用该解密接口就能成功。 而且隔5-6分钟就又会出现该情况。
当调用wx.checkSession(Object object)检查登录态是否过期也是一直成功的。
猜测
后来想了一下,为什么在getPhoneNumber函数内调用wx.login, 然后服务端拿code换session_key,并结合iv,encryptedData解密不行呢?而把wx.login放进onLoad内获取session_key就可以呢?
我想应该是在wx.login调用时会刷新微信服务器的session_key,直接在getPhoneNumber调wx.login,或许微信服务器还没来得及刷新,服务端就拿着进行解密, 解密时用的还是上次过期的session_key,所以只有第二次以后才能成功。而wx.login放到onload内,就能来的及session_key了。
总结
到此这篇关于微信小程序获取手机号踩坑的文章就介绍到这了,更多相关微信小程序获取手机号内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- 微信小程序日期选择器有星期天(微信小程序 滚动选择器时间日期详解及实例代码)
- flask项目微信小程序(Python Flask 搭建微信小程序后台详解)
- 微信小程序双人游戏横屏(微信小程序实现拼图游戏)
- 微信小程序即时聊天功能怎么实现(微信小程序实现聊天室功能)
- 微信小程序js 抽奖概率(小程序实现筛子抽奖)
- 微信小程序计时器(微信小程序实现简单的计算器功能)
- 微信小程序接口返回数据怎么弄(微信小程序页面返回传值的4种解决方案汇总)
- 宝塔小程序制作(宝塔面板微信小程序使用图文教程)
- 微信小程序中的代码怎么编辑(微信小程序新手入门之自定义组件的使用)
- 微信小程序简易计算器制作(微信小程序实现简单计算器功能)
- 微信小程序引用模板的函数(微信小程序页面与组件之间信息传递与函数调用)
- 微信小程序静态页面详情(微信小程序基础教程之echart的使用)
- 微信小程序function怎么使用(微信小程序在{{ }}中直接使用函数的方法示例)
- 微信小程序语音录入(微信小程序使用同声传译实现语音识别功能)
- 微信小程序企业微信打卡(使用Python实现企业微信的自动打卡功能)
- 微信小程序抽签如何抽中(JavaScript实现班级抽签小程序)
- 你或许不知道你隐藏的支配欲望(你或许不知道你隐藏的支配欲望)
- 把宽体丰田86卖了,换成7.5代高尔夫GTI玩起姿态与性能并存的改装(把宽体丰田86卖了)
- 大众推出了第五代高尔夫GT(大众推出了第五代高尔夫GT)
- 换代在即,现在是抄底 7.5代 高尔夫的最佳时机吗(换代在即现在是抄底)
- 2020年大众7.5代高尔夫R终结特别版 最后的呐喊(2020年大众7.5代高尔夫R终结特别版)
- 七年前的这部剧有毒,全剧只有女主红到发紫,男主至今无人认识(七年前的这部剧有毒)
热门推荐
- Oracle TO_CHAR的使用
- navicat配置远程访问mysql(解决Navicat无法连接 VMware中Centos系统中的 MySQL服务器的问题)
- python中内存管理机制(Python中整数的缓存机制讲解)
- vue是怎样进行页面跳转(Vue实现登陆跳转)
- docker默认网络模式(Docker 网络模式及配置方式)
- vue实现pc聊天页面(vue实现web在线聊天功能)
- 阿里云ecs开放所有端口(阿里云ECS实例挂载PE盘使用chroot命令提示“I have no name”错误的解决方法)
- 微信公众号怎么开发页面(微信公众平台开发教程②微信端分享功能图文详解)
- 网站服务器需要买哪些设备(选择网站服务器需要注意哪些地方?)
- 宝塔面板与php(宝塔面板如何安装PHP扩展)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9