Esempio n. 1
0
        public coreModel.DatatransSettlementResponse SettleTransaction(DatatransSettlementRequest request)
        {
            var requestXml = request.ToDatatransRequest();
            var response   = MakeDatatransCall(SettleEndpoint, requestXml);

            if (!response.ErrorMessage.IsNullOrEmpty())
            {
                return(new coreModel.DatatransSettlementResponse
                {
                    ErrorMessage = response.ErrorMessage
                });
            }

            var paymentServiceResponse = response.ResponseContent.DeserializeXml <paymentService>();
            var result = paymentServiceResponse.ToCoreModel();

            result.ResponseContent = response.ResponseContent;
            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 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);
        }