92 lines
3.9 KiB
C#
92 lines
3.9 KiB
C#
using Microsoft.Extensions.DependencyInjection;
|
|
using Nirvana.Common;
|
|
using Senparc.NeuChar.Entities;
|
|
using Senparc.NeuChar.Helpers;
|
|
using Senparc.Weixin.MP.Entities;
|
|
using Senparc.Weixin.MP.Entities.Request;
|
|
using Senparc.Weixin.MP.MessageHandlers;
|
|
using System;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using YBDevice.Core;
|
|
using YBDevice.WX.MessageHandlers.CustomMessageHandler;
|
|
using YBDevice.WXApplication.WXInfo;
|
|
|
|
namespace YBDevice.WX.MessageHandlers
|
|
{
|
|
/// <summary>
|
|
/// 开放平台全网发布之前需要做的验证
|
|
/// </summary>
|
|
public class OpenCheckMessageHandler : MessageHandler<CustomMessageContext>
|
|
{
|
|
private string componentAppId = Senparc.Weixin.Config.SenparcWeixinSetting.Component_Appid;
|
|
private string componentSecret = Senparc.Weixin.Config.SenparcWeixinSetting.Component_Secret;
|
|
|
|
public OpenCheckMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0, IServiceProvider serviceProvider = null)
|
|
: base(inputStream, postModel, maxRecordCount, serviceProvider: serviceProvider)
|
|
{
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 消息请求验证
|
|
/// </summary>
|
|
/// <param name="requestMessage"></param>
|
|
/// <returns></returns>
|
|
public override async Task<IResponseMessageBase> OnTextRequestAsync(RequestMessageText requestMessage)
|
|
{
|
|
if (requestMessage.Content == "TESTCOMPONENT_MSG_TYPE_TEXT")
|
|
{
|
|
var responseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>();
|
|
responseMessage.Content = requestMessage.Content + "_callback";//固定为TESTCOMPONENT_MSG_TYPE_TEXT_callback
|
|
return responseMessage;
|
|
}
|
|
|
|
if (requestMessage.Content.StartsWith("QUERY_AUTH_CODE:"))
|
|
{
|
|
var wxService = base.ServiceProvider.GetService<IWXService>();
|
|
string openTicket = await wxService.GetOpenTicketAsync(componentAppId);
|
|
var query_auth_code = requestMessage.Content.Replace("QUERY_AUTH_CODE:", "");
|
|
try
|
|
{
|
|
var component_access_token = Senparc.Weixin.Open.ComponentAPIs.ComponentApi.GetComponentAccessToken(componentAppId, componentSecret, openTicket).component_access_token;
|
|
var oauthResult = Senparc.Weixin.Open.ComponentAPIs.ComponentApi.QueryAuth(component_access_token, componentAppId, query_auth_code);
|
|
|
|
//调用客服接口
|
|
var content = query_auth_code + "_from_api";
|
|
var sendResult = Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendText(oauthResult.authorization_info.authorizer_access_token,
|
|
requestMessage.FromUserName, content);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
var loggerService = base.ServiceProvider.GetService<ILoggerService>();
|
|
var msg = $"{requestMessage.ToJson()}";
|
|
loggerService.AddErrorLogger(ex, msg, "消息请求验证");
|
|
}
|
|
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 事件请求验证
|
|
/// </summary>
|
|
/// <param name="requestMessage"></param>
|
|
/// <returns></returns>
|
|
public override IResponseMessageBase OnEventRequest(IRequestMessageEventBase requestMessage)
|
|
{
|
|
var responseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>();
|
|
responseMessage.Content = requestMessage.Event + "from_callback";
|
|
return responseMessage;
|
|
}
|
|
|
|
public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
|
|
{
|
|
var responseMessage = requestMessage.CreateResponseMessage<ResponseMessageText>();
|
|
responseMessage.Content = "默认消息";
|
|
return responseMessage;
|
|
}
|
|
|
|
}
|
|
}
|