TransactionSuccess.cshtml.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  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.Notify;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.AspNetCore.Mvc.RazorPages;
  8. using Microsoft.Extensions.Options;
  9. namespace Essensoft.Paylinks.Sample.Web.Pages.WeChatPay.Payments.Notify;
  10. [IgnoreAntiforgeryToken]
  11. public class TransactionSuccessModel(ILogger<TransactionSuccessModel> logger, IWeChatPayNotifyClient client, IOptions<PaylinksOptions> options) : PageModel
  12. {
  13. private readonly WeChatPayClientOptions _options = options.Value.WeChatPay;
  14. /// <summary>
  15. /// 支付成功回调通知
  16. /// https://pay.weixin.qq.com/doc/v3/merchant/4012791861
  17. /// </summary>
  18. public async Task<IActionResult> OnPostAsync()
  19. {
  20. try
  21. {
  22. var headers = await Request.GetWeChatPayHeadersAsync();
  23. var body = await Request.GetWeChatPayBodyAsync();
  24. var notify = await client.ExecuteAsync<WeChatPayTransactionSuccessNotify>(headers, body, _options);
  25. // 请务必检查系统内业务状态,避免因重复通知遭受损失。
  26. logger.LogInformation($"支付成功通知: TransactionId:{notify.TransactionId}, TotalAmount:{notify.Amount.Total}");
  27. return WeChatPayNotifyResult.Success;
  28. }
  29. catch (WeChatPayException ex)
  30. {
  31. logger.LogError(ex.Message);
  32. return WeChatPayNotifyResult.Fail;
  33. }
  34. }
  35. }