using System.Net.Http.Json; using Microsoft.Extensions.Options; using Newtonsoft.Json; using Volo.Abp.DependencyInjection; using Yi.Framework.Core.Extensions; using Yi.Framework.WeChat.MiniProgram.HttpModels; using Yi.Framework.WeChat.MiniProgram.Token; namespace Yi.Framework.WeChat.MiniProgram; public class WeChatMiniProgramManager : IWeChatMiniProgramManager, ISingletonDependency { private IMiniProgramToken _weChatToken; private WeChatMiniProgramOptions _options; public WeChatMiniProgramManager(IMiniProgramToken weChatToken, IOptions options) { _weChatToken = weChatToken; _options = options.Value; } /// /// 获取用户openid /// /// /// public async Task Code2SessionAsync(Code2SessionInput input) { string url = "https://api.weixin.qq.com/sns/jscode2session"; var req = new Code2SessionRequest(); req.js_code = input.js_code; req.secret = _options.AppSecret; req.appid = _options.AppID; using (HttpClient httpClient = new HttpClient()) { string queryString = req.ToQueryString(); var builder = new UriBuilder(url); builder.Query = queryString; HttpResponseMessage response = await httpClient.GetAsync(builder.ToString()); var responseBody = await response.Content.ReadFromJsonAsync(); responseBody.ValidateSuccess(); return responseBody; } } /// /// 发送模板订阅消息 /// /// public async Task SendSubscribeNoticeAsync(SubscribeNoticeInput input) { var token = await _weChatToken.GetTokenAsync(); string url = $"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={token}"; var req = new SubscribeNoticeRequest { touser = input.touser, template_id = input.template_id, page = input.page, data = input.data, miniprogram_state = _options.Notice?.State??"formal" }; req.template_id=req.template_id?? _options.Notice?.TemplateId; using (HttpClient httpClient = new HttpClient()) { var body =new StringContent(JsonConvert.SerializeObject(req)); HttpResponseMessage response = await httpClient.PostAsync(url, body); var responseBody = await response.Content.ReadFromJsonAsync(); responseBody.ValidateSuccess(); } } }