using EzCoreNet.Redis;
|
using Furion;
|
using Furion.DependencyInjection;
|
using Furion.DynamicApiController;
|
using Furion.FriendlyException;
|
using Microsoft.Extensions.Options;
|
using SKIT.FlurlHttpClient.Wechat.Api;
|
using SKIT.FlurlHttpClient.Wechat.Api.Models;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Runtime.CompilerServices;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace EzWechat
|
{
|
|
public class WechatService:IWechatService ,IScoped
|
{
|
private readonly WechatApiClient _client;
|
private readonly IEzCoreNetRedisService _redisService;
|
|
public WechatService(IEzCoreNetRedisService ezCoreNetRedis) {
|
|
/* 以公众号获取用户信息接口为例 */
|
var request = new WechatApiClientOptions()
|
{
|
AppId = App.Configuration["WechatAPP:AppId"],
|
AppSecret = App.Configuration["WechatAPP:AppSecret"],
|
Timeout=3000,
|
|
//ImmeDeliveryAppKey = "即时配送相关服务 AppKey,不用则不填",
|
//ImmeDeliveryAppSecret = "即时配送相关服务 AppSecret,不用则不填",
|
//VirtualPaymentAppKey = "虚拟支付相关服务 AppKey,不用则不填",
|
//MidasOfferId = "米大师 1.0 相关服务 OfferId,不用则不填",
|
//MidasAppKey = "米大师 1.0 相关服务 AppKey,不用则不填",
|
//MidasOfferIdV2 = "米大师 2.0 相关服务 OfferId,不用则不填",
|
//MidasAppKeyV2 = "米大师 2.0 相关服务 AppKey,不用则不填"
|
};
|
_client = WechatApiClientBuilder.Create(request).Build();
|
|
_redisService = ezCoreNetRedis;
|
|
|
}
|
|
public async Task<string> GetOpenID(string jscode)
|
{
|
|
var reques = new SnsComponentJsCode2SessionRequest()
|
{
|
AppId = App.Configuration["WechatAPP:AppId"],
|
|
|
JsCode = jscode
|
};
|
var a= await _client.ExecuteSnsComponentJsCode2SessionAsync(reques);
|
if(a.IsSuccessful())
|
{
|
return a.OpenId;
|
}
|
else
|
{
|
throw Oops.Oh($"{a.ErrorCode}+++{a.ErrorMessage}");
|
}
|
}
|
public async Task<string> GetPhone( string bindgetphonenumber)
|
{
|
|
|
var requs = new WxaBusinessGetUserPhoneNumberRequest()
|
{
|
AccessToken = await GetAccessToken(),
|
Code= bindgetphonenumber
|
|
|
|
};
|
var a= await _client.ExecuteWxaBusinessGetUserPhoneNumberAsync(requs);
|
if (a.IsSuccessful())
|
return a.PhoneInfo.PurePhoneNumber;
|
else
|
{
|
throw Oops.Oh($"{a.ErrorCode}+++{a.ErrorMessage}");
|
}
|
}
|
/// <summary>
|
/// 获取AccToken
|
/// </summary>
|
/// <returns></returns>
|
private async Task<string> GetAccessToken()
|
{
|
string key = _redisService.Get<string>("WxAccessToken");
|
if(string.IsNullOrEmpty(key))
|
{
|
var a = await _client.ExecuteCgibinTokenAsync(new CgibinTokenRequest { });
|
if(!a.IsSuccessful())
|
{
|
throw Oops.Oh($"{a.ErrorCode}+++{a.ErrorMessage}");
|
}
|
key=a.AccessToken;
|
_redisService.Add<string>("WxAccessToken", a.AccessToken, 7000);
|
}
|
return key;
|
}
|
|
}
|
}
|