MeiRiYiCheng_1_old/YBDevice.NApi/Handler/EventService.cs

105 lines
4.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Senparc.Weixin;
using Senparc.Weixin.Exceptions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace YBDevice.NApi
{
/// <summary>
/// 全局微信事件有关的处理程序
/// </summary>
public class EventService
{
/// <summary>
/// 异常消息处理
/// </summary>
/// <param name="ex"></param>
/// <returns></returns>
public void ConfigOnWeixinExceptionFunc(WeixinException ex)
{
Senparc.Weixin.WeixinTrace.SendCustomLog("进入 ConfigOnWeixinExceptionFunc() 方法", ex.Message);
try
{
var appId = Config.SenparcWeixinSetting.WeixinAppId;
string openId = "oyXoU0r5wvkdVk0O82XdpzJ1lZcU";//收到通知的管理员OpenId
var host = "A1 / AccessTokenOrAppId" + (ex.AccessTokenOrAppId ?? "null");
string service = null;
string message = ex.Message;
var status = ex.GetType().Name;
//var remark = "\r\n这是一条通过OnWeixinExceptionFunc事件发送的异步模板消息";
//string url = "https://github.com/JeffreySu/WeiXinMPSDK/blob/master/Samples/netcore3.0-mvc/Senparc.Weixin.Sample.NetCore3/Startup.cs#L410";//需要点击打开的URL
var sendTemplateMessage = true;
if (ex is ErrorJsonResultException)
{
var jsonEx = (ErrorJsonResultException)ex;
service = $"{jsonEx.JsonResult?.errcode}:{jsonEx.JsonResult?.errmsg} - {jsonEx.Url?.Replace("https://api.weixin.qq.com/cgi-bin", "ApiUrl")}".Substring(0, 30);
message = jsonEx.Message;
//需要忽略的类型
var ignoreErrorCodes = new[]
{
ReturnCode.access_token时AppSecret错误或者access_token无效,
ReturnCode.access_token超时,
ReturnCode.template_id不正确,
ReturnCode.access_token参数,
ReturnCode.,
ReturnCode.api功能未授权,
ReturnCode.api,
ReturnCode.invalid_parameter,
ReturnCode.,
ReturnCode.,//43004
ReturnCode.,//43004 - out of response count limit一般只允许连续接收20条客服消息
//其他更多可能的情况
};
if (ignoreErrorCodes.Contains(jsonEx.JsonResult.errcode))
{
sendTemplateMessage = false;//防止无限递归,这种请求下不发送消息
}
//TODO:防止更多的接口自身错误导致的无限递归。
//记录异常
Senparc.Weixin.WeixinTrace.SendCustomLog("发生异常", ex.Message + "\r\n" + ex.StackTrace);
}
else
{
if (ex.Message.StartsWith("openid:"))
{
openId = ex.Message.Split(':')[1];//发送给指定OpenId
}
service = "WeixinException";
message = ex.Message;
}
if (sendTemplateMessage) // DPBMARK MP
{
//int sleepSeconds = 3;
//Thread.Sleep(sleepSeconds * 1000);
//string templateid = Configs.GetString("WXErrorTemplateId");
//var data = new WeixinTemplate_ExceptionAlert(string.Format("微信发生异常(延时{0}秒)", sleepSeconds), host, service, status, message, remark, templateid);
//修改OpenId、启用以下代码后即可收到模板消息
//if (!string.IsNullOrEmpty(openId))
//{
// var result = Senparc.Weixin.MP.AdvancedAPIs.TemplateApi.SendTemplateMessageAsync(appId, openId, data.TemplateId,
// url, data);
// Task.WaitAll(new[] { result });
// if (result.IsFaulted)
// {
// Senparc.Weixin.WeixinTrace.SendCustomLog("OnWeixinExceptionFunc过程模板消息发送异常", result.Exception?.Message + "\r\n" + result.Exception?.StackTrace);
// }
//}
} // DPBMARK_END
}
catch (Exception e)
{
WeixinTrace.SendCustomLog("OnWeixinExceptionFunc过程错误", e.Message);
}
}
}
}