颐和api

HomeController.cs 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using System.Threading.Tasks;
  5. using Api.SignToken;
  6. using MadRunFabric.Common;
  7. using Microsoft.AspNetCore.Hosting;
  8. using Microsoft.AspNetCore.Mvc;
  9. using Microsoft.Extensions.Configuration;
  10. using NLog;
  11. using Senparc.Weixin.MP;
  12. using Senparc.Weixin.MP.Containers;
  13. using Senparc.Weixin.MP.Entities.Request;
  14. using Senparc.Weixin.MP.Helpers;
  15. using Senparc.Weixin.MP.MvcExtension;
  16. using WechatApi.MessageHandlers;
  17. namespace WechatApi.Controllers
  18. {
  19. [ApiVersion("6.0")]
  20. [Produces("application/json")]
  21. [Route("api/Home/[action]")]
  22. public class HomeController : BaseController
  23. {
  24. private readonly string Token;
  25. private readonly string AppId;
  26. private readonly string AppSecret;
  27. private readonly string EncodingAESKey;
  28. static Logger Logger = LogManager.GetCurrentClassLogger();
  29. private readonly ISignTokenService _signTokenService;
  30. private IHostingEnvironment _host;
  31. private IConfiguration _configuration;
  32. public HomeController(IConfiguration configuration, ISignTokenService signTokenService, IHostingEnvironment host)
  33. {
  34. Token = configuration["WechatStatic:Token"];
  35. AppId = configuration["WechatStatic:AppId"];
  36. AppSecret = configuration["WechatStatic:AppSecret"];
  37. EncodingAESKey = configuration["WechatStatic:EncodingAESKey"];
  38. _configuration = configuration;
  39. _signTokenService = signTokenService;
  40. _host = host;
  41. }
  42. /// <summary>
  43. /// 微信开发验证
  44. /// </summary>
  45. /// <param name="signature"></param>
  46. /// <param name="timestamp"></param>
  47. /// <param name="nonce"></param>
  48. /// <param name="echostr"></param>
  49. /// <returns></returns>
  50. [HttpGet]
  51. public IActionResult Verify(string signature, string timestamp, string nonce, string echostr)
  52. {
  53. if (CheckSignature.Check(signature, timestamp, nonce, Token))
  54. {
  55. return Content(echostr, "application/x-www-form-urlencoded", Encoding.UTF8); //返回随机字符串则表示验证通过
  56. }
  57. return Content($"failed:{signature},{CheckSignature.GetSignature(timestamp, nonce, Token) }。如果您在浏览器中看到这条信息,表明此Url可以填入微信后台。");
  58. }
  59. /// <summary>
  60. /// 用户发送消息后,微信平台自动Post一个请求到这里,并等待响应XML。
  61. /// </summary>
  62. [HttpPost]
  63. [Produces("text/xml")]
  64. public IActionResult Verify(PostModel postModel)
  65. {
  66. if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token))
  67. {
  68. return new WeixinResult("参数错误");
  69. }
  70. postModel.Token = Token;
  71. postModel.EncodingAESKey = EncodingAESKey;
  72. postModel.AppId = AppId;
  73. string body = new StreamReader(Request.Body).ReadToEnd();
  74. byte[] requestData = Encoding.UTF8.GetBytes(body);
  75. Stream inputStream = new MemoryStream(requestData);
  76. CustomMessageHandler messageHandler = new CustomMessageHandler(inputStream, postModel, _configuration, _signTokenService);//接收消息
  77. messageHandler.Execute();//执行微信处理过程
  78. return new FixWeixinBugWeixinResult(messageHandler);//返回结果、、
  79. //最终返回结果是:【xml文档转为xml字符串并且去掉“换行”、“空格”后的字符串】
  80. //return new WeixinResult(messageHandler.FinalResponseDocument.ToString().Replace("\r\n", "").Replace(" ", ""));
  81. }
  82. /// <summary>
  83. /// 供前端调用JSSDK,获取基本验证信息
  84. /// </summary>
  85. /// <returns></returns>
  86. [HttpGet]
  87. public async Task<IActionResult> GetInfo(string fromUrl = "")
  88. {
  89. var timestamp = JSSDKHelper.GetTimestamp(); //获取随机码
  90. var nonce = JSSDKHelper.GetNoncestr();
  91. var ticket = await JsApiTicketContainer.GetJsApiTicketAsync(AppId);
  92. var signature = JSSDKHelper.GetSignature(ticket.ToString(), nonce, timestamp, fromUrl);
  93. return Success("", new
  94. {
  95. appid = AppId,
  96. timestamp,
  97. nonce,
  98. signature,
  99. ticket,
  100. fromUrl
  101. });
  102. }
  103. }
  104. }