欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2022年08月29日 16:11:02   作者:微風(fēng)吹過(guò)~  
這篇文章主要介紹了uniapp+.net?core實(shí)現(xiàn)微信小程序獲取手機(jī)號(hào)功能,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

獲取手機(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論