using SKIT.FlurlHttpClient.Wechat.Api.Events;
namespace Admin.NET.Core.Service;
///
/// 微信通知服务
///
[ApiDescriptionSettings(Order = 250)]
public class SysWechatNotifyService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository _sysWechatUserRep;
private readonly WechatApiClient _wechatApiClient;
public SysWechatNotifyService(SqlSugarRepository sysWechatUserRep,
WechatApiHttpClient wechatApiHttpClient)
{
_sysWechatUserRep = sysWechatUserRep;
_wechatApiClient = wechatApiHttpClient.CreateWxOpenClient();
}
public string VerifyMessage(string appId, string timestamp, string nonce, string signature, string echoString)
{
// 验证服务器推送
// 文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html
bool valid = _wechatApiClient.VerifyEventSignatureForEcho(callbackTimestamp: timestamp, callbackNonce: nonce, callbackSignature: signature);
if (!valid)
{
return "fail";
}
return echoString;
}
public async Task ReceiveMessage(string appId)
{
// 接收服务器推送
// 文档:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html
using var reader = new StreamReader(App.HttpContext.Request.Body, Encoding.UTF8);
string content = await reader.ReadToEndAsync();
var msgType = _wechatApiClient.DeserializeEventFromXml(content).MessageType?.ToUpper();
switch (msgType)
{
case "TEXT":
{
var eventModel = _wechatApiClient.DeserializeEventFromXml(content);
//_logger.LogInformation("接收到微信推送的文本消息,消息内容:{0}", eventModel.Content);
// 后续处理略
}
break;
case "IMAGE":
{
var eventModel = _wechatApiClient.DeserializeEventFromXml(content);
//_logger.LogInformation("接收到微信推送的图片消息,图片链接:{0}", eventModel.PictureUrl);
// 后续处理略
}
break;
default:
{
// 其他情况略
}
break;
}
return "success";
}
}