RefundResult.cshtml.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using Essensoft.Paylinks.WeChatPay.Client;
  2. using Essensoft.Paylinks.WeChatPay.Core;
  3. using Essensoft.Paylinks.WeChatPay.Mvc;
  4. using Essensoft.Paylinks.WeChatPay.Mvc.Extensions;
  5. using Essensoft.Paylinks.WeChatPay.Payments.Domain;
  6. using Essensoft.Paylinks.WeChatPay.Payments.Notify;
  7. using Microsoft.AspNetCore.Mvc;
  8. using Microsoft.AspNetCore.Mvc.RazorPages;
  9. using Microsoft.Extensions.Options;
  10. namespace Essensoft.Paylinks.Sample.Web.Pages.WeChatPay.Payments.Notify;
  11. [IgnoreAntiforgeryToken]
  12. public class RefundResultModel(ILogger<RefundResultModel> logger, IWeChatPayNotifyClient client, IOptions<PaylinksOptions> options) : PageModel
  13. {
  14. private readonly WeChatPayClientOptions _options = options.Value.WeChatPay;
  15. /// <summary>
  16. /// 退款结果回调通知
  17. /// https://pay.weixin.qq.com/doc/v3/merchant/4012791865
  18. /// </summary>
  19. public async Task<IActionResult> OnPostAsync()
  20. {
  21. try
  22. {
  23. var headers = await Request.GetWeChatPayHeadersAsync();
  24. var body = await Request.GetWeChatPayBodyAsync();
  25. var notify = await client.ExecuteAsync<WeChatPayRefundResultNotify>(headers, body, _options);
  26. // 请务必检查系统内业务状态,避免因重复通知遭受损失。
  27. switch (notify.RefundStatus)
  28. {
  29. case WeChatPayRefundStatus.Success:
  30. {
  31. logger.LogInformation($"退款成功通知: TransactionId:{notify.TransactionId}, TotalAmount:{notify.Amount.Total}");
  32. }
  33. break;
  34. case WeChatPayRefundStatus.Closed:
  35. {
  36. logger.LogInformation($"退款关闭通知: TransactionId:{notify.TransactionId}, TotalAmount:{notify.Amount.Total}");
  37. }
  38. break;
  39. case WeChatPayRefundStatus.Abnormal:
  40. {
  41. logger.LogInformation($"退款异常通知: TransactionId:{notify.TransactionId}, TotalAmount:{notify.Amount.Total}");
  42. }
  43. break;
  44. }
  45. return WeChatPayNotifyResult.Success;
  46. }
  47. catch (WeChatPayException ex)
  48. {
  49. logger.LogError(ex.Message);
  50. return WeChatPayNotifyResult.Fail;
  51. }
  52. }
  53. }