微信小程序獲取用戶手機號碼詳細教程(前端+后端)
1.背景介紹
在開發(fā)一款微信小程序時,需要用戶進行微信登錄,獲取用戶的手機號碼來作為用戶的唯一標識(userId),于是探索獲取用戶手機號碼的方式;
(當然,通過wx.login來獲取code,進而換取用戶的openid也是可以的)
目前版本的微信小程序獲取用戶手機號碼的方式如下:
前端開發(fā)參考:手機號快速填寫組件 | 微信開放文檔
后端開發(fā)參考:
步驟如下:
①利用手機號快速填寫的功能,將button組件 open-type
的值設置為 getPhoneNumber
②用戶點擊按鈕,彈出申請獲取用戶手機號的彈窗:
③如果用戶點擊允許,則可以通過bindgetphonenumber
事件回調(diào)獲取到動態(tài)令牌code(注意這里的code和wx.login的code不一樣,而且獲取用戶手機號碼不需要提前調(diào)用wx.login獲取code了)
④把code傳到開發(fā)者后臺,并在開發(fā)者后臺調(diào)用微信后臺提供的 phonenumber.getPhoneNumber
接口,消費code來換取用戶手機號
注意一點,獲取手機號的功能好像只允許經(jīng)過認證的小程序使用,如果未認證只能使用測試號才可以
否則便會報錯:
2.前端代碼
開發(fā)環(huán)境:Uniapp框架
微信小程序調(diào)試基礎庫的版本:2.32.1
基本思路:通過按鈕綁定監(jiān)聽事件,獲取用戶授權(quán),得到code,傳到后端換取用戶手機號:
代碼如下:
按鈕:
<button open-type="getPhoneNumber" class="login_button" @getphonenumber="login" v-show="!logged">登錄</button>
login函數(shù):
//登錄按鈕 login(e) { console.log(e) var detail = e.detail if (detail.errMsg == "getPhoneNumber:ok") { console.log("用戶同意授權(quán)") var code = detail.code uni.request({ url: "http://localhost:8081/getPhoneNumber", //調(diào)用接口 method: 'POST', header: { 'content-type': 'application/json' }, data: { code: code, //請求體中封裝code }, success(e) { console.log(e) var userId = e.data.phone_info.purePhoneNumber; uni.setStorage({ key: "userId", data: userId, success() { uni.switchTab({ url: "../../pages/homePage/homepage" }) } }) }, fail(e) { uni.showModal({ title: "錯誤!", content: "網(wǎng)絡錯誤!", complete() { } }) } }) } }
3.后端代碼
開發(fā)環(huán)境:springboot
開發(fā)工具:idea
如果對于idea創(chuàng)建springboot項目有任何問題,可以參考的這一篇文章的后端代碼部分:
代碼展示如下:
@RestController public class PhoneNumberController { @PostMapping("/getPhoneNumber") public Object getPhoneNumber(@RequestBody Map<String,Object> data) { //通過appid和secret來獲取token //WXContent.APPID是自定義的全局變量 String tokenUrl = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", WXContent.APPID, WXContent.APPSECRET); JSONObject token = JSON.parseObject(HttpUtil.get(tokenUrl)); //通過token和code來獲取用戶手機號 String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + token.getString("access_token"); //封裝請求體 Map<String, String> paramMap = new HashMap<>(); paramMap.put("code", data.get("code").toString()); //封裝請求頭 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(paramMap,headers); //通過RestTemplate發(fā)送請求,獲取到用戶手機號碼 RestTemplate restTemplate = new RestTemplate(); ResponseEntity<Object> response = restTemplate.postForEntity(url, httpEntity, Object.class); //返回到前端展示 return response.getBody(); } }
4.結(jié)果展示
在我的前端代碼中有緩存用戶id的功能,如果成功登錄,即可在緩存中查看到用戶id,如下:
5.補充:獲取用戶頭像
微信小程序獲取用戶信息的功能好像挺離譜的,一直改來改去,目前大多是通過點擊頭像申請獲取微信頭像來實現(xiàn)
<button class="mine_avatar_wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"> <image class="mine_image" :src="avatarUrl"></image> </button>
通過open-type
綁定選擇用戶頭像的功能,然后點擊按鈕即可彈出彈窗:
而onChooseAvatar函數(shù)則是獲取到微信頭像后渲染到頁面上
onChooseAvatar(e) { this.avatarUrl = e.detail.avatarUrl uni.setStorageSync('avatarUrl',this.avatarUrl) },
這里選擇使用用戶頭像即可修改用戶頭像為微信頭像:
總結(jié)
到此這篇關(guān)于微信小程序獲取用戶手機號碼的文章就介紹到這了,更多相關(guān)微信小程序獲取用戶手機號碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS關(guān)于刷新頁面的相關(guān)總結(jié)
在本篇內(nèi)容中我們給大家整理了關(guān)于JS刷新頁面的所有相關(guān)知識點以及整理了相關(guān)的技術(shù)文章,大家可以收藏本頁面繼續(xù)深入學習。2018-05-05前端JavaScript實現(xiàn)文件壓縮的全面優(yōu)化指南
JavaScript文件大小直接影響網(wǎng)頁加載速度和用戶體驗,本文將詳細介紹從基礎到高級的各種JavaScript壓縮優(yōu)化技術(shù),小伙伴可以根據(jù)需求進行選擇2025-04-04video.js 實現(xiàn)視頻只能后退不能快進的思路詳解
這篇文章主要介紹了video.js 實現(xiàn)視頻只能后退不能快進的思路詳解,主要思路是點擊進度條需要獲取拖動前的時間點,具體實例代碼大家跟隨小編一起看看吧2018-08-08微信小程序?qū)崙?zhàn)之網(wǎng)易云音樂歌曲詳情頁實現(xiàn)代碼
本文給大家介紹了微信小程序?qū)W習記錄之網(wǎng)易云音樂歌曲詳情頁代碼實現(xiàn),代碼分為html、css和js部分,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05微信小程序使用ucharts在小程序中加入橫屏展示功能的全過程
這篇文章主要給大家介紹了關(guān)于微信小程序使用ucharts在小程序中加入橫屏展示功能的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用微信小程序具有一定的參考學習價值,需要的朋友可以參考下2022-09-09