亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

微信小程序開(kāi)發(fā)之獲取用戶(hù)手機(jī)號(hào)碼(php接口解密)

 更新時(shí)間:2020年05月17日 16:33:10   作者:逍遙云天  
這篇文章主要介紹了微信小程序開(kāi)發(fā)之獲取用戶(hù)手機(jī)號(hào)碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

后邊要做一個(gè)微信小程序,并要能獲取用戶(hù)微信綁定的手機(jī)號(hào)碼。而小程序開(kāi)發(fā)文檔上邊提供的獲取手機(jī)號(hào)碼的接口(getPhoneNumber())返回的是密文,需要服務(wù)器端進(jìn)行解密,但是官方提供的開(kāi)發(fā)文檔一如既往的亂,如果沒(méi)有對(duì)小程序開(kāi)發(fā)文檔有一個(gè)整體的了解,搞懂解密流程還是有點(diǎn)難的。這里把小程序從請(qǐng)求用戶(hù)授權(quán)獲取手機(jī)號(hào)碼直至獲取到手機(jī)號(hào)碼明文的整個(gè)流程串了起來(lái),方便迅速了解,如下:

一. 前端相關(guān)操作:

1. 請(qǐng)求用戶(hù)授權(quán)獲取手機(jī)號(hào)碼:

因?yàn)樾枰脩?hù)主動(dòng)觸發(fā)才能發(fā)起獲取手機(jī)號(hào)接口,所以該功能不由 API 來(lái)調(diào)用,需用<button>組件的點(diǎn)擊來(lái)觸發(fā),如下:

wxml:

<button wx:if="{{!phone}}" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> 獲取手機(jī)號(hào)碼</button>

js:

Page({
 getPhoneNumber: function(e) {    
 if(e.detail.errMsg == "getPhoneNumber:fail user deny") return;   //用戶(hù)允許授權(quán)   
 console.log("lv", e.detail.iv); //包括敏感數(shù)據(jù)在內(nèi)的完整用戶(hù)信息的加密數(shù)據(jù),需要解密   
 console.log(e.detail.encryptedData); //加密算法的初始向量,解密需要用到   
 ......
 }
})

2. 訪問(wèn)小程序登錄接口:

小程序調(diào)用wx.login()獲取臨時(shí)登錄憑證code,并傳到開(kāi)發(fā)者服務(wù)器。

Page({ 
 getPhoneNumber: function(e) { 
 console.log(e.detail.errMsg) 
 console.log(e.detail.iv) //包括敏感數(shù)據(jù)在內(nèi)的完整用戶(hù)信息的加密數(shù)據(jù),需要解密
 console.log(e.detail.encryptedData) //加密算法的初始向量,解密需要用到
 wx.login({
  success: res => {
  if(res.code){
   console.log(res.code)
  }
  }
 })
 } 
})

3. 訪問(wèn)騰訊服務(wù)器的登錄憑證校驗(yàn)接口:

注:官方推薦放到服務(wù)器端進(jìn)行,這里為了方便,就放在前端請(qǐng)求了。

這里要注意傳入?yún)?shù):

appid   小程序唯一標(biāo)識(shí)
secret   小程序的 app secret
js_code   登錄時(shí)獲取的 code
grant_type   填寫(xiě)為 authorization_code

//2. 訪問(wèn)登錄憑證校驗(yàn)接口獲取session_key
 wx.request({
  url: "https://api.weixin.qq.com/sns/jscode2session",
  data: {
  'appid': "xxxxxxxx",
  'secret': "xxxxxxxx",
  'js_code': res.code,
  'grant_type': "authorization_code"
  },
  method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
  header: {
  'content-type': 'application/json'
  }, // 設(shè)置請(qǐng)求的 header
  success: function(data) {
  console.log("data", data.data.session_key)
  },
  fail: function(err) {
  console.log(err);
  }
 })

4. 自己的服務(wù)器端進(jìn)行解密

注:解密接口可以使用騰訊官方的demo進(jìn)行改造,具體改造會(huì)在后面說(shuō)明。

