uniapp+.net?core實(shí)現(xiàn)微信小程序獲取手機(jī)號(hào)功能
獲取手機(jī)號(hào)
從基礎(chǔ)庫(kù) 2.21.2 開始,對(duì)獲取手機(jī)號(hào)的接口進(jìn)行了安全升級(jí),以下是新版本接口使用指南。( 舊版本接口 目前可以繼續(xù)使用,但建議開發(fā)者使用新版本接口,以增強(qiáng)小程序安全性)
因?yàn)樾枰脩糁鲃?dòng)觸發(fā)才能發(fā)起獲取手機(jī)號(hào)接口,所以該功能不由 API 來(lái)調(diào)用,需用 button 組件的點(diǎn)擊來(lái)觸發(fā)。另外,新版本接口 不再 需要提前調(diào)用 wx.login
進(jìn)行登錄。
注意:
- 目前該接口針對(duì)非個(gè)人開發(fā)者,且完成了認(rèn)證的小程序開放(不包含海外主體)。需謹(jǐn)慎使用,若用戶舉報(bào)較多或被發(fā)現(xiàn)在不必要場(chǎng)景下使用,微信有權(quán)永久回收該小程序的該接口權(quán)限;
- 在使用該接口時(shí),用戶可使用微信綁定手機(jī)號(hào)進(jìn)行授權(quán),也添加非微信綁定手機(jī)號(hào)進(jìn)行授權(quán)。若開發(fā)者僅通過(guò)手機(jī)號(hào)作為業(yè)務(wù)關(guān)聯(lián)憑證,在重點(diǎn)場(chǎng)景可適當(dāng)增加短信驗(yàn)證邏輯。
使用方法
需要將 button 組件 open-type
的值設(shè)置為 getPhoneNumber
,當(dāng)用戶點(diǎn)擊并同意之后,可以通過(guò) bindgetphonenumber
事件回調(diào)獲取到動(dòng)態(tài)令牌 code
,然后把 code
傳到開發(fā)者后臺(tái),并在開發(fā)者后臺(tái)調(diào)用微信后臺(tái)提供的 phonenumber.getPhoneNumber 接口,消費(fèi) code
來(lái)?yè)Q取用戶手機(jī)號(hào)。每個(gè) code
有效期為5分鐘,且只能消費(fèi)一次。
注: getPhoneNumber
返回的 code
與 wx.login
返回的 code
作用是不一樣的,不能混用。
前端
template
使用getphonenumber獲取回調(diào)code
//小程序?qū)懛? <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button> //uni-app寫法 <button class="wx-login" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">微信用戶一鍵登錄</button>
js
調(diào)用服務(wù)器的url,消費(fèi) code
來(lái)?yè)Q取用戶手機(jī)號(hào)
methods: { getPhoneNumber: function(e) { var that = this; var userPhone = uni.getStorageSync('userPhone'); if(userPhone != '') { getApp().globalData.userPhone = userPhone; uni.navigateTo({ url: 'personal' }); return; } if (e.detail.errMsg == "getPhoneNumber:ok") { //端口號(hào)是由后端服務(wù)器生成 wx.request({ url: '后端服務(wù)URL', data: { code: e.detail.code }, method: "get", success: function(res) { uni.setStorageSync('userPhone', res.data); getApp().globalData.userPhone = res.data; uni.navigateTo({ url: 'personal' }); }, fail: function(res) { console.log(res.errMsg) } }) } } }
后端
后端使用.net core配置api
appsetting配置
"Wx": { "appid": "", "secret": "", "baseurl": "https://api.weixin.qq.com/", "getToken": "cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", "getuserphonenumber": "wxa/business/getuserphonenumber?access_token={0}" }
Startup.cs
注冊(cè)HttpClient調(diào)用微信API
public void ConfigureServices(IServiceCollection services) { services.AddHttpClient("WxClient", config => { config.BaseAddress = new Uri(Configuration["Wx:baseurl"]); config.DefaultRequestHeaders.Add("Accept", "application/json"); }); }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { GlobalContext.HttpClientFactory = app.ApplicationServices.GetService<IHttpClientFactory>(); }
GlobalContext.cs
獲取token方法與獲取手機(jī)號(hào)方法,通過(guò)HTTPClient調(diào)用獲取Token方法,用Token和Code調(diào)用 getuserphonenumber獲取用戶手機(jī)號(hào)
using System; using System.Reflection; using System.Text; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.Hosting;using Microsoft.AspNetCore.Http; using System.Net.Http; using Newtonsoft.Json; namespace YiSha.Util { public class GlobalContext {public static IHttpClientFactory HttpClientFactory { get; set; } public static IConfiguration Configuration { get; set; }public static string Token { get; set; } public static DateTime TimeOutDate { get; set; } /// <summary> /// 獲取Token /// </summary> /// <returns>Item1 Token;Item2 是否成功</returns> public static Result GetToken() { //判斷Token是否存在 以及Token是否在有效期內(nèi) if (string.IsNullOrEmpty(Token) || TimeOutDate > DateTime.Now) { //構(gòu)造請(qǐng)求鏈接 var requestBuild = Configuration["Wx:getToken"]; requestBuild = string.Format(requestBuild, Configuration["Wx:appid"], Configuration["Wx:secret"] ); using (var wxClient = HttpClientFactory.CreateClient("WxClient")) { var httpResponse = wxClient.GetAsync(requestBuild).Result; var dynamic = JsonConvert.DeserializeObject<dynamic>( httpResponse.Content.ReadAsStringAsync().Result ); if (dynamic.errmsg == null)//刷新Token { Token = dynamic.access_token; var expires_in = Convert.ToDouble(dynamic.expires_in); TimeOutDate = DateTime.Now.AddSeconds(expires_in); return new Result(Token); } else { return new Result(errMsg:dynamic.errmsg); } } } else { return new Result(Token); } } public static Result GetUserPhoneNumber(string code) { var token = GetToken(); if(!token.isSuccess) { return token; } //構(gòu)造請(qǐng)求鏈接 var requestBuild = Configuration["Wx:getuserphonenumber"]; requestBuild = string.Format(requestBuild, token.data); //建立HttpClient using (var wxClient = HttpClientFactory.CreateClient("WxClient")) { string content = $"{{\"code\":\"[code]\"}}"; byte[] data = Encoding.UTF8.GetBytes(content); var bytearray = new ByteArrayContent(data); var httpResponse = wxClient.PostAsync(requestBuild, bytearray).Result; var dynamic = JsonConvert.DeserializeObject<dynamic>( httpResponse.Content.ReadAsStringAsync().Result ); if (dynamic.errmsg == "ok") return new Result(dynamic.phone_info.phoneNumber.ToString()); else return new Result(errMsg: dynamic.errmsg.ToString()); } } /// <summary> /// 返回消息 /// </summary> public class Result { public Result() { } /// <summary> /// 正確 /// </summary> /// <param name="data"></param> public Result(string data) { this.data = data; this.isSuccess = true; } /// <summary> /// 錯(cuò)誤 /// </summary> /// <param name="errMsg"></param> /// <param name="isSuccess"></param> public Result(string errMsg,bool isSuccess = false) { this.errMsg = errMsg; this.isSuccess = isSuccess; } public string data { get; set; } public string errMsg { get; set; } public bool isSuccess { get; set; } } } }
調(diào)用
[HttpGet] public string GetPhone(string code) { var phone = GlobalContext.GetUserPhoneNumber(code); if(!phone.isSuccess) { //錯(cuò)誤處理 } return phone.data; }
獲取截圖
文檔傳送門:
獲取手機(jī)號(hào): https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
到此這篇關(guān)于uniapp+.net core實(shí)現(xiàn)微信小程序獲取手機(jī)號(hào)的文章就介紹到這了,更多相關(guān)uniapp .net core小程序獲取手機(jī)號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- uniapp抖音小程序一鍵獲取用戶手機(jī)號(hào)的示例代碼
- UNIAPP實(shí)現(xiàn)微信小程序登錄授權(quán)和手機(jī)號(hào)授權(quán)功能(uniapp做微信小程序)
- 微信小程序獲取用戶手機(jī)號(hào)碼詳細(xì)教程(前端+后端)
- 微信小程序中獲取用戶手機(jī)號(hào)授權(quán)登錄詳細(xì)步驟
- uniapp微信小程序授權(quán)登錄并獲取手機(jī)號(hào)的方法
- PHP配合微信小程序?qū)崿F(xiàn)獲取手機(jī)號(hào)碼詳解
- 微信小程序登錄方法之授權(quán)登陸及獲取微信用戶手機(jī)號(hào)
- 微信小程序獲取用戶手機(jī)號(hào)碼的詳細(xì)步驟
- 微信小程序?qū)崿F(xiàn)手機(jī)號(hào)碼驗(yàn)證
- 抖音小程序一鍵獲取手機(jī)號(hào)的實(shí)現(xiàn)思路
相關(guān)文章
Visual Studio 2017+OpenCV環(huán)境搭建教程
這篇文章主要為大家詳細(xì)介紹了Visual Studio 2017+OpenCV環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03淺談Asp.Net母版頁(yè)和內(nèi)容頁(yè)運(yùn)行機(jī)制
這篇文章主要介紹了淺談Asp.Net母版頁(yè)和內(nèi)容頁(yè)運(yùn)行機(jī)制,詳細(xì)的介紹了母版頁(yè)和內(nèi)容頁(yè)的運(yùn)行過(guò)程步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11.net MVC 連接數(shù)據(jù)本地?cái)?shù)據(jù)庫(kù)三種方法總結(jié)
這篇文章主要介紹了.net MVC 連接數(shù)據(jù)本地?cái)?shù)據(jù)庫(kù)三種方法總結(jié)的相關(guān)資料,這里附有代碼實(shí)例,需要的朋友可以參考下2016-12-12在Asp.net用C#建立動(dòng)態(tài)Excel
在Asp.net用C#建立動(dòng)態(tài)Excel...2006-09-09VS2019下opencv4.1.2配置圖文教程(永久配置)
這篇文章主要介紹了VS2019下opencv4.1.2配置圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11ASP.NET檢測(cè)到不安全 Request.Form 值解決方案匯總
這篇文章主要介紹了ASP.NET檢測(cè)到不安全 Request.Form 值解決方案匯總 ,十分的全面,需要的朋友可以參考下2015-06-06C#后臺(tái)調(diào)用前臺(tái)javascript的五種方法小結(jié)
于項(xiàng)目需要,用到其他項(xiàng)目組用VC開發(fā)的組件,在web后臺(tái)代碼無(wú)法訪問(wèn)這個(gè)組件,所以只好通過(guò)后臺(tái)調(diào)用前臺(tái)的javascript,從而操作這個(gè)組件。2010-12-12