序言:目前該介面針對非個人開發者,且完成了認證的小程式開放(不包含海外主體)。需謹慎使用,若使用者舉報較多或被發現在不必要場景下使用,微信有權永久回收該小程式的該介面許可權。
文件地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
需求:授權手機號
實現方法:
wxml
<button class="name line1 my_money phone11" open-type='getPhoneNumber' bindgetphonenumber='getPhoneNumber' >授權手機號</button>
因為需要使用者主動觸發才能發起獲取手機號介面,所以該功能不由 API 來呼叫,需用 button 元件的點選來觸發。
js
/**
* 手機號授權
*/
getPhoneNumber:function(e){
console.log(e);
if(e.detail.errMsg != 'getPhoneNumber:ok'){
if(e.detail.errMsg == 'getPhoneNumber:fail user deny' || e.detail.errMsg == 'getPhoneNumber:fail:user deny'){
wx.showToast({
title: '使用者取消',
icon: 'none'
})
}else{
wx.showToast({
title: e.detail.errMsg,
icon: 'none'
})
}
return false;
}
var encryptedData = e.detail.encryptedData;
var iv = e.detail.iv;
this.phone_session(encryptedData,iv);
},
//獲取手機號session
phone_session:function(encryptedData,iv){
wx.showLoading({ title: '載入中' ,'mask' : false });
var that = this;
var token = wx.getStorageSync('TOKEN');
var host = HTTP_REQUEST_URL;
wx.login({
success: function (r) {
var params2 = {};
params2.code = r.code;
wx.request({
url: host+'/api/common/get_session_key',
data:params2,
method:'post',
success: function (rr) {
if(rr['data']['status'] == 200) {
var session_key = rr['data']['data']['session_key'];
wx.request({
url: host+'/api/user/phone',
method: 'POST',
data: {
session_key: session_key,
encryptedData: encryptedData,
iv: iv,
},
header: {
'Accept': 'application/json',
'Authori-zation' : 'Bearer ' + token,
},
success(res3) {
// 繫結成功
wx.hideLoading();
if(res3.data.status == 200) {
that.setData({
userInfo: res3.data.data.user_info
})
} else {
wx.showToast({
title: res3.data.msg,
icon: 'none'
})
}
},
fail(res3) {
// 繫結失敗
wx.showToast({
title: res3.data.msg,
icon: 'none'
})
}
})
} else {
wx.showToast({
title: rr['data']['msg'],
icon: 'none'
})
}
},
})
}
})
},
php
/**
* 授權手機號
*/
public function phone(Request $request){
//開發者如需要獲取敏感資料,需要對介面返回的加密資料( encryptedData )進行對稱解密
$encryptedData = input('param.encryptedData');
$iv = input('param.iv');
$session_key = input('param.session_key');
require_once $root_path.'/extend/wxbizdatacrypt/wxBizDataCrypt.php';
$pc = new \WXBizDataCrypt($wechat["routine_appId"], $session_key);
$errCode = $pc->decryptData($encryptedData, $iv, $result); //其中$data包含使用者的所有資料
if ($errCode != 0) {
return_json("網路錯誤,請重試",100);
}else{
$result = json_decode($result,true);
Db::name("user")->where(["uid"=>$user_info["uid"]])->update(["phone"=>$result["phoneNumber"],"zt_phone"=>$result["phoneNumber"]]);
}
}
獲取微信使用者繫結的手機號,需先呼叫wx.login介面。
實現功能後如下
我是小程式軟體開發,每天分享開發過程中遇到的知識點,如果對你有幫助的話,幫忙點個贊再走唄,非常感謝。
往期文章分享:
微信小程式授權登入適配wx.getUserProfile最新程式碼
小程式wx.chooseImage上傳圖片,支援相簿選擇圖片或使用相機拍照