WeChatPayV3NotifyController.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System;
  2. using System.IO;
  3. using System.Threading.Tasks;
  4. using Essensoft.AspNetCore.Payment.WeChatPay;
  5. using Essensoft.AspNetCore.Payment.WeChatPay.V3;
  6. using Essensoft.AspNetCore.Payment.WeChatPay.V3.Notify;
  7. using Microsoft.AspNetCore.Http;
  8. using Microsoft.AspNetCore.Mvc;
  9. using Microsoft.Extensions.Options;
  10. namespace WebApplicationSample.Controllers
  11. {
  12. [Route("wechatpay/v3/notify")]
  13. public class WeChatPayV3NotifyController : Controller
  14. {
  15. private readonly IWeChatPayNotifyClient _client;
  16. private readonly IOptions<WeChatPayOptions> _optionsAccessor;
  17. public WeChatPayV3NotifyController(IWeChatPayNotifyClient client, IOptions<WeChatPayOptions> optionsAccessor)
  18. {
  19. _client = client;
  20. _optionsAccessor = optionsAccessor;
  21. }
  22. /// <summary>
  23. /// 支付结果通知
  24. /// </summary>
  25. [Route("transactions")]
  26. [HttpPost]
  27. public async Task<IActionResult> Transactions()
  28. {
  29. try
  30. {
  31. Request.EnableBuffering();
  32. Request.Body.Seek(0, SeekOrigin.Begin);
  33. var notify = await _client.ExecuteAsync<WeChatPayTransactionsNotify>(Request, _optionsAccessor.Value);
  34. if (notify.TradeState == WeChatPayTradeState.Success)
  35. {
  36. Console.WriteLine("OutTradeNo: " + notify.OutTradeNo);
  37. return WeChatPayNotifyResult.Success;
  38. }
  39. return WeChatPayNotifyResult.Failure;
  40. }
  41. catch (WeChatPayException ex)
  42. {
  43. Console.WriteLine("出现异常: " + ex.Message);
  44. return WeChatPayNotifyResult.Failure;
  45. }
  46. }
  47. }
  48. }