抖音小程序一鍵獲取手機(jī)號(hào)的實(shí)現(xiàn)思路
前端代碼組件

<button v-if="!isFromOrderList" class="get-phone-btn" open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber" > 一鍵獲取 </button>
// 獲取手機(jī)號(hào)回調(diào)
onGetPhoneNumber(e) {
var that = this
tt.login({
force: true,
success(res) {
console.log('獲取手機(jī)號(hào)回調(diào)', e)
if (e.detail.errMsg === 'getPhoneNumber:ok') {
// 獲取成功,調(diào)用后端接口解密手機(jī)號(hào)
that.decryptPhoneNumber(res.code,e.detail.iv,e.detail.encryptedData)
} else {
uni.showToast({
title: '獲取手機(jī)號(hào)失敗',
icon: 'none'
})
}
},
fail(res) {
console.log(`login 調(diào)用失敗`);
},
});
},
// 解密手機(jī)號(hào) 后端PHP進(jìn)行解密
async decryptPhoneNumber(code,iv,encryptedData) {
try {
const res = await orderApi.decryptPhone({
code: code,
iv: iv,
encryptedData: encryptedData
})
if (res.code === 1 && res.data && res.data.phone) {
this.phone = res.data.phone
} else {
throw new Error(res.msg || '獲取手機(jī)號(hào)失敗')
}
} catch (error) {
console.error('解密手機(jī)號(hào)失敗:', error)
uni.showToast({
title: error.message || '獲取手機(jī)號(hào)失敗',
icon: 'none'
})
}
}后端使用的PHP去實(shí)現(xiàn) 思路首先通過(guò)前端的code換取sessionkey 然后通過(guò) sessionkey解密前端手機(jī)號(hào)加密信息
/**
* 獲取抖音小程序手機(jī)號(hào)
* @param $code
* @param $iv
* @param $encryptedData
* @return \think\response\Json
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function get_mobile($code, $iv, $encryptedData)
{
$result = $this->code2Session($code);
//解密
$phone = openssl_decrypt(base64_decode($encryptedData, true), 'AES-128-CBC', base64_decode($result['session_key']), OPENSSL_RAW_DATA, base64_decode($iv));
$phone = json_decode($phone, 1);
if (isset($phone['phoneNumber']) && $phone['phoneNumber']) {
return json([
'code' => 1,
'msg' => '獲取成功',
'data' => [
'phone' => $phone['phoneNumber']
],
]);
} else {
return json([
'code' => 0,
'msg' => '獲取失敗',
'data' => [
],
]);
}
}
/**
* 通過(guò)code換取 session_key
* @param $code
* @return array
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function code2Session($code)
{
$uri = 'https://developer.toutiao.com/api/apps/v2/jscode2session';
$options = [
'body' => json_encode([
'appid' => config('xinghuo_mp.appid'),
'secret' => config('xinghuo_mp.appsecret'),
'code' => $code,
'anonymous_code' => ''
]),
'headers' => [
'Content-Type' => 'application/json'
]
];
$response = (new \GuzzleHttp\Client)->post($uri, $options);
$stringBody = (string)$response->getBody();
$result = json_decode($stringBody, true);
return ['openid' => $result['data']['openid'], 'session_key' => $result['data']['session_key']];
}到此這篇關(guān)于抖音小程序一鍵獲取手機(jī)號(hào)的實(shí)現(xiàn)思路的文章就介紹到這了,更多相關(guān)抖音小程序一鍵獲取手機(jī)號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- uniapp抖音小程序一鍵獲取用戶手機(jī)號(hào)的示例代碼
- UNIAPP實(shí)現(xiàn)微信小程序登錄授權(quán)和手機(jī)號(hào)授權(quán)功能(uniapp做微信小程序)
- 微信小程序獲取用戶手機(jī)號(hào)碼詳細(xì)教程(前端+后端)
- 微信小程序中獲取用戶手機(jī)號(hào)授權(quán)登錄詳細(xì)步驟
- uniapp微信小程序授權(quán)登錄并獲取手機(jī)號(hào)的方法
- uniapp+.net?core實(shí)現(xiàn)微信小程序獲取手機(jī)號(hào)功能
- PHP配合微信小程序?qū)崿F(xiàn)獲取手機(jī)號(hào)碼詳解
- 微信小程序登錄方法之授權(quán)登陸及獲取微信用戶手機(jī)號(hào)
- 微信小程序獲取用戶手機(jī)號(hào)碼的詳細(xì)步驟
- 微信小程序?qū)崿F(xiàn)手機(jī)號(hào)碼驗(yàn)證
相關(guān)文章
結(jié)合ES6?編寫?JavaScript?設(shè)計(jì)模式中的結(jié)構(gòu)型模式
這篇文章主要介紹了結(jié)合ES6編寫JavaScript?設(shè)計(jì)模式中的結(jié)構(gòu)型模式,設(shè)計(jì)模式是軟件設(shè)計(jì)中常見(jiàn)問(wèn)題的解決方案,這些模式很容易重復(fù)使用并且富有表現(xiàn)力2022-07-07
使用 bootstrap modal遇到的問(wèn)題小結(jié)
bootstrap提供了一個(gè)寫好的css文件和js文件然而在使用時(shí)遇到了一下并不是很好的問(wèn)題,今天在使用彈出對(duì)話框時(shí)遇到了一個(gè)這樣的問(wèn)題,今天小編給大家分享下使用 bootstrap modal遇到的問(wèn)題小結(jié),一起看看吧2016-11-11
實(shí)現(xiàn)高性能javascript的注意事項(xiàng)
JavaScript代碼在web應(yīng)用程序中經(jīng)常用到,但是很多開發(fā)者忽視了一些性能方面的知識(shí),如何編寫高性能javascript代碼呢?接下來(lái),小編跟大家一起學(xué)習(xí)2019-05-05
javascript如何使用函數(shù)random來(lái)實(shí)現(xiàn)課堂隨機(jī)點(diǎn)名方法詳解
這篇文章主要介紹了javascript如何使用函數(shù)random來(lái)實(shí)現(xiàn)課堂隨機(jī)點(diǎn)名方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

