前端代码组件
<button v-if="!isFromOrderList" class="get-phone-btn" open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber" > 一键获取 </button>
// 获取手机号回调 onGetPhoneNumber(e) { var that = this tt.login({ force: true, success(res) { console.log('获取手机号回调', e) if (e.detail.errMsg === 'getPhoneNumber:ok') { // 获取成功,调用后端接口解密手机号 that.decryptPhoneNumber(res.code,e.detail.iv,e.detail.encryptedData) } else { uni.showToast({ title: '获取手机号失败', icon: 'none' }) } }, fail(res) { console.log(`login 调用失败`); }, }); }, // 解密手机号 后端PHP进行解密 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 || '获取手机号失败') } } catch (error) { console.error('解密手机号失败:', error) uni.showToast({ title: error.message || '获取手机号失败', icon: 'none' }) } }
后端使用的PHP去实现 思路首先通过前端的code换取sessionkey 然后通过 sessionkey解密前端手机号加密信息
/** * 获取抖音小程序手机号 * @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' => [ ], ]); } } /** * 通过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']]; }
到此这篇关于抖音小程序一键获取手机号的实现思路的文章就介绍到这了,更多相关抖音小程序一键获取手机号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源链接:https://www.jb51.net/javascript/334770ast.htm
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
暂无评论内容