微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码
之前做的版本用户这块是以获取用户openid为凭证,最近改版重新整理了一下,新增注册登录以手机号码为主,
两种(正常注册手机号码-密码+一键获取当前用户手机号码)
getPhoneNumber这个组件要通过button来实现。将button中的open-type=“getPhoneNumber”,并且绑定bindgetphonenumber事件获取回调。
在使用这个组件之前必须先调用 login 接口
然后传递code,iv,encryptedData参数到后台,后台解密
示例
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" hover-class="none">一键自动注册</button>
getPhoneNumber: function (e) {
console.log(e.detail.errMsg)
if (e.detail.errMsg == \'getPhoneNumber:fail user deny\') {
wx.showModal({
title: \'提示\',
showCancel: false,
content: \'未授权\',
success: function (res) { }
})
} else {
wx.login({
success: function (res) {
var code = res.code;
if (res.code) {
//发起网络请求
console.log(res.code)
} else {
console.log(\'获取用户登录态失败!\' + res.errMsg)
}
wx.showModal({
title: \'提示\',
showCancel: false,
content: \'同意授权\',
success: function (res) {
var that = this;
console.log(123)
wx.request({
url: \'/wxapplet/wx/wechat/phone\',
data: {
code: code,
iv: e.detail.iv,
encryptedData: e.detail.encryptedData
},
method: \'GET\',
header: {
\'content-type\': \'application/json\'
},
success: function (res) {
wx.setStorageSync(\'user\', res.data.data);
if(res.data.code == "200"){
console.log(res.data.data)
wx.showToast({
title: \'一键绑定成功\',
icon: \'success\',
duration: 2000,
success: function(){
wx.switchTab({ url: \'../user-center/index\' });
}
})
}else{
wx.showModal({
title: \'提示\',
content: \'一键绑定失败,请重新尝试\',
success: function (res) {
if (res.confirm) {
console.log(\'用户点击确定\')
} else if (res.cancel) {
console.log(\'用户点击取消\')
}
}
})
}
},
});
}
})
}
});
}
}
- 后台是php 框架是laravel
<?php
namespace App\Http\Controllers\WxApplet;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Repository\WxUserRepository;
include_once app_path(\'/Http/Controllers/WxApplet/Php/wxBizDataCrypt.php\');
class WechatController extends Controller
{
/**
* constructer.
*
* @param WxUserRepository $wxUser
*/
public function __construct
(
WxUserRepository $WxUserRepository
)
{
$this->WxUserRepository = $WxUserRepository;
}
/**
* 获取用户手机号码
*
* @return response
*/
public function getWechatUserPhone(Request $request)
{
$code = $request->get(\'code\');
$encryptedData = $request->get(\'encryptedData\');
$iv = $request->get(\'iv\');
//小程序开发账户
$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)
{
$phone = json_decode($data)->phoneNumber;
$single_phone=$this->WxUserRepository->Single($phone);
if ($single_phone == null)
{
$wx_user = $this->WxUserRepository->Create($phone,$password);
}
return $this->Success(200003);
}
else {
return $this->fail(420004);
}
}
}
}
原文链接:https://blog.csdn.net/qq_34827048/article/details/78878121