微信小程序获取用户手机号
获取用户手机号需要认证服务号权限
微信端:
<!–.wxml文件–>
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号 </button> //.js文件 getPhoneNumber: function(e) { wx.request({ url: 'http://127.0.0.1/wxlogin/getPhone.php/', data: { iv: e.detail.iv, encryptedData: e.detail.encryptedData, }, success(res) { console.log(res) } }) },
服务端:
需要先获取sessionKey,sessionKey在获取openid时已经获取,本人将openid和sessionKey以json格式存在了txt文件中,实际开发可以放入缓存或者临时数据库中,获取openid的教程请查看之前的文章http://bk.qsyq.online/?t/1.html
//getPhone.php页面
<?php include_once "wxBizDataCrypt.php"; $filename = "hc.txt"; $handle = fopen($filename,'r'); $contents = fread($handle,filesize($filename)); fclose($handle); $arr=json_decode($contents); $data=$_GET; $appid = 'APPID';//填写小程序的appid $sessionKey=$arr->session_key; $encryptedData=$data['encryptedData']; $iv = $data['iv']; $pc = new WXBizDataCrypt($appid, $sessionKey); $errCode = $pc->decryptData($encryptedData, $iv, $data ); if ($errCode == 0) { print($data . "\n"); } else { print($errCode . "\n"); } // wxBizDataCrypt.php页面 <?php include_once "errorCode.php"; class WXBizDataCrypt { 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 ErrorCode::$IllegalAesKey; } $aesKey=base64_decode($this->sessionKey); if (strlen($iv) != 24) { return ErrorCode::$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 ErrorCode::$IllegalBuffer; } if( $dataObj->watermark->appid != $this->appid ) { return ErrorCode::$IllegalBuffer; } $data = $result; return ErrorCode::$OK; } }
// errorCode.php页面
<?php /** * error code 说明. * <ul> * <li>-41001: encodingAesKey 非法</li> * <li>-41003: aes 解密失败</li> * <li>-41004: 解密后得到的buffer非法</li> * <li>-41005: base64加密失败</li> * <li>-41016: base64解密失败</li> * </ul> */ class ErrorCode { public static $OK = 0; public static $IllegalAesKey = -41001; public static $IllegalIv = -41002; public static $IllegalBuffer = -41003; public static $DecodeBase64Error = -41004; } ?>
最后点击小程序获取手机号按钮结果
转载至:QSYQ_清殇论坛