当前位置:网站首页>微信授权获取手机号码
微信授权获取手机号码
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;
}
?>边栏推荐
- Linux忘记MySQL密码后修改密码
- WordPress site link modification plug-in: Velvet Blues update URLs
- 刷题笔记(十四)--二叉树:层序遍历和DFS,BFS
- Where is it safer to open an account for soda ash futures? How much capital is needed for a transaction?
- 阶乘后的零(C语言)
- 什么是Gerber文件?PCB电路板Gerber文件简介
- 读取geo表达矩阵
- ELK - X-Pack设置用户密码
- 苹果MobileOne: 移动端仅需1ms的高性能骨干
- WordPress regenerate featured image plugin: regenerate thumbnails
猜你喜欢

Elk - hearthbeat implements service monitoring

Gerber文件在PCB制造中的作用

阶乘后的零(C语言)

C# 将OFD转为PDF

Interview experience of Xiaomi Android development post~

JS interview questions - arrow function, find and filter some and every

C# 设置或验证 PDF中的文本域格式

The role of Gerber file in PCB manufacturing

Maximum water container

【LeetCode】1049. Weight of the last stone II (wrong question 2)
随机推荐
Fast build elk7.3
WordPress regenerate featured image plugin: regenerate thumbnails
arguments.callee 实现函数递归调用
ELK - Hearthbeat实现服务监控
异或的妙用(C语言)
2022 | framework for Android interview -- Analysis of the core principles of binder, handler, WMS and AMS!
JS to realize the rotation chart (riding light). Pictures can be switched left and right. Moving the mouse will stop the rotation
MSF CS OpenSSL traffic encryption
软件项目管理 7.1.项目进度基本概念
js面试题---箭头函数,find和filter some和every
[第二章 基因和染色体的关系]生物知识概括–高一生物
Runtime reconfiguration of etcd
什么是Gerber文件?PCB电路板Gerber文件简介
Read geo expression matrix
调整数组顺序使奇数位于偶数前面(C语言)
Adjust the array order so that odd numbers precede even numbers (C language)
2020-07 学习笔记整理
202年最新热门收益较高的年金险产品是什么?
《公司理财师专业能力》笔记
C reads TXT file to generate word document