小程序开发实践之浅析如何获取手机号码

 4043

小程序如何获取用户手机号码?下面本篇文章给大家介绍一下微信小程序开发中获取用户手机号码的方法,希望对大家有所帮助!


小程序开发实践之浅析如何获取手机号码


1、背景

在平时使用第三方微信小程序时,经常会有需要获取微信手机号码的情况,如下图所示:


小程序开发实践之浅析如何获取手机号码


那这种是怎样实现的呢?下面记录下获取微信手机号码的方法。

**备注:**需要有一个微信小程序号,并且这个号是经过企业认证的。(获取手机号码的功能不对个人小程序号生效)

那下面我们就一起开始,获取手机号码的编程之旅了。

2、代码实现

2.1 新建工程

在app.json文件中新增 "pages/getphonenumber/getphonenumber", 如下图所示:


小程序开发实践之浅析如何获取手机号码


2.2 准备密文解析工具类

通过微信小程序提供的接口获取手机号码,返回的数据是加密的,所以需要对返回的加密数据进行解密。


1) 新建终端

在微信开发者工具中,点击 "终端" -》 “新建终端” 如下图所示:


小程序开发实践之浅析如何获取手机号码


2) 执行 npm init 指令

//执行npm init后需要你输入一些信息,直接一直点击 “回车”键就好

如下图所示:


小程序开发实践之浅析如何获取手机号码


3) 依次执行 npm install crypto-js --save 、 npm install js-base64 --save

如下图所示:


小程序开发实践之浅析如何获取手机号码


4)构建npm

在微信开发工具的菜单栏 选择 “工具” -》 “构建npm” 构建完成即可。


2.3 解析类实现

在工程的utils文件夹下新建 WXBizDataCrypt.js文件,代码实现如下所示:

  1. var CryptoJS = require("crypto-js");
  2. var Base64 = require("js-base64");
  3.  
  4. //解析加密数据
  5. function decode(sesionKey,iv,data) {
  6.   var key = CryptoJS.enc.Base64.parse(sesionKey);
  7.   var iv = CryptoJS.enc.Base64.parse(iv);
  8.   var decrypt = CryptoJS.AES.decrypt(data, key, {
  9.     iv: iv,
  10.     mode: CryptoJS.mode.CBC,
  11.     padding: CryptoJS.pad.Pkcs7
  12.   });
  13.   return Base64.decode(CryptoJS.enc.Base64.stringify(decrypt));
  14. }
  15.  
  16. module.exports = {
  17.   decode
  18. }


2.4 获取手机号码代码实现

2.4.1 getphonenumber.js的实现

注意: appId、secret需要替换为自己小程序的

  1. // pages/getphonenumber/getphonenumber.js
  2. const WXBizDataCrypt = require('../../utils/WXBizDataCrypt');
  3.  
  4. Page({
  5.  
  6.   /**
  7.    * 页面的初始数据
  8.    */
  9.   data: {
  10.     phoneNum:'',
  11.     sessionKey:'',
  12.     openId:'',
  13.   },
  14.  
  15.   /**
  16.    * 生命周期函数--监听页面加载
  17.    */
  18.   onLoad: function (options) {
  19.     this.getSessionKey();
  20.   },
  21.  
  22.   getPhoneNumber: function(e){
  23.     if (e.detail.errMsg == "getPhoneNumber:fail user deny") {
  24.       wx.showToast({
  25.         title: '拒绝授权,无法获取用户手机号码!',
  26.       }) 
  27.       return;
  28.     }
  29.     //解密数据获取手机号码
  30.     this.decryptData(this.data.sessionKey,e.detail.iv,e.detail.encryptedData);
  31.   },
  32.  
  33.   //获取SessionKey
  34.   getSessionKey: function(){
  35.     wx.login({
  36.       success:res =>{
  37.         console.log('code:'+res.code);
  38.         var data = {
  39.           'appid':'***********',//注意appId、secret需要替换为自身小程序的
  40.           'secret':'**************************',
  41.           'js_code':res.code,
  42.           'grant_type':'authorization_code'
  43.         };
  44.  
  45.         wx.request({
  46.           url:'https://api.weixin.qq.com/sns/jscode2session',
  47.           data:data,
  48.           method:'GET',
  49.           success:res =>{
  50.             console.log("jscode2session result: ",res);
  51.             this.setData({
  52.               sessionKey:res.data.session_key,
  53.               openId: res.data.openId
  54.             })
  55.           },
  56.           fail:function(res){
  57.             console.log("获取jscodeSession fail: ",res);
  58.           }
  59.         })
  60.       }
  61.     })
  62.   },
  63.  
  64.   //解密数据
  65.   decryptData: function(key,iv,encryptedData){
  66.     var processData = WXBizDataCrypt.decode(key,iv,encryptedData);
  67.     console.log("解密数据: ",processData);
  68.     var jsonObj = JSON.parse(processData);
  69.     this.setData({
  70.       phoneNum: jsonObj['phoneNumber']
  71.     })
  72.   },
  73. })


2.4.2 getphonenumber.wxml 实现

  1. <!--pages/getphonenumber/getphonenumber.wxml-->
  2. <button type="primary"  bindgetphonenumber="getPhoneNumber" open-type='getPhoneNumber'>获取手机号码</button>
  3. <text>获取到的手机号码:{{phoneNum}}</text>

到这里,编码过程已经完成了。 备注:一般情况下 获取jscode2session 是放到服务器端去实现的,这里我把获取sessionKey全都放在小程序端去实现了。 参考小程序官网链接:


3、运行效果图

点击获取手机号码:



小程序开发实践之浅析如何获取手机号码

本文转载于:掘金社区,如有侵犯,请联系删除


本文网址:https://www.zztuku.com/index.php/detail-9909.html
站长图库 - 小程序开发实践之浅析如何获取手机号码
申明:如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