注:个人开发必须使用测试号
使用方法:需要将button组件open-type
的值设置为getPhoneNumber
,当用户点击并同意之后,可以通过bindgetphonenumber
事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合session_key
以及app_id
进行解密获取手机号。
上干货:
微信官方文档:https://developers./miniprogram/dev/framework/open-ability/getPhoneNumber.html
//微信小程序 open-type="getPhoneNumber"<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
getPhoneNumber (e) {let iv = e.detail.ivlet encryptedData = e.detail.encryptedDatalet token = wx.getStorageSync('token')wx.request({url: '/api/phone',data:{iv,encryptedData,token},method:'POST',success:res=>{}})}
注意:iv、encryptedData是必要参数
后端代码:以php(laravel8.5)为例
//获取手机号public function getPhoneNumber(Request $request){$params = $request->all();$user_id = (new Token())->chekToken($params['token']);try{//获取用户信息$user = User::where('id',$user_id)->first();$aesKey = base64_decode($user->session_key);$aesIV = base64_decode($params['iv']);$aesCipher = base64_decode($params['encryptedData']);$result = openssl_decrypt($aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);$phoneNumber = json_decode($result, true)['purePhoneNumber'];//更改手机号$user->mobile = $phoneNumber;$user->save();return ['error_code' => 0, 'data' => '', 'msg' => '手机号获取成功'];}catch (\Exception $e){return ['error_code' => 10002, 'data' => '', 'msg' => '手机号获取失败'];}}
到这里基本就完成了!