当前位置:   article > 正文

微信小程序开发--获取用户手机号码_getphonenumber wechat

getphonenumber wechat

背景

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

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

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

 

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

1、打开微信开发者工具新建工程

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

2、准备密文解析工具类

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

2.1 添加密文解析工具类需要用到的库

第一步、在微信开发者工具中,点击 "终端" ——> “新建终端” 如下图所示:

  

第二步、执行  npm init 指令

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

如下图所示:

第三步、依次执行  npm install crypto-js --save 、 npm install js-base64 --save

如下图所示:

第四步、在微信开发工具的菜单栏 选择 “工具” ——> “构建npm” 构建完成即可

2.2 解析类实现

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

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

3、getphonenumber的实现

3.1 、getphonenumber.js的实现

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

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

3.2、getphonenumber.wxml 实现

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

好了,实现内容就这么多。

备注:一般情况下 获取jscode2session 是放到服务器端去实现的,这里我把获取sessionKey全都放在小程序端去实现了。

参考小程序官网链接:

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html

 

4、运行效果图

默认运行                                                                点击“获取手机号码”                                            点击 “允许”按钮

              

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/284608
推荐阅读
相关标签
  

闽ICP备14008679号