抖音小程序一键获取手机号

前端代码组件

html 复制代码
	<button 
		v-if="!isFromOrderList"
		class="get-phone-btn" 
		open-type="getPhoneNumber"
		@getphonenumber="onGetPhoneNumber"
	>
		一键获取
	</button>
javascript 复制代码
			// 获取手机号回调
		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解密前端手机号加密信息

php 复制代码
    /**
     * 获取抖音小程序手机号
     * @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']];
    }
相关推荐
2501_915106326 小时前
如何查看手机使用记录:Android和iOS设备全面指南
android·ios·智能手机·小程序·uni-app·iphone·webview
chaffererdog11 小时前
uniapp开发微信小程序使用vk-uview-ui的uSearch搜索组件,在微信开发者工具中点击输入框会意外触发custom事件
微信小程序·小程序·uni-app
2501_9159184117 小时前
Flutter 加固方案全解析,从 Dart 层到 IPA 成品的多工具协同防护体系
flutter·macos·ios·小程序·uni-app·cocoa·iphone
我命由我1234517 小时前
微信小程序 - 内容弹出框实现(Vant Weapp 实现、原生实现)
开发语言·前端·javascript·微信小程序·小程序·前端框架·js
小码哥06818 小时前
陪诊小程序核心功能拆解:预约、导航与提醒
小程序·项目源码·预约系统·陪诊·陪诊系统开发
q_191328469519 小时前
基于Springboot+uniapp的智慧停车场收费小程序
java·vue.js·spring boot·小程序·uni-app·毕业设计·计算机毕业设计
2501_9160074719 小时前
深入理解 iOS 文件管理体系,从沙盒结构到多工具协同的工程化文件管理实践
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张19 小时前
iOS 性能检测工具深度解析 多工具协同下的全维度性能检测体系建设
android·ios·小程序·https·uni-app·iphone·webview
说私域19 小时前
天猫卖家运营突围:基于开源AI智能名片链动2+1模式S2B2C商城小程序的转型路径研究
人工智能·小程序·开源
00后程序员张19 小时前
Fiddler调试工具全面解析 HTTPHTTPS抓包、代理设置与接口测试实战教程
前端·测试工具·ios·小程序·fiddler·uni-app·webview