TradeResult.cshtml.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using Essensoft.Paylinks.Alipay.Client;
  2. using Essensoft.Paylinks.Alipay.Core;
  3. using Essensoft.Paylinks.Alipay.Mvc;
  4. using Essensoft.Paylinks.Alipay.Mvc.Extensions;
  5. using Essensoft.Paylinks.Alipay.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.Alipay.Payments.Notify;
  10. [IgnoreAntiforgeryToken]
  11. public class TradeResultModel(ILogger<TradeResultModel> logger, IAlipayNotifyClient client, IOptions<PaylinksOptions> options) : PageModel
  12. {
  13. private readonly AlipayClientOptions _options = options.Value.Alipay;
  14. /// <summary>
  15. /// 支付成功通知
  16. /// https://opendocs.alipay.com/open-v3/05pf4k?pathHash=01c6e762
  17. /// </summary>
  18. public async Task<IActionResult> OnPostAsync()
  19. {
  20. try
  21. {
  22. var parameters = await Request.GetAlipayParametersAsync();
  23. var notify = await client.ExecuteAsync<AlipayTradeStatusSyncNotify>(parameters, _options);
  24. // 请务必检查系统内业务状态,避免因重复通知遭受损失。
  25. logger.LogInformation($"支付成功通知: TradeNo:{notify.TradeNo}, TotalAmount:{notify.TotalAmount}");
  26. return AlipayNotifyResult.Success;
  27. }
  28. catch (AlipayException ex)
  29. {
  30. logger.LogError(ex.Message);
  31. return AlipayNotifyResult.Fail;
  32. }
  33. }
  34. }