public virtual PaymentGatewayTransactionEntity FromModel(PaymentGatewayTransaction transaction, PrimaryKeyResolvingMap pkMap) { if (transaction == null) { throw new ArgumentNullException("transaction"); } pkMap.AddPair(transaction, this); this.Id = transaction.Id; this.Amount = transaction.Amount; this.CreatedBy = transaction.CreatedBy; this.CreatedDate = transaction.CreatedDate; this.Currency = transaction.CurrencyCode; this.GatewayIpAddress = transaction.GatewayIpAddress; this.IsProcessed = transaction.IsProcessed; this.ModifiedBy = transaction.ModifiedBy; this.ModifiedDate = transaction.ModifiedDate; this.Note = transaction.Note; this.ProcessAttemptCount = transaction.ProcessAttemptCount; this.ProcessedDate = transaction.ProcessedDate; this.ProcessError = transaction.ProcessError; this.RequestData = transaction.RequestData; this.ResponseCode = transaction.ResponseCode; this.ResponseData = transaction.ResponseData; this.Status = transaction.Status; this.Type = transaction.Type; return(this); }
public virtual PaymentGatewayTransaction ToModel(PaymentGatewayTransaction transaction) { if (transaction == null) { throw new ArgumentNullException("transaction"); } transaction.Id = this.Id; transaction.Amount = this.Amount; transaction.CreatedBy = this.CreatedBy; transaction.CreatedDate = this.CreatedDate; transaction.CurrencyCode = this.Currency; transaction.GatewayIpAddress = this.GatewayIpAddress; transaction.IsProcessed = this.IsProcessed; transaction.ModifiedBy = this.ModifiedBy; transaction.ModifiedDate = this.ModifiedDate; transaction.Note = this.Note; transaction.ProcessAttemptCount = this.ProcessAttemptCount; transaction.ProcessedDate = this.ProcessedDate; transaction.ProcessError = this.ProcessError; transaction.RequestData = this.RequestData; transaction.ResponseCode = this.ResponseCode; transaction.ResponseData = this.ResponseData; transaction.Status = this.Status; transaction.Type = this.Type; return(transaction); }
public virtual PaymentGatewayTransactionEntity FromModel(PaymentGatewayTransaction transaction, PrimaryKeyResolvingMap pkMap) { if (transaction == null) { throw new ArgumentNullException(nameof(transaction)); } pkMap.AddPair(transaction, this); Id = transaction.Id; Amount = transaction.Amount; CreatedBy = transaction.CreatedBy; CreatedDate = transaction.CreatedDate; Currency = transaction.CurrencyCode; GatewayIpAddress = transaction.GatewayIpAddress; IsProcessed = transaction.IsProcessed; ModifiedBy = transaction.ModifiedBy; ModifiedDate = transaction.ModifiedDate; Note = transaction.Note; ProcessAttemptCount = transaction.ProcessAttemptCount; ProcessedDate = transaction.ProcessedDate; ProcessError = transaction.ProcessError; RequestData = transaction.RequestData; ResponseCode = transaction.ResponseCode; ResponseData = transaction.ResponseData; Status = transaction.Status; Type = transaction.Type; RefundAmount = transaction.RefundAmount ?? 0; return(this); }
public virtual PaymentGatewayTransaction ToModel(PaymentGatewayTransaction transaction) { if (transaction == null) { throw new ArgumentNullException(nameof(transaction)); } transaction.Id = Id; transaction.Amount = Amount; transaction.CreatedBy = CreatedBy; transaction.CreatedDate = CreatedDate; transaction.CurrencyCode = Currency; transaction.GatewayIpAddress = GatewayIpAddress; transaction.IsProcessed = IsProcessed; transaction.ModifiedBy = ModifiedBy; transaction.ModifiedDate = ModifiedDate; transaction.Note = Note; transaction.ProcessAttemptCount = ProcessAttemptCount; transaction.ProcessedDate = ProcessedDate; transaction.ProcessError = ProcessError; transaction.RequestData = RequestData; transaction.ResponseCode = ResponseCode; transaction.ResponseData = ResponseData; transaction.Status = Status; transaction.Type = Type; return(transaction); }
public override CaptureProcessPaymentResult CaptureProcessPayment(CaptureProcessPaymentEvaluationContext context) { if (context == null || context.Payment == null) { throw new ArgumentNullException(nameof(context)); } var result = new CaptureProcessPaymentResult(); var transaction = new PaymentGatewayTransaction { ResponseCode = GetParamValue(context.Parameters, "response"), ResponseData = GetParamValue(context.Parameters, "xml"), Amount = GetParamValue(context.Parameters, "amount").ToDecimalSafe(), Note = "CaptureProcessPayment" }; context.Payment.Transactions.Add(transaction); if (context.Payment.IsApproved || (context.Payment.PaymentStatus != PaymentStatus.Authorized && context.Payment.PaymentStatus != PaymentStatus.Cancelled)) { return(result); } var paymentService = _helcimServiceFactory(ApiEndpoint); var captureResult = paymentService.CapturePayment(new HelcimTransactionRequest { AccountId = AccountId, ApiToken = ApiAccessToken, TransactionId = context.Payment.OuterId }); //check response if (captureResult.Error) { result.ErrorMessage = captureResult.ResponseMessage; return(result); } transaction.IsProcessed = true; result.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Paid; context.Payment.Status = result.NewPaymentStatus.ToString(); context.Payment.CapturedDate = DateTime.UtcNow; result.IsSuccess = true; context.Payment.IsApproved = true; return(result); }
public override PostProcessPaymentResult PostProcessPayment(PostProcessPaymentEvaluationContext context) { var result = new PostProcessPaymentResult(); var response = GetParamValue(context.Parameters, "response"); var transactionId = GetParamValue(context.Parameters, "transactionId"); var transaction = new PaymentGatewayTransaction { ResponseCode = response, ResponseData = GetParamValue(context.Parameters, "xml"), Amount = GetParamValue(context.Parameters, "amount").ToDecimalSafe(), Note = "PostProcessPayment" }; context.Payment.Transactions.Add(transaction); var transactionSuccess = response.EqualsInvariant("1"); if (!transactionSuccess) { var message = GetParamValue(context.Parameters, "responseMessage"); transaction.ProcessError = message; result.ErrorMessage = message; return(result); } //double check transaction status to be sure it legit came from helcim var service = _helcimServiceFactory(ApiEndpoint); var transactionResult = service.GetTransaction(new HelcimTransactionRequest() { AccountId = AccountId, ApiToken = ApiAccessToken, TransactionId = transactionId }); if (transactionResult.Error) { result.ErrorMessage = transactionResult.ResponseMessage; return(result); } if (PaymentActionType == "Sale") { result.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Paid; context.Payment.CapturedDate = DateTime.UtcNow; context.Payment.IsApproved = true; } else { result.NewPaymentStatus = context.Payment.PaymentStatus = PaymentStatus.Authorized; } transaction.IsProcessed = true; context.Payment.Status = result.NewPaymentStatus.ToString(); context.Payment.AuthorizedDate = DateTime.UtcNow; context.Payment.OuterId = result.OuterId = transactionId; result.IsSuccess = true; return(result); }
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 RefundProcessPaymentResult RefundProcessPayment(RefundProcessPaymentEvaluationContext 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)); } if (string.IsNullOrEmpty(context.Payment.OuterId)) { throw new InvalidOperationException(nameof(context.Payment.OuterId)); } if (string.IsNullOrEmpty(context.Order.Currency)) { throw new InvalidOperationException(nameof(context.Order.Currency)); } if (string.IsNullOrEmpty(context.Order.Number)) { throw new InvalidOperationException(nameof(context.Payment.OuterId)); } var result = new RefundProcessPaymentResult(); var payment = context.Payment; var request = new DatatransRefundRequest { TransactionId = payment.OuterId, Amount = GetNormalizedAmountForRefund(context, payment), Currency = context.Order.Currency, MerchantId = MerchantId, ReferenceNumber = context.Order.Number, Sign = GetSignProvider(HMACHex).Sign(MerchantId, GetNormalizedAmountForRefund(context, payment), context.Order.Currency, context.Order.Number) }; var datatransClient = CreateDatatransClient(ServerToServerApi); var response = datatransClient.Refund(request); var transaction = new PaymentGatewayTransaction(); payment.Transactions.Add(transaction); transaction.ResponseData = response.ResponseData; if (!response.ErrorMessage.IsNullOrEmpty()) { transaction.ProcessError = response.ErrorMessage; result.ErrorMessage = GetErrorMessage(response.ErrorCode, response.ErrorMessage); result.IsSuccess = false; return(result); } transaction.Amount = GetAmountForRefund(context, payment); transaction.CurrencyCode = payment.Currency; transaction.IsProcessed = true; transaction.Note = "Datatrans refund"; transaction.ResponseCode = response.ResponseCode; transaction.Status = response.ResponseMessage; transaction.ProcessedDate = DateTime.Now; result.NewPaymentStatus = IsPartialRefund(context.Parameters) ? PaymentStatus.PartiallyRefunded : PaymentStatus.Refunded; result.IsSuccess = true; 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); }