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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }