日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

公众号获取用户手机号_小程序中如何获取微信用户绑定的手机号

發(fā)布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 公众号获取用户手机号_小程序中如何获取微信用户绑定的手机号 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

小程序官方文檔中介紹:

獲取微信用戶綁定的手機(jī)號,需先調(diào)用wx.login接口。
因為需要用戶主動觸發(fā)才能發(fā)起獲取手機(jī)號接口,所以該功能不由 API 來調(diào)用,需用 button 組件的點(diǎn)擊來觸發(fā)。

注意:目前該接口針對非個人開發(fā)者,且完成了認(rèn)證的小程序開放(不包含海外主體)。需謹(jǐn)慎使用,若用戶舉報較多或被發(fā)現(xiàn)在不必要場景下使用,微信有權(quán)永久回收該小程序的該接口權(quán)限。具體可參考小程序官方文檔

使用方法

需要將 button 組件 open-type 的值設(shè)置為 getPhoneNumber,當(dāng)用戶點(diǎn)擊并同意之后,可以通過 bindgetphonenumber 事件回調(diào)獲取到微信服務(wù)器返回的加密數(shù)據(jù), 然后在第三方服務(wù)端結(jié)合 session_key 以及 app_id 進(jìn)行解密獲取手機(jī)號。

<button?open-type="getPhoneNumber"?bindgetphonenumber="getPhoneNumber">獲取手機(jī)號button>

在使用組件之前先調(diào)用login

App({??
????onLaunch:?function?()?{??
????????wx.login({??
????????????success:?function?(res)?{??
????????????????if?(res.code)?{??
????????????????????this.globalData.code?=?res.code;
????????????????}?else?{??
????????????????????console.log('獲取用戶登錄態(tài)失敗!'?+?res.errMsg)??
????????????????}??
????????????}??
????????});??
????},
????globalData:?{}
})

getPhoneNumber中將返回用戶是否同意授權(quán)的數(shù)據(jù),

const?App?=?getApp();
Page({
????getPhoneNumber(e)?{
????????const?{?iv,?encryptedData,?errMsg?}?=?e.detail;
????????if?(errMsg?===?'getPhoneNumber:ok')?{
????????????//?同意授權(quán)
????????????wx.request({
????????????????url:?'/GetPhone',
????????????????data:?{
????????????????????code:?App.globalData.code,
????????????????????iv,
????????????????????encryptedData
????????????????},
????????????????success:?(res)?=>?{
????????????????????console.log(res);
????????????????}
????????????})
????????}
????}
})

后端需要根據(jù)前端傳遞的code,iv, encryptedData,結(jié)合小程序的appID,secret,先獲取session_key,然后在進(jìn)行電話號碼解析。為了安全考慮,我們的appID和secret都是存放在后端的,所以獲取session_key和電話解析都放后端進(jìn)行了,前端只需調(diào)用接口即可。

獲取session_key的地址

const?APP_ID?=?'';
const?SECRET?=?'';
const?BASE_URL?=?'https://api.weixin.qq.com';

const?url?=?`${BASE_URL}/sns/jscode2session?appid=${APP_ID}&secret=${SECRET}&js_code=${res.code}&grant_type=authorization_code`;

電話號碼解析實例(java版)

import?org.apache.shiro.codec.Base64;
import?org.springframework.stereotype.Controller;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.ResponseBody;

import?javax.crypto.BadPaddingException;
import?javax.crypto.Cipher;
import?javax.crypto.IllegalBlockSizeException;
import?javax.crypto.NoSuchPaddingException;
import?javax.crypto.spec.IvParameterSpec;
import?javax.crypto.spec.SecretKeySpec;
import?java.io.IOException;
import?java.io.UnsupportedEncodingException;
import?java.security.InvalidAlgorithmParameterException;
import?java.security.InvalidKeyException;
import?java.security.NoSuchAlgorithmException;
import?java.security.spec.AlgorithmParameterSpec;

@Controller

public?class?GetPhone?{
????/*用戶手機(jī)號解析*/
????@RequestMapping("/getPhoneNumber")
????@ResponseBody
????public?String?getPhoneNumber(String?encryptedData,?String?iv,?String?sessionKey)?throws?NoSuchPaddingException,?NoSuchAlgorithmException,?InvalidAlgorithmParameterException,?InvalidKeyException,?BadPaddingException,?IllegalBlockSizeException,?UnsupportedEncodingException?{

????????byte[]?encData?=?Base64.decode(encryptedData);
????????byte[]?keyByte?=?Base64.decode(iv);
????????byte[]?key?=?Base64.decode(sessionKey);

????????AlgorithmParameterSpec?ivSpec?=?new?IvParameterSpec(keyByte);
????????Cipher?cipher?=?Cipher.getInstance("AES/CBC/PKCS5Padding");
????????SecretKeySpec?keySpec?=?new?SecretKeySpec(key,?"AES");
????????cipher.init(Cipher.DECRYPT_MODE,?keySpec,?ivSpec);//?初始化
????????byte[]?resultByte?=?cipher.doFinal(encData);
????????if?(null?!=?resultByte?&&?resultByte.length?>?0)?{
????????????String?result?=?new?String(resultByte,?"UTF-8");
????????????System.out.println(result);
????????????return?result;
????????}
????????return?null;
????}

注意:在回調(diào)中調(diào)用 wx.login 登錄,可能會刷新登錄態(tài)。此時服務(wù)器使用 code 換取的 sessionKey 不是加密時使用的 sessionKey,導(dǎo)致解密失敗。建議開發(fā)者提前進(jìn)行 login;或者在回調(diào)中先使用 checkSession 進(jìn)行登錄態(tài)檢查,避免 login 刷新登錄態(tài)。

最后提醒大家,進(jìn)入一個未知的小程序時,彈出用戶授權(quán)詢問框時,謹(jǐn)慎授權(quán)。

如下圖所示。

總結(jié)

以上是生活随笔為你收集整理的公众号获取用户手机号_小程序中如何获取微信用户绑定的手机号的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。