using Api.MessageReceive.Service;
using CommonUtil;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using Operater.DTO.TopMessage;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using WeiXinKfSDK;
using WeiXinKfSDK.Request;
namespace Api.MessageReceive.Controllers
{
///
/// 微信客服
///
///
[Route("wxback/[controller]/[action]")]
[Route(TopConstants.API_ROUTE)]
public class KfWxController : ControllerBase
{
public static string _token = "u5tsOEqTNBwKcxgGoL";
public static string _aeskey = "XIkbuXu67vOwOcWWpZ1mAdOGxJn6Gs6B6YozPHgFAhE";
public static string _gzhappid = "wxc74c0ee1cf8efafd";
///
/// 微信客服消息
///
///
[AcceptVerbs("GET", "POST")]
public async Task WxKfMessage()
{
if (HttpContext.Request.Method.ToLower() != "post")
{
#region 接口校验
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(_token, _aeskey, "");
string sVerifyMsgSig = HttpContext.Request.Query["msg_signature"];
string sVerifyTimeStamp = HttpContext.Request.Query["timestamp"];
string sVerifyNonce = HttpContext.Request.Query["nonce"];
string sVerifyEchoStr = HttpContext.Request.Query["echostr"].ToString();
int ret = 0;
string sEchoStr = "";
ret = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr, ref sEchoStr);
if (ret != 0)
{
System.Console.WriteLine("ERR: VerifyURL fail, ret: " + ret);
return Content(sEchoStr);
}
return Content(sEchoStr);
#endregion
}
else
{
#region 解析官方请求参数
StreamReader reader = new StreamReader(HttpContext.Request.Body, Encoding.UTF8);
var result = reader.ReadToEndAsync().Result;
reader.Close();
string sReqMsgSig = HttpContext.Request.Query["msg_signature"];
string sReqTimeStamp = HttpContext.Request.Query["timestamp"];
string sReqNonce = HttpContext.Request.Query["nonce"];
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(_token, _aeskey, "");
string sMsg = ""; // 解析之后的明文
var code = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce, result, ref sMsg);
LogUtil.Info($"服务商数据回调xmlConten---{sMsg}", $"wxkf_msg_log日志");
#endregion
WxKfService.WxMessageHandle(sMsg, "wxkf_msg");
}
return Ok("success");
}
///
/// 公众号消息
///
///
[AcceptVerbs("GET", "POST")]
public async Task GZHMessage()
{
if (HttpContext.Request.Method.ToLower() != "post")
{
#region 接口校验
WXBizMsgCryptGZH wxcpt = new WXBizMsgCryptGZH(_token, _aeskey, "");
string sVerifyMsgSig = HttpContext.Request.Query["signature"];
string sVerifyTimeStamp = HttpContext.Request.Query["timestamp"];
string sVerifyNonce = HttpContext.Request.Query["nonce"];
string sVerifyEchoStr = HttpContext.Request.Query["echostr"].ToString();
// LogUtil.Info($"[sVerifyMsgSig]:{sVerifyMsgSig}--[timestamp]:{sVerifyTimeStamp}--[nonce]:{sVerifyNonce}--[echostr]:{sVerifyEchoStr}", "gzh记录");
int ret = 0;
string sEchoStr = "";
ret = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr, ref sEchoStr);
//LogUtil.Info(ret.ToString(), "gzh记录");
//LogUtil.Info(sEchoStr, "gzh记录");
if (ret != 0)
{
System.Console.WriteLine("ERR: VerifyURL fail, ret: " + ret);
return Content(sEchoStr);
}
return Content(sEchoStr);
#endregion
}
else
{
#region 解析官方请求参数
StreamReader reader = new StreamReader(HttpContext.Request.Body, Encoding.UTF8);
var result = reader.ReadToEndAsync().Result;
reader.Close();
string sReqMsgSig = HttpContext.Request.Query["signature"];
string sReqTimeStamp = HttpContext.Request.Query["timestamp"];
string sReqNonce = HttpContext.Request.Query["nonce"];
// LogUtil.Info($"[signature]:{sReqMsgSig}--[timestamp]:{sReqTimeStamp}--[nonce]:{sReqNonce}", "gzh消息记录");
WXBizMsgCryptGZH wxcpt = new WXBizMsgCryptGZH(_token, _aeskey, _gzhappid);
string sMsg = ""; // 解析之后的明文
var code = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce, result, ref sMsg);
LogUtil.Info($"服务商数据回调xmlConten---{sMsg}", $"gzh_msg_log日志");
#endregion
//try
//{
// XmlDocument doc = new XmlDocument();
// XmlNode root;
// doc.LoadXml(sMsg);
// root = doc.FirstChild;
// LogUtil.Info($"[MsgType]:{root["MsgType"].InnerText}--[Content]:{root["Content"].InnerText}","gzh内容");
// if(root["MsgType"].InnerText=="text"&& root["Content"].InnerText == "9001")
// {
// string toUser = root["ToUserName"].InnerText;
// string fromUser= root["FromUserName"].InnerText;
// string CreateTime= root["CreateTime"].InnerText;
// string resXML = $"{sReqTimeStamp}1 ";
// LogUtil.Info(resXML, "gzh回复");
// string sEncryptMsg = "";
// int ret = wxcpt.EncryptMsg(resXML, sReqTimeStamp, sReqNonce, ref sEncryptMsg);
// LogUtil.Info(sEncryptMsg, "gzh回复");
// return Ok(sEncryptMsg);
// }
//}
//catch(Exception e)
//{
// LogUtil.Info(e.ToString(), "gzherror");
//}
WxKfService.WxMessageHandle(sMsg, "gzh_msg");
}
return Ok("success");
}
public async void MsgHandle(string msgType)
{
try
{
if (HttpContext.Request.Method.ToLower() == "post")
{
#region 解析官方请求参数
StreamReader reader = new StreamReader(HttpContext.Request.Body, Encoding.UTF8);
var result = reader.ReadToEndAsync().Result;
reader.Close();
string sReqMsgSig = HttpContext.Request.Query["msg_signature"];
string sReqTimeStamp = HttpContext.Request.Query["timestamp"];
string sReqNonce = HttpContext.Request.Query["nonce"];
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(_token, _aeskey, "");
string sMsg = ""; // 解析之后的明文
var code = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce, result, ref sMsg);
LogUtil.Info($"服务商数据回调xmlConten---{sMsg}", $"{msgType}_log日志");
#endregion
WxKfService.WxMessageHandle(sMsg, msgType);
}
}
catch (Exception e)
{
LogUtil.Info(e.ToString(), "微信客服消息error");
}
}
///
/// 创建公众号菜单
///
///
///
[HttpPost]
public IActionResult CreateGzhMenu([FromBody] CreateMenuRequest request)
{
//获取token
var token = WxKfService.GetGzhToken();
var response = WeiXinKfClient.CreateGzhMenu(request, token);
return Ok(response);
}
///
/// 上传微信素材
///
///
///
[HttpPost]
public IActionResult UploadWxImg([FromBody] UploadWxImgRequest request)
{
//获取token
string imgPath = System.Environment.CurrentDirectory + "/" + request.name;
var token = WxKfService.GetGzhToken();
var response = WeiXinKfClient.UploadWxMedia(imgPath, request.name, token);
return Ok(response);
}
[HttpPost]
public IActionResult GetRid([FromBody] GetRidRequest request)
{
var token = WxKfService.GetGzhToken();
string ridRes = WeiXinKfClient.GetGzhRid(request.Rid, token);
return Ok(ridRes);
}
///
/// 公众号消息
///
///
[HttpPost]
public IActionResult GetAuthCode([FromBody] GetAuthCodeRequest request)
{
//通过code获取accesstoken
var codeRsp = WeiXinKfClient.GetOauth2Token(request.Code);
if (codeRsp.IsNull() || codeRsp.errcode > 0)
{
string errmsg = codeRsp.IsNull() ? "获取token失败" : codeRsp.errmsg;
return Ok(errmsg);
}
//通过accesstoken获取用户信息
var userInfo = WeiXinKfClient.GetGzhUserInfo(codeRsp.access_token, codeRsp.openid);
if (userInfo.IsNull() || userInfo.errcode > 0)
{
string errmsg = userInfo.IsNull() ? "获取用户信息失败" : userInfo.errmsg;
return Ok(errmsg);
}
WxKfService.RecordeGzhInfo(userInfo);
return Ok(true);
}
///
/// 发送公众号模板消息
///
///
///
[HttpPost]
public IActionResult SendGzhTemplateMsg([FromBody] SendTemplateMsgRequest request)
{
var token = WxKfService.GetGzhToken();
var rsp = WeiXinKfClient.SendTemplateMsg(request, token);
return Ok(rsp);
}
}
}