uniapp+.net?core實現(xiàn)微信小程序獲取手機(jī)號功能
獲取手機(jī)號
從基礎(chǔ)庫 2.21.2 開始,對獲取手機(jī)號的接口進(jìn)行了安全升級,以下是新版本接口使用指南。( 舊版本接口 目前可以繼續(xù)使用,但建議開發(fā)者使用新版本接口,以增強(qiáng)小程序安全性)
因為需要用戶主動觸發(fā)才能發(fā)起獲取手機(jī)號接口,所以該功能不由 API 來調(diào)用,需用 button 組件的點擊來觸發(fā)。另外,新版本接口 不再 需要提前調(diào)用 wx.login 進(jìn)行登錄。
注意:
- 目前該接口針對非個人開發(fā)者,且完成了認(rèn)證的小程序開放(不包含海外主體)。需謹(jǐn)慎使用,若用戶舉報較多或被發(fā)現(xiàn)在不必要場景下使用,微信有權(quán)永久回收該小程序的該接口權(quán)限;
- 在使用該接口時,用戶可使用微信綁定手機(jī)號進(jìn)行授權(quán),也添加非微信綁定手機(jī)號進(jìn)行授權(quán)。若開發(fā)者僅通過手機(jī)號作為業(yè)務(wù)關(guān)聯(lián)憑證,在重點場景可適當(dāng)增加短信驗證邏輯。
使用方法
需要將 button 組件 open-type 的值設(shè)置為 getPhoneNumber ,當(dāng)用戶點擊并同意之后,可以通過 bindgetphonenumber 事件回調(diào)獲取到動態(tài)令牌 code ,然后把 code 傳到開發(fā)者后臺,并在開發(fā)者后臺調(diào)用微信后臺提供的 phonenumber.getPhoneNumber 接口,消費 code 來換取用戶手機(jī)號。每個 code 有效期為5分鐘,且只能消費一次。
注: 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,消費 code 來換取用戶手機(jī)號
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") {
//端口號是由后端服務(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
注冊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ī)號方法,通過HTTPClient調(diào)用獲取Token方法,用Token和Code調(diào)用 getuserphonenumber獲取用戶手機(jī)號
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)造請求鏈接
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)造請求鏈接
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>
/// 錯誤
/// </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)
{
//錯誤處理
}
return phone.data;
}獲取截圖


文檔傳送門:
獲取手機(jī)號: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
到此這篇關(guān)于uniapp+.net core實現(xiàn)微信小程序獲取手機(jī)號的文章就介紹到這了,更多相關(guān)uniapp .net core小程序獲取手機(jī)號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- uniapp抖音小程序一鍵獲取用戶手機(jī)號的示例代碼
- UNIAPP實現(xiàn)微信小程序登錄授權(quán)和手機(jī)號授權(quán)功能(uniapp做微信小程序)
- 微信小程序獲取用戶手機(jī)號碼詳細(xì)教程(前端+后端)
- 微信小程序中獲取用戶手機(jī)號授權(quán)登錄詳細(xì)步驟
- uniapp微信小程序授權(quán)登錄并獲取手機(jī)號的方法
- PHP配合微信小程序?qū)崿F(xiàn)獲取手機(jī)號碼詳解
- 微信小程序登錄方法之授權(quán)登陸及獲取微信用戶手機(jī)號
- 微信小程序獲取用戶手機(jī)號碼的詳細(xì)步驟
- 微信小程序?qū)崿F(xiàn)手機(jī)號碼驗證
- 抖音小程序一鍵獲取手機(jī)號的實現(xiàn)思路
相關(guān)文章
Visual Studio 2017+OpenCV環(huán)境搭建教程
這篇文章主要為大家詳細(xì)介紹了Visual Studio 2017+OpenCV環(huán)境搭建教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
.net MVC 連接數(shù)據(jù)本地數(shù)據(jù)庫三種方法總結(jié)
這篇文章主要介紹了.net MVC 連接數(shù)據(jù)本地數(shù)據(jù)庫三種方法總結(jié)的相關(guān)資料,這里附有代碼實例,需要的朋友可以參考下2016-12-12
VS2019下opencv4.1.2配置圖文教程(永久配置)
這篇文章主要介紹了VS2019下opencv4.1.2配置圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11
ASP.NET檢測到不安全 Request.Form 值解決方案匯總
這篇文章主要介紹了ASP.NET檢測到不安全 Request.Form 值解決方案匯總 ,十分的全面,需要的朋友可以參考下2015-06-06
C#后臺調(diào)用前臺javascript的五種方法小結(jié)
于項目需要,用到其他項目組用VC開發(fā)的組件,在web后臺代碼無法訪問這個組件,所以只好通過后臺調(diào)用前臺的javascript,從而操作這個組件。2010-12-12

