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<ACOOLYNotifyController> _logger; public ACOOLYNotifyController( ILogger<ACOOLYNotifyController> logger, ILifePayService lifePayService) { _logger = logger; _lifePayService = lifePayService; } /// <summary> /// ACOOLY回调通知 /// </summary> /// <returns></returns> [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<ACOOLYRequestBaseResponse>(body); var orderNo = string.Empty; var status = LifePayOrderStatusEnum.待确认; var acoolyStatus = ACOOLYStatusEnum.充值失败; var acoolyOrderNo = string.Empty; decimal payAmount = 0; _logger.LogError("ACOOLY回调通处ç†ç±»åž‹ï¼š" + baseInfo.Service); _logger.LogError("ACOOLY回调内容:" + body); switch (baseInfo.Service) { case ACOOLYConstant.Sevice.ConfirmElectricOrder: var confirmElectricOrderResponse = JsonConvert.DeserializeObject<ConfirmElectricOrderResponse>(body); orderNo = confirmElectricOrderResponse.ElectricChargeOrder.OutOrderNo; acoolyOrderNo = confirmElectricOrderResponse.ElectricChargeOrder.BusiOrderNo; payAmount = confirmElectricOrderResponse.ElectricChargeOrder.PayAmount; _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.已完æˆ; if (confirmElectricOrderResponse.ElectricChargeOrder.ParValue == confirmElectricOrderResponse.ElectricChargeOrder.PayAmount) { acoolyStatus = ACOOLYStatusEnum.充值æˆåŠŸ; } else { acoolyStatus = ACOOLYStatusEnum.部分充值æˆåŠŸ; } } else if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.充值ä¸) { status = LifePayOrderStatusEnum.待确认; acoolyStatus = ACOOLYStatusEnum.充值ä¸; } else { status = LifePayOrderStatusEnum.已失败; acoolyStatus = ACOOLYStatusEnum.充值失败; } break; case ACOOLYConstant.Sevice.ConfirmPhoneOrder: var confirmPhoneOrderResponse = JsonConvert.DeserializeObject<ConfirmPhoneOrderResponse>(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.已完æˆ; if (confirmPhoneOrderResponse.PhoneChargeOrder.ParValue == confirmPhoneOrderResponse.PhoneChargeOrder.PayAmount) { acoolyStatus = ACOOLYStatusEnum.充值æˆåŠŸ; } else { acoolyStatus = ACOOLYStatusEnum.部分充值æˆåŠŸ; } } else if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.充值ä¸) { status = LifePayOrderStatusEnum.待确认; acoolyStatus = ACOOLYStatusEnum.充值ä¸; } else { status = LifePayOrderStatusEnum.已失败; acoolyStatus = ACOOLYStatusEnum.充值失败; } break; case ACOOLYConstant.Sevice.ConfirmGasOrder: var confirmGasOrderResponse = JsonConvert.DeserializeObject<ConfirmGasOrderResponse>(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.已失败; } else if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.充值æˆåŠŸ) { status = LifePayOrderStatusEnum.已完æˆ; // TODO 确认什么情况下å¯ä»¥åˆ¤æ–是部分充值æˆåŠŸ //if (confirmGasOrderResponse.GasChargeOrder.ParValue == confirmGasOrderResponse.GasChargeOrder.PayAmount) //{ // acoolyStatus = ACOOLYStatusEnum.充值æˆåŠŸ; //} //else //{ // acoolyStatus = ACOOLYStatusEnum.部分充值æˆåŠŸ; //} } else if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.充值ä¸) { status = LifePayOrderStatusEnum.待确认; acoolyStatus = ACOOLYStatusEnum.充值ä¸; } else { status = LifePayOrderStatusEnum.已失败; acoolyStatus = ACOOLYStatusEnum.充值失败; } break; default: break; } await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status, acoolyStatus, payAmount); } } }