wx.login({ success: res => { getApp().request({ url: getApp().globalData.url + '/api/member/getAxbphone' , method: "post" , data: { encryptedData: e.detail.encryptedData, iv: e.detail.iv, code: res.code }, success: function (res) { console.log( '手机号返回' ,res); if (res.msg.mobile) { wx.showModal({ title: '拨打隐私号码' , content: '为了双方的真实号码不被泄露,在隐私保护通话平台为A和B用户绑定一个虚拟号码X' , confirmText: "拨打电话" , confirmColor: "#07c160" , showCancel: false , success: function (t) { if (t.confirm) { console.log( '用户点击主操作' , res.msg.mobile) self.axbclick(res.msg.mobile); } } }); } else { wx.showToast({ title: '授权失败,请重新授权' , icon: 'none' }) } }, fail: function () { wx.showToast({ title: '授权失败,请重新授权' , icon: 'none' }) } }) } }) |
public function getAxbphone( $value = '' ){ $encryptedData = input( 'encryptedData' ); $iv = input( 'iv' ); $res = $this ->getopenId(input( 'code' )); if ( strlen ( $res [ 'session_key' ]) != 24) { return 1; } $pc = new WXBizDataCrypt( $setting [ 'appid' ], $res [ 'session_key' ]); $errCode = $pc ->decryptData( $encryptedData , $iv , $data ); $data = json_decode( $data ,true); //是否获取到需要挪车的手机号 if ( $data [ 'phoneNumber' ]){ $data = [ 'mobile' => $data [ 'phoneNumber' ] ]; return json([ 'msg' => $data , 'status' => '1' ]); //把手机号返回 } else { return json([ 'msg' => $data , 'status' => '-1' ]); //出错 } } |
<?php namespace WXBizDataCrypt; /** * 对微信小程序用户加密数据的解密示例代码. * * @copyright Copyright (c) 1998-2014 Tencent Inc. */ class WXBizDataCrypt { public static $OK = 0; public static $IllegalAesKey = -41001; public static $IllegalIv = -41002; public static $IllegalBuffer = -41003; public static $DecodeBase64Error = -41004; private $appid ; private $sessionKey ; /** * 构造函数 * @param $sessionKey string 用户在小程序登录后获取的会话密钥 * @param $appid string 小程序的appid */ public function __construct( $appid , $sessionKey ) { $this ->sessionKey = $sessionKey ; $this ->appid = $appid ; } /** * 检验数据的真实性,并且获取解密后的明文. * @param $encryptedData string 加密的用户数据 * @param $iv string 与用户数据一同返回的初始向量 * @param $data string 解密后的原文 * * @return int 成功0,失败返回对应的错误码 */ public function decryptData( $encryptedData , $iv , & $data ) { if ( strlen ( $this ->sessionKey) != 24) { return static :: $IllegalAesKey ; } $aesKey = base64_decode ( $this ->sessionKey); if ( strlen ( $iv ) != 24) { return static :: $IllegalIv ; } $aesIV = base64_decode ( $iv ); $aesCipher = base64_decode ( $encryptedData ); $result = openssl_decrypt( $aesCipher , "AES-128-CBC" , $aesKey , 1, $aesIV ); $dataObj = json_decode( $result ); if ( $dataObj == NULL) { return static :: $IllegalBuffer ; } if ( $dataObj ->watermark->appid != $this ->appid) { return static :: $IllegalBuffer ; } $data = $result ; return static :: $OK ; } } |
是不是login刷新了sessionkey?
第一次失败应该有一个报错吧 看看是什么报错解决就好了啊 我猜是code的问题