using LifePayment.Application.Contracts; using LifePayment.Domain.Shared; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System; using System.IO; using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.Uow; namespace LifePayment.HttpApi { [Route("api/[controller]/[action]")] [ApiController] [IgnoreAntiforgeryToken] public class ACOOLYNotifyController : AbpController { private readonly ILifePayService _lifePayService; private readonly ILogger _logger; public ACOOLYNotifyController( ILogger logger, ILifePayService lifePayService) { _logger = logger; _lifePayService = lifePayService; } /// /// ACOOLY回调通知 /// /// [HttpPost] [UnitOfWork] [AllowAnonymous] public async Task ACOOLYNotify() { _logger.LogError("ACOOLY回调通知开始进入"); var body = string.Empty; using (var reader = new StreamReader(Request.Body, Encoding.UTF8)) { body = await reader.ReadToEndAsync(); } if (body.IsNullOrEmpty()) { _logger.LogError("ACOOLY回调通知Input为null"); throw new UserFriendlyException("ACOOLY回调通知Input为null"); } var baseInfo = JsonConvert.DeserializeObject(body); var orderNo = string.Empty; LifePayOrderStatusEnum status = LifePayOrderStatusEnum.待退款; ACOOLYStatusEnum acoolyStatus = ACOOLYStatusEnum.充值失败; var acoolyOrderNo = string.Empty; decimal payAmount = 0; decimal parValue = 0; decimal actualParValue = 0; string refundApplyRemark = string.Empty; _logger.LogError("ACOOLY回调通处理类型:" + baseInfo.Service); _logger.LogError("ACOOLY回调内容:" + body); switch (baseInfo.Service) { case ACOOLYConstant.Sevice.ConfirmElectricOrder: var confirmElectricOrderResponse = JsonConvert.DeserializeObject(body); orderNo = confirmElectricOrderResponse.ElectricChargeOrder.OutOrderNo; acoolyOrderNo = confirmElectricOrderResponse.ElectricChargeOrder.BusiOrderNo; payAmount = confirmElectricOrderResponse.ElectricChargeOrder.PayAmount; actualParValue = confirmElectricOrderResponse.ElectricChargeOrder.ActualParValue; parValue = confirmElectricOrderResponse.ElectricChargeOrder.ParValue; _logger.LogError("ACOOLY回调通处理结果状态:" + confirmElectricOrderResponse.ElectricChargeOrder.Status); if (!confirmElectricOrderResponse.Success || (confirmElectricOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmElectricOrderResponse.Code != ACOOLYConstant.Code.PROCESSING)) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.充值失败; } else if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.充值成功) { status = LifePayOrderStatusEnum.已完成; acoolyStatus = ACOOLYStatusEnum.已完成; } else if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.充值中) { status = LifePayOrderStatusEnum.充值中; acoolyStatus = ACOOLYStatusEnum.充值中; } else if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.充值失败) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.充值失败; refundApplyRemark = "供应商充值失败"; } else if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.退款中) { status = LifePayOrderStatusEnum.已完成; acoolyStatus = ACOOLYStatusEnum.已退款; } else if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.退款完成) { status = LifePayOrderStatusEnum.已完成; acoolyStatus = ACOOLYStatusEnum.已退款; } else if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.失败关闭) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.充值失败; } else if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.部分充值成功) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.部分充值成功; refundApplyRemark = confirmElectricOrderResponse.ElectricChargeOrder.ResponseMessage; } break; case ACOOLYConstant.Sevice.ConfirmPhoneOrder: var confirmPhoneOrderResponse = JsonConvert.DeserializeObject(body); orderNo = confirmPhoneOrderResponse.PhoneChargeOrder.OutOrderNo; acoolyOrderNo = confirmPhoneOrderResponse.PhoneChargeOrder.BusiOrderNo; payAmount = confirmPhoneOrderResponse.PhoneChargeOrder.PayAmount; _logger.LogError("ACOOLY回调通处理结果状态:" + confirmPhoneOrderResponse.PhoneChargeOrder.Status); if (!confirmPhoneOrderResponse.Success || (confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.PROCESSING)) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.充值失败; } else if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.充值成功) { status = LifePayOrderStatusEnum.已完成; acoolyStatus = ACOOLYStatusEnum.已完成; } else if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.充值中) { status = LifePayOrderStatusEnum.充值中; acoolyStatus = ACOOLYStatusEnum.充值中; } else if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.充值失败) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.充值失败; } else if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.退款中) { status = LifePayOrderStatusEnum.已完成; acoolyStatus = ACOOLYStatusEnum.已退款; } else if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.退款完成) { status = LifePayOrderStatusEnum.已完成; acoolyStatus = ACOOLYStatusEnum.已退款; } else if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.失败关闭) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.充值失败; } else if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.部分充值成功) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.部分充值成功; } break; case ACOOLYConstant.Sevice.ConfirmGasOrder: var confirmGasOrderResponse = JsonConvert.DeserializeObject(body); orderNo = confirmGasOrderResponse.GasChargeOrder.OutOrderNo; acoolyOrderNo = confirmGasOrderResponse.GasChargeOrder.BusiOrderNo; payAmount = confirmGasOrderResponse.GasChargeOrder.PayAmount; _logger.LogError("ACOOLY回调通处理结果状态:" + confirmGasOrderResponse.GasChargeOrder.Status); if (!confirmGasOrderResponse.Success || (confirmGasOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmGasOrderResponse.Code != ACOOLYConstant.Code.PROCESSING)) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.充值失败; } else if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.充值成功) { status = LifePayOrderStatusEnum.已完成; acoolyStatus = ACOOLYStatusEnum.已完成; } else if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.充值中) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.充值中; } else if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.充值失败) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.充值失败; } else if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.退款中) { status = LifePayOrderStatusEnum.已完成; acoolyStatus = ACOOLYStatusEnum.已退款; } else if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.退款完成) { status = LifePayOrderStatusEnum.已完成; acoolyStatus = ACOOLYStatusEnum.已退款; } else if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.失败关闭) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.充值失败; } else if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.部分充值成功) { status = LifePayOrderStatusEnum.待退款; acoolyStatus = ACOOLYStatusEnum.部分充值成功; } break; default: throw new UserFriendlyException("ACOOLY回调通处理类型不存在"); } await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status, acoolyStatus, payAmount, refundApplyRemark, parValue, actualParValue); } } }