| | |
| | | using Furion; |
| | | 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 |
| | | public class WechatService:IWechatService ,IScoped |
| | | { |
| | | private readonly WechatApiClient _client; |
| | | private readonly IEzCoreNetRedisService _redisService; |
| | | |
| | | public WechatService() { |
| | | |
| | | 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,不用则不填", |
| | |
| | | //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; |
| | | } |
| | | |
| | | } |
| | | } |