using Alipay.EasySDK.Factory; using Alipay.EasySDK.Kernel.Util; using Alipay.EasySDK.Payment.Page.Models; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Volo.Abp.Domain.Services; namespace Yi.Framework.AiHub.Domain.Alipay; public class AlipayManager : DomainService { private readonly ILogger _logger; public AlipayManager(ILogger logger) { _logger = logger; } /// /// 统一Page支付 /// /// /// public Task PaymentPageAsync(string productName, string orderNumber, decimal totalAmount, string? returnUrl) { try { // 2. 发起API调用(以创建当面付收款二维码为例) var response = Factory.Payment.Page() .Pay(productName, orderNumber, totalAmount.ToString(), returnUrl ?? string.Empty); // 3. 处理响应或异常 if (ResponseChecker.Success(response)) { _logger.LogInformation($"支付宝:PaymentPage发起调用成功,返回内容:{response.Body}"); //插入数据库 return Task.FromResult(response); } else { throw new AlipayException($"支付宝:PaymentPage发起调用失败,原因:{response.Body}"); } } catch (Exception ex) { throw new AlipayException($"支付宝:PaymentPage发起调用错误,原因:{ex.Message}", innerException: ex); } } /// /// 通知验签 /// /// /// /// public Task VerifyNotifyAsync(Dictionary form) { // 支付宝的验签需要保持原始参数顺序,排序会导致验签失败 var result = Factory.Payment.Common().VerifyNotify(form); if (result == false) { _logger.LogError($"支付宝支付验签失败,回调参数:{System.Text.Json.JsonSerializer.Serialize(form)}"); throw new AlipayException($"支付宝支付,验签失败"); } _logger.LogInformation("支付宝回调验签成功"); return Task.CompletedTask; } }