中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用uniapp+.net?core實現微信小程序獲取手機號功能

發布時間:2022-08-30 09:59:49 來源:億速云 閱讀:223 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“怎么用uniapp+.net core實現微信小程序獲取手機號功能”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么用uniapp+.net core實現微信小程序獲取手機號功能”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    獲取手機號

    從基礎庫 2.21.2 開始,對獲取手機號的接口進行了安全升級,以下是新版本接口使用指南。( 舊版本接口 目前可以繼續使用,但建議開發者使用新版本接口,以增強小程序安全性)

    因為需要用戶主動觸發才能發起獲取手機號接口,所以該功能不由 API 來調用,需用 button 組件的點擊來觸發。另外,新版本接口 不再 需要提前調用 wx.login 進行登錄。

    注意:

    • 目前該接口針對非個人開發者,且完成了認證的小程序開放(不包含海外主體)。需謹慎使用,若用戶舉報較多或被發現在不必要場景下使用,微信有權永久回收該小程序的該接口權限;

    • 在使用該接口時,用戶可使用微信綁定手機號進行授權,也添加非微信綁定手機號進行授權。若開發者僅通過手機號作為業務關聯憑證,在重點場景可適當增加短信驗證邏輯。

    使用方法

    需要將 button 組件  open-type 的值設置為  getPhoneNumber ,當用戶點擊并同意之后,可以通過  bindgetphonenumber 事件回調獲取到動態令牌 code ,然后把 code 傳到開發者后臺,并在開發者后臺調用微信后臺提供的  phonenumber.getPhoneNumber 接口,消費 code 來換取用戶手機號。每個 code 有效期為5分鐘,且只能消費一次。

    注: getPhoneNumber 返回的  code 與  wx.login 返回的  code 作用是不一樣的,不能混用。

    前端

    template

    使用getphonenumber獲取回調code

    //小程序寫法
    <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
    //uni-app寫法
    <button class="wx-login" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">微信用戶一鍵登錄</button>

    js

    調用服務器的url,消費 code 來換取用戶手機號

    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") {
                        //端口號是由后端服務器生成
                        wx.request({
                            url: '后端服務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調用微信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方法與獲取手機號方法,通過HTTPClient調用獲取Token方法,用Token和Code調用 getuserphonenumber獲取用戶手機號

    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是否在有效期內
                if (string.IsNullOrEmpty(Token) || TimeOutDate > DateTime.Now)
                {
                    //構造請求鏈接
                    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;
                }
                //構造請求鏈接
                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; }
            }
        }
    }

    調用

    [HttpGet]
            public string GetPhone(string code)
            {
                var phone = GlobalContext.GetUserPhoneNumber(code);
                if(!phone.isSuccess)
                {
                    //錯誤處理
                }
                return phone.data;
            }

    獲取截圖

    怎么用uniapp+.net?core實現微信小程序獲取手機號功能

    怎么用uniapp+.net?core實現微信小程序獲取手機號功能

    讀到這里,這篇“怎么用uniapp+.net core實現微信小程序獲取手機號功能”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    栖霞市| 台中县| 元朗区| 郧西县| 阿坝| 中西区| 濮阳县| 静海县| 施秉县| 靖安县| 青川县| 元谋县| 阳曲县| 东至县| 邵阳市| 康平县| 商都县| 扎囊县| 筠连县| 资中县| 广饶县| 响水县| 泉州市| 建平县| 大同市| 通海县| 公安县| 阿拉善右旗| 台东市| 福州市| 温宿县| 望江县| 巴中市| 喀喇沁旗| 枣庄市| 波密县| 怀远县| 岑巩县| 皮山县| 山西省| 临江市|