小程序 ---- (获取手机号码)

一、获取session_key

验证登录状态,获取openid和session_key。

由于目前小程序没有提供API可以调用获取手机号码,所以如果想要获取手机号码只能是,就先要在app.js检测用户登录状态,如果没有登录或者状态过期了,就跳转到login页面,引导用户点击button调用按钮的API,即open-type=“getPhoneNumber” bindgetphonenumber=“getPhoneNumber”

app.js如下

let that = this;
// 验证登录
wx.checkSession({success: (res) => {},fail: () => {wx.login({success: res => {if (res.errMsg == 'login:ok') {wx.request({url: `https://api.weixin.qq.com/sns/jscode2session?appid=你的小程序appid&secret=你的小程序secret&js_code=${res.code}&grant_type=authorization_code`,method: 'GET',success: (result) => {// 这里可以把数据存在Storage里面,也可以这样直接用,我们选择后者that.globalData.userinfo.openid = result.data.openid;that.globalData.userinfo.session_key = result.data.session_key;wx.navigateTo({url: '/pages/login/index',})}})}}})}
})

login.wxml如下:

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">登录</button>

二、解析手机号码

看一下官方的用法获取到的数据:

这里拿到两个数据,用户手机号码就隐藏在这两串数据里面,我们参考一下官方的说明,看要如何进行解密


获取的结果:

参考官方的说明,发现都是Base64_Decode,故我们选择crypto.js进行数据分析:

点击下载crypto.js,然后将文件放置在文件夹里面,路径如下:

封装解密的crypto.js文件,放置于utils文件夹里面:

crypto.js的代码如下:

var Crypto = require('./cryptojs/cryptojs.js').Crypto;
var app = getApp();
function CRYPOT(appId, sessionKey) {this.appId = appIdthis.sessionKey = sessionKey
}
CRYPOT.prototype.decryptData = function(encryptedData, iv) {// base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()进行 base64解码var encryptedData = Crypto.util.base64ToBytes(encryptedData)// console.log(sessionKey)var key = Crypto.util.base64ToBytes(this.sessionKey);var iv = Crypto.util.base64ToBytes(iv);// console.log(encryptedData,key,iv)// 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充var mode = new Crypto.mode.CBC(Crypto.pad.pkcs7);try {// 解密var bytes = Crypto.AES.decrypt(encryptedData, key, {asBpytes: true,iv: iv,mode: mode});var decryptResult = JSON.parse(bytes);} catch (err) {console.log(err)}if (decryptResult.watermark.appid !== this.appId) {console.log(err)}return decryptResult
}
module.exports = CRYPOT

login.js如下:

getPhoneNumber(e) {if (e.detail.errMsg == 'getPhoneNumber:ok') {let phone = e.detail.encryptedData;let iv = e.detail.iv;const CRYPOT= require('../../utils/crypot.js');const cp = new CRYPOT('你的小程序appid', app.globalData.userinfo.session_key);const data = cp .decryptData(phone, iv);app.globalData.userinfo.phone = data.phoneNumber;// 这里request是自己封装的网络请求模块,下面会分享出来,用wx.request也可以request('/login',{phoneNum: data.phoneNumber},'GET').then(res => {wx.setStorageSync('token', res.data.data)wx.showToast({title: '登录成功',})setTimeout(()=> {wx.navigateBack({delta: 1,})},1000)})} else {}
},

以上就可以获取用户手机号码进行登录了,下面分享request.js。

这里哔哔两句,公司的辣鸡后端这些都不做,要前端做,踏马了个巴子的,无了个大语!

exports.request = function (requestMapping, data, requestWay, contentType) {wx.showLoading({title: '请稍后',})return new Promise(function (resolve, reject) {wx.request({url: '域名或者IP地址' + requestMapping,data: data,header: {'content-type': contentType || "application/x-www-form-urlencoded", // 默认值'token': wx.getStorageSync('token')},timeout: 3000,method: requestWay,success(res) {//console.log(res)if (res.data.success == false || res.data.statusCode == 404) {reject(res)} else {resolve(res)}},fail: (e) => {wx.showToast({title: '连接失败',icon: 'none'})},complete: () => {wx.hideLoading()}})})
}

小程序 ---- (获取手机号码)相关推荐

  1. python--微信小程序获取手机号码报错

    微信小程序获取手机号码报错,其中python文档中有一段需要引用 'Crypto'的库 在windows环境下可能会出现安装失败等原因,可以安装PyCryptodome来替代 转载于:https:// ...

  2. 微信小程序获取手机号码第一次失败第二次成功的解决方案

    标题 微信小程序获取手机号码第一次失败第二次成功的解决方案 注意点: 1.千万记住在getphone之后不能login,否则session_key就会失效 我的解决方案是再onshow里面直接登录获取 ...

  3. 小程序获取手机号码解密偶尔会失败

    小程序获取手机号解密有时失败的原因 问题描述 流程知悉 问题分析 解决办法 问题描述 同事在做小程序开发时,有获取用户手机号的需求,代码运行都比较正常,只是手机号有时能解密得到,有时又不能解密得到.( ...

  4. 微信小程序获取手机号码

    前台:微信开发者工具 后台:idea 后台jar包 1.需要的jar包 <dependency><groupId>net.sf.json-lib</groupId> ...

  5. 小程序获取手机号码登录注册

    需求 开发微信小程序有获取用户手机号的需求,用户用户注册.登录或者发货等业务需求.本身前后端开发获取用户手机号码是一个很复杂的过程,微信小程序提供的云开发和组件开发使得此业务需求变得相对简单 获取手机 ...

  6. 微信小程序 获取手机号码详解

    小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等, 有了这个组件可以快速获取微信绑定手机号码,无须用户填写. 1.getPhoneNumber这个组件通过button来实现(别的标签 ...

  7. android 6.0 获取手机号,头条小程序获取手机号码,回调未执行,导致无法获取手机号码...

    获取手机号前需要先登陆 测试正常 HBuilderX 2.1.3 字节跳动开发者工具:1.6.4 基础库:1.24.0.2 ios:12.3.1 头条:7.2.4 抖音:6.8.0 Android:9 ...

  8. uniapp 小程序获取手机号码 前端+php后台

    前端 <template><view><view class="flex justify-center align-center margin-logo-log ...

  9. 微信小程序获取用户手机号码,Java后台servlet解密(微信小程序调用微信支付也是大致的流程)

    本篇记录说明 微信小程序获取用户手机号码,Java后台servlet解密(微信小程序调用微信支付也是大致的流程,详细内容可私信交流) (第一次写博客,写得不好的地方见谅,面向新手,大佬请无视,不喜勿喷 ...

  10. Java实现在小程序获取用户手机号码的功能

    获取用户手机号码包含了"获取用户的昵称.头像授权"."获取用户的手机号授权"和"解密手机号"3个部分.在小程序获取了的手机号码是加密的密文, ...

最新文章

  1. python2 webserver class
  2. 格兰因果模型可以分析哪些东西_如何系统地学习统计学,指导入门数据分析
  3. php背景图片 存放位置,CSS中背景图片位置 background-position 的使用方法
  4. iOS 集合的深复制与浅复制
  5. CTFHUB 《请求方式》 http请求,curl命令总结
  6. [pandas]方法总结
  7. 读《scikiit-learn机器学习》逻辑回归算法
  8. 俄勒冈州立大学计算机科学专业,美国俄勒冈州立大学专业介绍
  9. 【T+】取消记账提示入库失败,请至少选择两个字
  10. JAVA 算法 回溯
  11. 建立数学模型论文写作
  12. 超声波测距原理与实现
  13. 超简单集成华为HMS Scankit 扫码SDK实现扫一扫二维码
  14. 巨杉数据库全新认证机制来袭!首期考试时间公布
  15. 专转本-数学考试大纲
  16. git bash返回上一级目录
  17. 根据斗破苍穹改编的Java游戏_不仅《斗破苍穹》改编动漫游戏,这个作者才是游戏IP大师!...
  18. IT孔乙己 (小小说)
  19. Java Thread 源码解析
  20. 建筑施工技术【18】

热门文章

  1. 【独家】阿里云罗庆超:对象存储 OSS 海量数据管理和应用最佳实践
  2. php 根目录怎么写,php – 如何重写根目录中的目录
  3. 【TWVRP】基于matlab改进的遗传算法求解带时间窗约束多卫星任务规划问题【含Matlab源码 1774期】
  4. 【多目标优化求解】基于matlab遗传优化萤火虫算法求解多目标优化问题【含Matlab源码 1484期】
  5. 【优化预测】基于matlab布谷鸟算法优化SVM预测【含Matlab源码 1422期】
  6. 【气动学】基于matlab GPS卫星仿真【含Matlab源码 1094期】
  7. SPSS 有调节的中介与有中介的调节【SPSS 042期】
  8. bin mysql u root_MySQL安装后续步骤(修改root密码)
  9. 脸部识别算法_面部识别技术是种族主义者吗? 先进算法的解释
  10. android view 画文字,【Android自定义View】绘图之文字篇(三)