授权手机号phone.jsphone.jsPage({ /** * 页面的初始数据 */ data: { }, //授权手机号 getPhoneNumber(e){ var iv = e.detail.iv var encry..._小程序授权手机号代码">
赞
踩
phone.wxml
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">授权手机号</button>
phone.js
- phone.js
-
- Page({
-
- /**
- * 页面的初始数据
- */
- data: {
-
- },
- //授权手机号
- getPhoneNumber(e){
- var iv = e.detail.iv
- var encryptedData = e.detail.encryptedData
- var session_key = wx.getStorageSync('session_key')
- var openid = wx.getStorageSync('openid')
- var that =this
- wx.request({
- url: 'http://www.lav8.week3.com/api/phone',
- data: {
- iv:iv,
- encryptedData:encryptedData,
- session_key:session_key,
- openid:openid
- },
- method:"POST",
- header: {
- token:wx.getStorageSync('token')
- },
- success (res) {
- console.log(res)
-
- if(res.statusCode==200){
- wx.showToast({
- title: '手机号授权成功',
- })
- }
- }
- })
- },
php:
- <?php
-
- namespace App\Http\Controllers;
-
- use App\Models\Login;
- use App\Service\phone\WXBizDataCrypt;
- use Illuminate\Http\Request;
-
- class PhoneController extends Controller
- {
- /**
- * 授权手机号
- */
- public function getPhone(request $request)
- {
- $appid = config('openid.openid');
- $sessionKey = $request->post('session_key');
- $iv = $request->post('iv');
- $encryptedData = $request->post('encryptedData');
- $openid = $request->post('openid');
-
- $pc = new WXBizDataCrypt($appid, $sessionKey);
- $errCode = $pc->decryptData($encryptedData, $iv, $data );
-
- if ($errCode == 0) {
- print($data . "\n");
- } else {
- print($errCode . "\n");
- }
- $newData = json_decode($data,true);
-
- if ($errCode==0){
- $res = Login::where('openid',$openid)->update(['phone'=>$newData['phoneNumber']]);
- if ($res!==false){
- return ['code'=>200,'msg'=>'手机号成功','data'=>$newData['phoneNumber']];
- }
- }
- }
- }
首先封装一个服务层
引入三个php文件
- demo.php
- <?php
-
- namespace App\Service\phone;
-
-
- $appid = 'wx4f4bc4dec97d474b';
- $sessionKey = 'tiihtNczf5v6AKRyjwEUhQ==';
-
- $encryptedData="CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZM
- QmRzooG2xrDcvSnxIMXFufNstNGTyaGS
- 9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+
- 3hVbJSRgv+4lGOETKUQz6OYStslQ142d
- NCuabNPGBzlooOmB231qMM85d2/fV6Ch
- evvXvQP8Hkue1poOFtnEtpyxVLW1zAo6
- /1Xx1COxFvrc2d7UL/lmHInNlxuacJXw
- u0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn
- /Hz7saL8xz+W//FRAUid1OksQaQx4CMs
- 8LOddcQhULW4ucetDf96JcR3g0gfRK4P
- C7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB
- 6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns
- /8wR2SiRS7MNACwTyrGvt9ts8p12PKFd
- lqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYV
- oKlaRv85IfVunYzO0IKXsyl7JCUjCpoG
- 20f0a04COwfneQAGGwd5oa+T8yO5hzuy
- Db/XcxxmK01EpqOyuxINew==";
-
- $iv = 'r7BXXKkLb8qrSNn05n0qiA==';
-
- $pc = new WXBizDataCrypt($appid, $sessionKey);
- $errCode = $pc->decryptData($encryptedData, $iv, $data );
-
- if ($errCode == 0) {
- print($data . "\n");
- } else {
- print($errCode . "\n");
- }
- ErrorCode.php
- <?php
- namespace App\Service\phone;
- /**
- * 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;
- }
-
- ?>
- WXBizDataCrypt.php
-
- <?php
-
- /**
- * 对微信小程序用户加密数据的解密示例代码.
- *
- * @copyright Copyright (c) 1998-2014 Tencent Inc.
- */
-
-
- namespace App\Service\phone;
-
-
- 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;
- }
-
- }
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。