当前位置:网站首页>微信授权获取手机号码
微信授权获取手机号码
2022-06-11 11:57:00 【湛谷Gooyuit】
<button class="u-reset-button bindPhone" open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">去绑定</button>
//kunga获取手机号码
decryptPhoneNumber(e){
var that = this;
uni.showLoading({
title: '加载中...',
mark: true
});
uni.login({
success: function(info) {
let jsCode = info.code;
uni.request({
method: 'POST',
url: BASE_URL + '/index/index/update_phone',
data: {
jsCode: jsCode,
encryptedData: e.detail.encryptedData,
iv: e.detail.iv,
user_id:uni.getStorageSync('user_id')
},
success: (res) => {
uni.hideLoading();
if(res.data.code == 200){
uni.showToast({
title: '更新成功!',
duration: 2000
});
}
}
});
}
})
},php
<?php
namespace app\index\controller;
use app\common\controller\Frontend;
use service\JsonService;
include_once "wxBizDataCrypt.php";
class Index extends Frontend
{
protected $noNeedLogin = '*';
protected $noNeedRight = '*';
protected $layout = '';
public function update_phone()
{
$code = input('jsCode');
$encryptedData = input('encryptedData');
$iv = input('iv');
$user_id = input('user_id');
//小程序开发账户
$appid = "********" ;
$secret = "********";
$URL = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code";
$apiData=file_get_contents($URL);
if(!isset(json_decode($apiData)->errcode))
{
$sessionKey = json_decode($apiData)->session_key;
$info = new \WXBizDataCrypt($appid, $sessionKey);
$errCode = $info->decryptData($encryptedData, $iv, $data );
if ($errCode == 0 && !empty($user_id))
{
$phone = json_decode($data)->phoneNumber;
db("user")->where('id', $user_id)->update(['mobile' => $phone]);
$data_res['phone'] = $phone;
return JsonService::successful($data_res);
}
else {
return JsonService::fail($errCode);
}
}
}
}
wxBizDataCrypt.php文件另外下载
<?php
/**
* 对微信小程序用户加密数据的解密示例代码.
*
* @copyright Copyright (c) 1998-2014 Tencent Inc.
*/
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;
}
}
<?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;
}
?>边栏推荐
- C# 设置或验证 PDF中的文本域格式
- What is a Gerber file? Introduction to PCB Gerber file
- What is the latest popular annuity insurance product with higher income in 202?
- JVM-类加载过程
- golang利用异或^交换两个变量以及加解密
- MYCAT sub database and sub table
- Streaking? Baa!
- Use of RadioButton in QT
- [fragmentary thoughts] thoughts on wavelength, wave velocity and period
- Pan domain SSL certificate, sectigo cheap wildcard certificate popularization plan
猜你喜欢
Use cache to reduce network requests

读取geo表达矩阵

广东市政安全施工资料管理软件2022新表格来啦
![my. Binlog startup failure caused by the difference between [mysql] and [mysqld] in CNF](/img/bd/a28e74654c7821b3a9cd9260d2e399.png)
my. Binlog startup failure caused by the difference between [mysql] and [mysqld] in CNF

Uncaught TypeError: Cannot set property ‘next‘ of undefined 报错解决

Uncaught typeerror: cannot set property 'next' of undefined

軟件項目管理 7.1.項目進度基本概念

Use of RadioButton in QT

C reads TXT file to generate word document

MYCAT sub database and sub table
随机推荐
Network protocol of yyds dry goods inventory: datagram socket for detailed explanation of socket protocol
Eulato
The wonderful use of XOR (C language)
Guice integrated properties configuration
Intl.numberformat set number format
C # convert ofd to PDF
Typescript compilation options and configuration files
[go] interpretation of gin source code
2020-07 study notes sorting
Zhejiang University and Microsoft Asia Research Institute released a new method of video recognition, which can recognize video frame by frame without data marking, or can be used for sign language tr
Intermediate web development engineer, interview questions + Notes + project practice
The role of Gerber file in PCB manufacturing
深度学习与CV教程(14) | 图像分割 (FCN,SegNet,U-Net,PSPNet,DeepLab,RefineNet)
arguments.callee 实现函数递归调用
Études à la fin de l'enseignement 03
Read geo expression matrix
统计出现次数最多的前K个字符串
[JUC supplementary] immutable object, shared meta mode, final principle
Hang up the interviewer
POJ 3278 catch the cow (width first search, queue implementation)