//3. 解密
 wx.request({
  url: 'http://xxxxx.com/demo/demo.php',//騰訊官方demo改造的接口頁(yè)面
  data: {
  'encryptedData': encodeURIComponent(e.detail.encryptedData),//需要進(jìn)行編碼
  'iv': e.detail.iv,
  'session_key': data.data.session_key
  },
  method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
  header: {
  'content-type': 'application/json'
  }, // 設(shè)置請(qǐng)求的 header
  success: function(data2) {
  console.log(data2.data.phoneNumber)
  if(data2.statusCode == 200) { 
   self.setData({
   phone: data2.data.phoneNumber
   })
  }
  },
  fail: function(err) {
  console.log(err);
  }
 })

js部分整體代碼如下:

getPhoneNumber: function (e) {
 if (e.detail.errMsg == "getPhoneNumber:fail user deny") return;
 //用戶(hù)允許授權(quán)
 console.log("lv", e.detail.iv);
 console.log(e.detail.encryptedData);
 wx.showLoading()
 var self=this
 //1. 調(diào)用登錄接口獲取臨時(shí)登錄code
 wx.login({
 success: res => {
 if(res.code){
  //2. 訪問(wèn)登錄憑證校驗(yàn)接口獲取session_key、openid
  wx.request({
  url: "https://api.weixin.qq.com/sns/jscode2session",
  data: {
  'appid': "wxcc41e47562b08129",
  'secret': "50e4379d67a6860d18157c53dc6ac3c2",
  'js_code': res.code,
  'grant_type': "authorization_code"
  },
  method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
  header: {
  'content-type': 'application/json'
  }, // 設(shè)置請(qǐng)求的 header
  success: function (data) {
  console.log("data", data)
  if(data.statusCode==200){
   //3. 解密
  wx.request({
   url: 'http://qdy8.gotoip4.com/demo/demo.php',
   data: {
   'encryptedData': e.detail.encryptedData,
   'iv': e.detail.iv,
   'session_key': data.data.session_key
   },
   method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
   header: {
   'content-type': 'application/json'
   }, // 設(shè)置請(qǐng)求的 header
   success: function (data2) {
   wx.hideLoading()
   console.log(data2.data.phoneNumber)
   if (data2.statusCode == 200 && data2.data.phoneNumber) {
   self.setData({ 
   phone: data2.data.phoneNumber
   })
   }
   },
   fail: function (err) {
   console.log(err);
   }
  })
  }
  },
  fail: function (err) {
  console.log(err);
  }
  }) 
 }
  
 }
 })
 }

二. 后端接口:

微信官方提供了多種編程語(yǔ)言的示例代碼(示例代碼)。每種語(yǔ)言類(lèi)型的接口名字均一致,調(diào)用方式可以參照示例。

如果只是學(xué)習(xí)研究,可以買(mǎi)個(gè)經(jīng)濟(jì)型的虛擬主機(jī),一年才幾十塊錢(qián),不過(guò)這種虛擬主機(jī)以php居多,所以這里以php為例進(jìn)行改造,接收前端請(qǐng)求。

官方demo下載后結(jié)構(gòu)如下:

對(duì)demo.php進(jìn)行改造:

<?php

include_once "wxBizDataCrypt.php";

/**
 * sessionKey/encryptedData/iv參數(shù)均從url中獲取,并賦給相應(yīng)變量
 */
$appid = 'xxxxxxxx';
$sessionKey = $_REQUEST['session_key'];
$encryptedData=$_REQUEST['encryptedData'];
$iv = $_REQUEST['iv'];

$pc = new WXBizDataCrypt($appid, $sessionKey);
$errCode = $pc->decryptData($encryptedData, $iv, $data );

if ($errCode == 0) {
 print($data . "\n");
} else {
 print($errCode . "\n");
}
?>

將php的三個(gè)demo文件上傳虛擬主機(jī):

然后就可以直接訪問(wèn)demo.php文件作為接口了。

三. 容易出現(xiàn)的異常:

