91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

怎么用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

    容城县| 大英县| 康马县| 宜君县| 长岛县| 连山| 宁河县| 盘山县| 利辛县| 富顺县| 沙湾县| 乌苏市| 泸西县| 沂南县| 晋中市| 阳朔县| 沈阳市| 镇康县| 大城县| 正阳县| 洛川县| 全南县| 韶关市| 芒康县| 抚宁县| 中牟县| 云安县| 花莲市| 安平县| 乐清市| 曲阳县| 达尔| 墨竹工卡县| 隆昌县| 凤凰县| 衡东县| 阳新县| 卢龙县| 彭州市| 临江市| 独山县|