using MyCode.Project.Domain.Config;
using MyCode.Project.Domain.Message.Act.User;
using MyCode.Project.Domain.Message.Request.Activity;
using MyCode.Project.Domain.Message.Request.Member;
using MyCode.Project.Domain.Message.Request.User;
using MyCode.Project.Domain.Message.Response.CardCover;
using MyCode.Project.Domain.Message.Response.Goods;
using MyCode.Project.Domain.Message.Response.LiveVideo;
using MyCode.Project.Domain.Message.Response.Member;
using MyCode.Project.Domain.Message.Response.Wechat;
using MyCode.Project.Infrastructure.Common;
using MyCode.Project.Services;
using MyCode.Project.Services.CustomMessageHandler;
using MyCode.Project.WebApi.App_Filter;
using Senparc.NeuChar.Context;
using Senparc.NeuChar.Entities;
using Senparc.Weixin.MP;
using Senparc.Weixin.MP.MessageHandlers;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web.Http;
using System.Xml.Linq;
namespace MyCode.Project.WebApi.Areas.Member.Controllers
{
///
/// 微信公众号 相关接口
///
public class WeChatPublicController : BaseMemberController
{
#region 初始化
private readonly IWorkProcessService _workProcessService;
public WeChatPublicController(IWorkProcessService workProcessService)
{
_workProcessService = workProcessService;
}
#endregion
#region WeCallBack(微信回调)
///
/// 微信回调1
///
[AllowAnonymous, IgnoreResultHandle, HttpGet, HttpPost, ActionName("WeCallBack")]
public void WeCallBack()
{
var context = CurrentHttpContext;
string signature = context.Request["signature"];
string timestamp = context.Request["timestamp"];
string nonce = context.Request["nonce"];
string echostr = context.Request["echostr"];
//get method -检验是否微信的回调,不是则不执行
//if (CheckSignature.Check(signature, timestamp, nonce, SystemConfig.WeToken))
//{
// string postStr = @"
//
//1576747572
//
//
//
//";
Stream s = System.Web.HttpContext.Current.Request.InputStream;//此方法是对System.Web.HttpContext.Current.Request.InputStream的封装,可直接代码
string postStr = "";
if (s != null && s.Length > 0)
{
s.Position = 0; //当你读取完之后必须把stream的读取位置设为开始
StreamReader reader = new StreamReader(s, System.Text.Encoding.UTF8);
postStr = reader.ReadToEnd().ToString();
}
//byte[] b = new byte[s.Length];
//s.Read(b, 0, (int)s.Length);
//string postStr = Encoding.UTF8.GetString(b);
//LogHelper.Info(postStr);
var weixinContext = MessageHandler>.GlobalWeixinContext.MessageQueue.FirstOrDefault();
var recordCount = MessageHandler>.GlobalWeixinContext.MaxRecordCount;
if (string.IsNullOrEmpty(postStr))
{
context.Response.Output.Write(echostr);
context.Response.End();
return;
}
//var doc = XDocument.Parse(postStr);
_workProcessService.Add(Guid.Parse("00000000-0000-0000-0000-000000000009"), "MemberWeChatPublicCallBack","会员公众号回调", postStr,2);
//var maxRecordCount = 1;
//var messageHandler = new CustomMessageHandler(doc, null, maxRecordCount);
//messageHandler.OmitRepeatedMessage = true;
//messageHandler.Execute();
//LogHelper.Info("RequestMessages:" + messageHandler.RequestMessage);
//if (messageHandler.TextResponseMessage != null)
//{
// //LogHelper.Info("ResponseMessages:" + messageHandler.TextResponseMessage);
// context.Response.Output.Write(messageHandler.TextResponseMessage);
// context.Response.End();
//}
//new SuccessResponseMessage();
context.Response.Output.Write(new SuccessResponseMessage());
context.Response.End();
//}
return;
}
#endregion
}
}