php微信小程序獲取用戶信息(手機號碼)


小程序確實很簡單。解決這個問題時候,忽略了官方文檔的一句話,耗費了好幾個小時的時間。

所以,找不出錯誤的時候,多看官方文檔!

官方文檔很重要 ! 就是忽略了這句話:獲取微信用戶綁定的手機號,需先調用wx.login接口。

傳遞給php的參數(code , iv,encryptData)都是正確的,sessionKey也沒有問題,引用的文件都是官方下載的。

可就是解密失敗,返回-41003(aes 解密失敗),(奇怪的是,用微信官方demo的 appid,sessionKey, encrypt, iv,即使沒有登錄狀態,也可以解密成功。)

正確的代碼是:

在onLoad函數中(獲取微信用戶綁定的手機號,需先調用wx.login接口,進入登錄狀態):

  wx.login({
      success (res) {
        that.setData({
          code:res.code
        })
        if (res.code) {
          //發起網絡請求
          wx.request({
            url: '自己的url'+res.code,
            success(res){
              console.log("request成功")
            },
            fail(res){
              console.log("request失敗")
            }
          })
        } else {
          console.log('登錄失敗!' + res.errMsg)
        }
      }
    })

在獲取用戶手機號的按鈕,綁定一個函數例如(還要調用一次wx.login,code只能用一次):

//獲取用戶手機號

//獲取用戶手機號
getPhoneNumber:function(e){
  var that = this;
console.log("正在獲取 敏感加密數據 手機號")
//這是兩個 需要發送給 php的參數,還需要 發送  wx.login產生的code,需要一次發送
console.log("iv 是:",e.detail.iv)
console.log("encryptedData 是:",e.detail.encryptedData)
var encryptedData = encodeURIComponent(e.detail.encryptedData);//一定要把加密串轉成URI編碼
 
wx.login({
  success (res) {
    if (res.code) {
      //發起網絡請求
      //發起網絡請求
      wx.request({
        url: '自己的url',
    
        success:function(res){
          console.log("獲取用戶手機號:wx.login中request成功",res)
        },
        fail:function(res){
          console.log("獲取用戶手機號,請求失敗!")
        }
      })
    } else {
      console.log('登錄失敗!' + res.errMsg)
    }
  }
})     
},

 

常見錯誤:

1、解密的時候,報錯:iv 應該是16個 byte,不應該是15個byte,說明數據傳輸時,iv 中的 + 自動轉換成了 " "(空格)。

在 php接收 iv 后,將 iv 中 的空格替換為加號 即可。

/**
     * 請求過程中因為編碼原因+號變成了空格
     * 需要用下面的方法轉換回來
     */
    function define_str_replace($_data)
    {
        return str_replace(' ','+',$_data);
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM