using Lemon.Common;
using Lemon.WeChat.Model;
using Lemon.WeChat.Services;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Senparc.Weixin.MP;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Web.Configuration;
using System.Web.Http;
using System.Xml;
namespace Lemon.WeChat.WebApi
{
/// <summary>
/// 微信回调
/// </summary>
[RoutePrefix(
"wechat/WeCallback")]
public class WeCallbackController : ApiController
{
private readonly string Token =
"lemon95";
/// <summary>
/// 构造函数
/// </summary>
public WeCallbackController()
{
Token = WebConfigurationManager.AppSettings[
"WeixinToken"] ??
Token;
}
/// <summary>
///
/// </summary>
/// <param name="signature"></param>
/// <param name="timestamp"></param>
/// <param name="nonce"></param>
/// <param name="echostr"></param>
[Route(
"")]
public HttpResponseMessage Get(
string signature,
string timestamp,
string nonce,
string echostr)
{
Logger.Info(string.Format(
"参数:signature:{0},timestamp:{1},nonce:{2},echostr:{3}", signature, timestamp, nonce, echostr));
string returnstr =
string.Empty;
if (CheckSignature.Check(signature, timestamp, nonce, Token))
{
returnstr =
echostr;
}
else
{
returnstr =
"验证失败";
}
HttpResponseMessage result =
new HttpResponseMessage
{
Content =
new StringContent(returnstr, Encoding.UTF8,
"application/x-www-form-urlencoded")
};
return result;
}
/// <summary>
///
/// </summary>
/// <param name="signature"></param>
/// <param name="timestamp"></param>
/// <param name="nonce"></param>
[Route(
"")]
public HttpResponseMessage Post(
string signature,
string timestamp,
string nonce)
{
Logger.Info(string.Format(
"参数:signature:{0},timestamp:{1},nonce:{2}", signature, timestamp, nonce));
string returnstr =
string.Empty;
try
{
if (!
CheckSignature.Check(signature, timestamp, nonce, Token))
{
returnstr =
"验证失败";
}
else
{
var requestContent =
Request.Content.ReadAsStreamAsync().Result;
XmlDocument xmlDoc =
new XmlDocument();
xmlDoc.Load(requestContent);
Logger.Info(xmlDoc.InnerXml);
WeCalbackService svr =
new WeCalbackService();
returnstr =
svr.Callback(xmlDoc);
}
}
catch (Exception ex)
{
Logger.Error("WeCallbackController[Post]发生异常。", ex);
}
HttpResponseMessage result =
new HttpResponseMessage
{
Content =
new StringContent(returnstr, Encoding.UTF8,
"application/x-www-form-urlencoded")
};
return result;
}
/// <summary>
/// 回调通知
/// </summary>
/// <returns></returns>
[HttpPost, Route(
"Notify")]
public HttpResponseMessage Notify()
{
string returnstr =
string.Empty;
try
{
var requestContent =
Request.Content.ReadAsStreamAsync().Result;
XmlDocument xmlDoc =
new XmlDocument();
xmlDoc.Load(requestContent);
WeCalbackService svr =
new WeCalbackService();
returnstr =
svr.Notify(xmlDoc);
}
catch (Exception ex)
{
Logger.Error("WeCallbackController[Notify]发生异常。", ex);
}
HttpResponseMessage result =
new HttpResponseMessage
{
Content =
new StringContent(returnstr, Encoding.UTF8,
"application/x-www-form-urlencoded")
};
return result;
}
}
}
转载于:https://www.cnblogs.com/zoro-zero/p/5420974.html