亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

uniapp+.net core實(shí)現(xiàn)微信小程序獲取手機(jī)號(hào)功能

瀏覽:249日期:2022-06-08 13:03:35
目錄
  • 獲取手機(jī)號(hào)
    • 注意:
  • 使用方法
    • 前端
      • template
      • js
    • 后端
      • appsetting配置
      • Startup.cs
      • GlobalContext.cs
      • 調(diào)用
    • 獲取截圖

      獲取手機(jī)號(hào)

      從基礎(chǔ)庫(kù) 2.21.2 開(kāi)始,對(duì)獲取手機(jī)號(hào)的接口進(jìn)行了安全升級(jí),以下是新版本接口使用指南。( 舊版本接口 目前可以繼續(xù)使用,但建議開(kāi)發(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è)人開(kāi)發(fā)者,且完成了認(rèn)證的小程序開(kāi)放(不包含海外主體)。需謹(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)。若開(kāi)發(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 傳到開(kāi)發(fā)者后臺(tái),并在開(kā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 返回的 codewx.login 返回的 code 作用是不一樣的,不能混用。

      前端

      template

      使用getphonenumber獲取回調(diào)code

      //小程序?qū)懛?lt;button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>//uni-app寫法<button 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)文章希望大家以后多多支持!

      標(biāo)簽: ASP.NET
      主站蜘蛛池模板: 国产成人啪午夜精品网站男同 | 亚洲欧美视频在线 | 欧美一级a俄罗斯毛片 | 加勒比上原亚衣在线播放 | 妞干网视频在线观看 | 日韩欧美一区二区在线观看 | 色综合一区 | 亚洲国产一区在线 | c看欧美激情毛片 | 国产高清视频在线免费观看 | 免费观看性行为的视频网站 | 国产精品国产主播在线观看 | 亚洲一区二区三区不卡在线播放 | 一级毛片私人影院老司机 | 一级特黄a视频 | 免费一区二区三区四区五区 | 国产精品自线在线播放 | 亚州精品视频 | 亚洲第一精品福利 | 成人看的一级毛片 | 美女一区二区在线观看 | 2022中文字字幕久亚洲 | 亚洲一区二区三区首页 | 国产1区2区在线观看 | 亚洲欧美日韩中文不卡 | 国产普通话对白精品hd | 亚洲成熟xxxx| 草草草网站 | 日韩在线视频免费观看 | 欧美在线一区二区三区欧美 | 欧美精品在线视频观看 | 国产欧美在线亚洲一区刘亦菲 | 日韩欧美一区二区不卡 | 精品在线免费观看 | 日日噜噜噜夜夜爽爽狠狠 | 欧美一级大黄特黄毛片视频 | 色综合久久98天天综合 | 高清一区二区三区视频 | 久久久久在线观看 | 1024在线看片| 成年男女免费视频网站 |