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