1. 訪問(wèn)微信的登錄憑證校驗(yàn)接口獲取session_key時(shí),如果報(bào)出如下錯(cuò)誤,則需清除全部緩存,重新編譯(應(yīng)該是更改過(guò)appid,開(kāi)發(fā)工具的坑,不清除全部緩存,會(huì)出現(xiàn)這個(gè)錯(cuò)誤):

invalid code, hints: [ req_id: CPAsWa0325ha57 ]

2.解密接口返回-41003,則檢查接口參數(shù):

到此這篇關(guān)于微信小程序開(kāi)發(fā)之獲取用戶(hù)手機(jī)號(hào)碼(php接口解密)的文章就介紹到這了,更多相關(guān)小程序獲取用戶(hù)手機(jī)號(hào)碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • nuxt中使用路由守衛(wèi)的方法步驟

    nuxt中使用路由守衛(wèi)的方法步驟

    這篇文章主要介紹了nuxt中使用路由守衛(wèi)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 為什么js中不推薦使用eval函數(shù)(原因分析)

    為什么js中不推薦使用eval函數(shù)(原因分析)

    'eval'函數(shù)是javascript中的一個(gè)內(nèi)置函數(shù),它的主要作用是將傳入的字符串作為代碼來(lái)執(zhí)行,這篇文章主要介紹了為什么js中不推薦使用eval函數(shù),需要的朋友可以參考下
    2023-10-10
  • 利用JS+ES6新增字符串操作方法匯總(共47種方法)

    利用JS+ES6新增字符串操作方法匯總(共47種方法)

    字符串的操作是任何一門(mén)計(jì)算機(jī)語(yǔ)言都必須面對(duì)的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于利用JS+ES6新增字符串操作方法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 原生js實(shí)現(xiàn)驗(yàn)證碼功能

    原生js實(shí)現(xiàn)驗(yàn)證碼功能

    本文主要介紹了原生js實(shí)現(xiàn)驗(yàn)證碼功能的實(shí)例,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • JavaScript eval() 函數(shù)介紹及應(yīng)用示例

    JavaScript eval() 函數(shù)介紹及應(yīng)用示例

    eval(String) 函數(shù)可計(jì)算某個(gè)字符串,并執(zhí)行其中的的 JavaScript 代碼,該方法只接受原始字符串作為參數(shù)
    2014-07-07
  • 小程序組件傳值和引入sass的方法(使用vant Weapp組件庫(kù))

    小程序組件傳值和引入sass的方法(使用vant Weapp組件庫(kù))

    這篇文章主要介紹了小程序組件傳值和引入sass使用vant Weapp組件庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • js數(shù)組的基本使用總結(jié)

    js數(shù)組的基本使用總結(jié)

    這篇文章主要給大家介紹了關(guān)于js數(shù)組的基本使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 詳解JavaScript的內(nèi)存空間、賦值和深淺拷貝

    詳解JavaScript的內(nèi)存空間、賦值和深淺拷貝

    這篇文章主要介紹了JavaScript的內(nèi)存空間、賦值和深淺拷貝,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • JavaScript避免嵌套代碼淺析

    JavaScript避免嵌套代碼淺析

    這篇文章主要介紹了JavaScript避免嵌套代碼,很多時(shí)候需要編寫(xiě)的邏輯本身就很惡心, 乍看之下, 堆頁(yè)巖般的判定嵌套里似乎每一層都是必要的, 也只能說(shuō)盡量讓它看起來(lái)不那么惡心
    2023-02-02
  • js中for...in循環(huán)對(duì)象時(shí)輸出key值順序混亂問(wèn)題解決

    js中for...in循環(huán)對(duì)象時(shí)輸出key值順序混亂問(wèn)題解決

    很久之前就有前輩告訴我用for...in循環(huán)對(duì)象屬性的順序不是固定的,xiam?這篇文章主要給大家介紹了關(guān)于js中for...in循環(huán)對(duì)象時(shí)輸出key值順序混亂問(wèn)題解決方法,需要的朋友可以參考下
    2023-11-11

最新評(píng)論