public override CaptureProcessPaymentResult CaptureProcessPayment(CaptureProcessPaymentEvaluationContext context) { if (context == null) { throw new ArgumentNullException("context"); } if (context.Payment == null) { throw new ArgumentNullException("context.Payment"); } if (context.Order == null) { throw new ArgumentNullException("context.Order"); } var getAirlineContext = new GetAirlineDataContext(context.Order, context.Payment, context.Parameters); var airlineData = _capturePaymentService.GetAirlineData(getAirlineContext); var beforeSettlementEvent = new DatatransBeforeCapturePaymentEvent(context.Order, context.Payment, context.Parameters, airlineData); _settlemntEventPublisher.Publish(beforeSettlementEvent); var request = new DatatransSettlementRequest { MerchangId = MerchantId, TransactionId = context.Payment.OuterId, ReferenceNumber = context.Order.Number, Amount = context.Payment.Sum.ToInt(), Currency = context.Order.Currency, AirlineData = airlineData }; var paymentTransaction = new PaymentGatewayTransaction { Note = "Settle Transaction", CurrencyCode = context.Order.Currency, Amount = context.Payment.Sum }; context.Payment.Transactions.Add(paymentTransaction); var result = new CaptureProcessPaymentResult(); var datatransClient = _datatransClientFactory(ServerToServerApi); var settleResult = datatransClient.SettleTransaction(request); if (!settleResult.ErrorMessage.IsNullOrEmpty()) { result.ErrorMessage = settleResult.ErrorMessage; paymentTransaction.ResponseData = settleResult.ResponseContent; return(result); } var transactionInfo = GetTransactionStatus(context.Payment.OuterId); paymentTransaction.Note = "Transaction Info after Settle Transaction"; paymentTransaction.Status = transactionInfo.ResponseMessage; paymentTransaction.ResponseData = transactionInfo.ResponseContent; paymentTransaction.ResponseCode = transactionInfo.ResponseCode; paymentTransaction.ProcessError = transactionInfo.ErrorMessage; result.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Paid; context.Payment.CapturedDate = DateTime.UtcNow; context.Payment.IsApproved = true; result.IsSuccess = true; result.OuterId = context.Payment.OuterId; return(result); }
public override CaptureProcessPaymentResult CaptureProcessPayment(CaptureProcessPaymentEvaluationContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (context.Payment == null) { throw new InvalidOperationException(nameof(context.Payment)); } if (context.Order == null) { throw new InvalidOperationException(nameof(context.Order)); } var getAirlineContext = new GetAirlineDataContext(context.Order, context.Payment, context.Parameters); var airlineData = _capturePaymentService.GetAirlineData(getAirlineContext); var request = new DatatransSettlementRequest { MerchantId = MerchantId, TransactionId = context.Payment.OuterId, ReferenceNumber = context.Order.Number, Amount = context.Payment.Sum.ToInt(), Currency = context.Order.Currency, AirlineData = airlineData, Sign = GetSignProvider(HMACHex).Sign(MerchantId, context.Payment.Sum.ToInt(), context.Order.Currency, context.Order.Number) }; var paymentTransaction = new PaymentGatewayTransaction { Note = "Settle Transaction", CurrencyCode = context.Order.Currency, Amount = context.Payment.Sum }; context.Payment.Transactions.Add(paymentTransaction); var result = new CaptureProcessPaymentResult(); var datatransClient = CreateDatatransClient(ServerToServerApi); var settleResult = datatransClient.SettleTransaction(request); if (!settleResult.ErrorMessage.IsNullOrEmpty()) { result.ErrorMessage = GetErrorMessage(settleResult.ResponseCode, settleResult.ResponseMessage); paymentTransaction.ResponseData = settleResult.ResponseContent; return(result); } var transactionInfo = GetTransactionStatus(context.Payment.OuterId); paymentTransaction.Note = "Transaction Info after Settle Transaction"; paymentTransaction.Status = transactionInfo.ResponseMessage; paymentTransaction.ResponseData = transactionInfo.ResponseContent; paymentTransaction.ResponseCode = transactionInfo.ResponseCode; paymentTransaction.ProcessError = transactionInfo.ErrorMessage; paymentTransaction.IsProcessed = true; paymentTransaction.ProcessedDate = DateTime.UtcNow; result.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Paid; context.Payment.CapturedDate = DateTime.UtcNow; context.Payment.IsApproved = true; result.IsSuccess = true; result.OuterId = context.Payment.OuterId; return(result); }