uniapp+.net?core实现微信小程序获取手机号功能(uniapp开发安卓app教程)满满干货

随心笔谈2年前发布 admin
166 0 0

文章摘要

这篇文章主要介绍了一个C#类库文件,包含一个静态类`GlobalContext`和一个`Result`类,以及两个静态方法`GetToken`和`GetUserPhoneNumber`。 1. **GlobalContext类**: - 包含静态属性`HttpClientFactory`、`Configuration`、`Token`、`TimeOutDate`。 - 提供了获取Token的逻辑,包括检查Token的有效性和时间是否过期。 - 使用`HttpClientFactory.CreateClient`发送HTTP GET请求,获取新的Token和过期时间,并处理可能的错误返回。 2. **Result类**: - 包含两个构造函数,分别处理成功和错误的情况。 - 提供`data`、`errMsg`和`isSuccess`字段,用于存储返回结果。 3. **GetToken方法**: - 根据配置获取获取Token的URL,使用`Configuration["Wx:getToken"]`。 - 发送获取Token的HTTP GET请求,解析响应并更新Token和过期时间。 - 如果Token为空或已过期,直接返回“Token”;如果获取失败,返回错误信息。 4. **GetUserPhoneNumber方法**: - 使用`GetToken`获取的Token发送HTTP POST请求,格式化用户手机号码请求参数。 - 解析响应,返回用户电话号码或错误信息。 文章整体展示了如何通过静态方法和属性实现微信认证功能,以及如何处理返回结果,适合需要微信认证功能的项目参考。

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; }
}
}
}

© 版权声明

相关文章