日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小程序 获取手机号

發布時間:2023/12/2 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小程序 获取手机号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?【參考小程序開發文檔:開發-指南-開放能力-用戶信息-獲取手機號】?

  • 地理位置?wx.getLocation(Object object) | 微信開放文檔

  • 手機號?獲取手機號 | 微信開放文檔

  • 微信信息?小程序與小游戲獲取用戶信息接口調整,請開發者注意升級。 | 微信開放社區


  • 目錄

    1. 介紹

    2. 使用方法:

    ?3. 手機號解密

    3.1 解密需要的數據

    3.2 準備解碼包

    3.3?全部代碼


    1. 介紹

    ?從基礎庫 2.21.2 開始,對獲取手機號的接口進行了安全升級,以下是新版本接口使用指南。(舊版本接口目前可以繼續使用,但建議開發者使用新版本接口,以增強小程序安全性)

    因為需要用戶主動觸發才能發起獲取手機號接口,所以該功能不由 API 來調用,需用?button?組件的點擊來觸發。另外,新版本接口不再需要提前調用?wx.login?進行登錄。

    注意:目前該接口針對非個人開發者,且完成了認證的小程序開放(不包含海外主體)。需謹慎使用,若用戶舉報較多或被發現在不必要場景下使用,微信有權永久回收該小程序的該接口權限。

    :?小程序需要認證,個人小程序無法獲取。

    微信小程序獲取手機號提示appId沒有權限? | 微信開放社區

    小程序微信認證認證審核問題匯總 | 微信開放社區https://developers.weixin.qq.com/community/develop/doc/000c06209dc0b0fff579159dd56c09

    2. 使用方法:

    需要將?button?組件?open-type?的值設置為?getPhoneNumber,當用戶點擊并同意之后,可以通過?bindgetphonenumber?事件回調獲取到動態令牌code,然后把code傳到開發者后臺,并在開發者后臺調用微信后臺提供的?phonenumber.getPhoneNumber?接口,消費code來換取用戶手機號。每個code有效期為5分鐘,且只能消費一次。

    注:getPhoneNumber?返回的?code?與?wx.login?返回的?code?作用是不一樣的,不能混用。

    <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">讀取用戶手機號</button>Page({getPhoneNumber (e) {console.log(e)} })

    通過上面代碼,就可以彈出獲取手機號的對話框:

    ? 用戶點擊同意后,button 獲取到的返回值 e 打印結果

    ?3. 手機號解密

    微信小程序獲取手機號并解密詳解_a_115098的博客-CSDN博客_微信小程序獲取手機號解密微信小程序獲取手機號并解密1 獲取手機號2 解密2.1 獲取所需數據2.2 解密返回數據1 獲取手機號獲取手機號的過程官方文檔有詳細的介紹。參考官方鏈接要注意的是,此功能只對非個人且完成認證的開發者開發,個人開發者無法使用該功能。獲取微信用戶綁定的手機號,需先調用wx.login接口。//wxml文件使用button按鈕觸發獲取手機號事件,open-type="getPhoneNumber" 不能少<button open-type="getPhoneNumber" bindgetphonehttps://blog.csdn.net/a_115098/article/details/108491494微信小程序:40029錯誤(invalid code) - 簡書做小程序授權登錄獲取openid時遇到以下錯誤: {"errcode":40029,"errmsg":"invalid code, hints: [ req_id: m3yw...https://www.jianshu.com/p/a73c7afddb77

    ? ? ? ? 根據官方最新文檔描述,可以通過?bindgetphonenumber?事件回調獲取到動態令牌code,但是在上面打印結果中,并沒有返回 code ,所以我們仍然采用舊版接口指南。

    1. 介紹

    獲取微信用戶綁定的手機號,需先調用wx.login接口。

    因為需要用戶主動觸發才能發起獲取手機號接口,所以該功能不由 API 來調用,需用?button?組件的點擊來觸發。

    2. 使用方法

    需要將?button?組件?open-type?的值設置為?getPhoneNumber,當用戶點擊并同意之后,可以通過?bindgetphonenumber?事件回調 獲取到微信服務器返回的加密數據, 然后在第三方服務端結合?session_key?以及?app_id?進行解密獲取手機號。

    3. 注意事項

    在回調中調用?wx.login?登錄,可能會刷新登錄態。此時服務器使用 code 換取的 sessionKey 不是加密時使用的 sessionKey,導致解密失敗。建議開發者提前進行?login;或者在回調中先使用?checkSession?進行登錄態檢查,避免?login?刷新登錄態。

    3.1 解密所需數據

    ? ? ? ? ?了解了上面所說,手機號碼解密主要使用到的數據為:

    • appId(AppID,微信公眾平臺官網-開發-開發管理-開發設置);
    • session_key(?需要先通過?wx.login?接口獲得臨時登錄憑證 code,再用 wx.request 請求,這個過程還需要 appSecret【微信公眾平臺官網-開發-開發管理-開發設置】);
    • encryptedData(上面獲取的e.detail.encryptedData);
    • iv(上面獲取的e.detail.iv)。

    獲取 session_key 整個過程的代碼:

    //wx.login獲取 code, 再通過wx.request獲取 session_key wxLogin(callback){var that = this;wx.login({success (res) {wx.request({url: 'https://api.weixin.qq.com/sns/jscode2session?appid='+app.appId+'&secret='+app.appSecret+'&js_code=' + res.code + '&grant_type=authorization_code',method: 'POST',header: { 'content-type': 'application/json' },success: function (obj) {//獲取openid, session_keythat.setData({"sessionKey": obj.data.session_key});}})}}); //wx.login 結束 }

    ????????該官方接口只推薦在測試過程中使用,使用該接口需開啟微信開發者工具-詳情-本地設置-不校驗合法域名…,投入使用時需在服務器端進行配置,具體方法可參考最下方文章鏈接。

    3.2 準備解碼包

    手機號碼解密主要使用的是 CryptoJS 包,點擊下載。微信官方提供了多種編程語言的示例代碼,(點擊下載)但是沒有js包,這里根據參考進行了稍微修改。

    下面是一篇比較詳細的文章,值得一看。

    https://www.jb51.net/article/186483.htmhttps://www.jb51.net/article/186483.htm

  • 下載上面的壓縮包,整個壓縮包解壓到 utils文件夾下;
  • 在 utils 文件夾下新建 WXBizDataCrypt.js 文件: /*** Created by rd on 2017/5/4.*/ // 引入CryptoJS 路徑依個人導入情況變動 var Crypto = require('./cryptojs-master/cryptojs').Crypto; var app = getApp();function RdWXBizDataCrypt(appId, sessionKey) {this.appId = appIdthis.sessionKey = sessionKey }RdWXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {// base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()進行 base64解碼var encryptedData = Crypto.util.base64ToBytes(encryptedData)var key = Crypto.util.base64ToBytes(this.sessionKey);var iv = Crypto.util.base64ToBytes(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)}return decryptResult }module.exports = RdWXBizDataCrypt
  • 使用: var WXBizDataCrypt = require('../../../utils/WXBizDataCrypt');var pc = new WXBizDataCrypt(appId, sessionKey); var data = pc.decryptData(encryptedData , iv); console.log('解密后 data: ', data)
  • 3.3?全部代碼

    <button open-type="getPhoneNumber" bind:getphonenumber="getPhoneNumber">讀取用戶手機號</button> // pages/onePages/userInfo/userInfo.js const app = getApp(); var WXBizDataCrypt = require('../../../utils/WXBizDataCrypt'); Page({//頁面的初始數據data: {encryptedData: "", //手機號的加密數據iv: "",sessionKey: "", //wx.login,獲取session_keyphone: "",nick: "",},//生命周期函數--監聽頁面顯示onShow: function () { this.wxLogin();},//通過綁定手機號登錄getPhoneNumber: function (e) {var that = this;console.log("點擊按鈕獲取手機號",e); //獲取encryptedData、iv,encryptedData就是加密的數據if(e.detail.errMsg == 'getPhoneNumber:fail no permission'){app.utils.showToast("小程序未認證", "none", 1000);return false;} else if(e.detail.iv == undefined || !e.detail.iv){app.utils.showToast("授權失敗", "none", 1000);return false;} else if(e.detail.errMsg == 'getPhoneNumber:user deny'){//用戶拒絕授權,停留在當前頁} else { that.setData({ "encryptedData": e.detail.encryptedData, "iv": e.detail.iv });//檢查session_key 是否失效,失效會導致手機號獲取兩次的問題 wx.checkSession({success: (res) => { console.log("未失效", res)var pc = new WXBizDataCrypt(app.appId, that.data.sessionKey);var data = pc.decryptData(that.data.encryptedData, that.data.iv);console.log("解密后Data",data);wx.setStorageSync('phone', data.phoneNumber);wx.redirectTo({ url: '/pages/onePages/home/home' });},fail: (err)=>{ console.log("失效 重新wx.login")that.wxLogin(function(){var pc = new WXBizDataCrypt(app.appId, that.data.session_key);var data = pc.decryptData(that.data.encryptedData, that.data.iv);wx.setStorageSync('phone', data.phoneNumber); //將手機號存storagewx.redirectTo({ url: '/pages/onePages/home/home' });}) }})}}, //獲取手機號//手機號解碼:wx.login獲取 code, 再通過wx.request獲取 session_keywxLogin(callback){var that = this;wx.login({success (res) {// console.log("wx.login",res) //wx.login獲取 codewx.request({url: 'https://api.weixin.qq.com/sns/jscode2session?appid='+app.appId+'&secret='+app.appSecret+'&js_code=' + res.code + '&grant_type=authorization_code',method: 'POST',header: { 'content-type': 'application/json' },success: function (obj) {// console.log("解密",obj); //獲取openid, session_keythat.setData({"sessionKey": obj.data.session_key});if(callback) callback();}})}}); //wx.login 結束}})

    對小程序開發還不太熟悉, 有問題歡迎指出

    總結

    以上是生活随笔為你收集整理的小程序 获取手机号的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。