internal static Response ConvertTo(CaptureResponse captureResponse)
            {
                var response = new Response();

                captureResponse.WriteBaseProperties(response);

                var properties = new List <PaymentProperty>();

                if (response.Properties != null)
                {
                    properties.AddRange(response.Properties);
                }

                var captureRespnseProperties = new List <PaymentProperty>();

                PaymentUtilities.AddPropertyIfPresent(captureRespnseProperties, GenericNamespace.CaptureResponse, CaptureResponseProperties.CardType, captureResponse.CardType);
                PaymentUtilities.AddPropertyIfPresent(captureRespnseProperties, GenericNamespace.CaptureResponse, CaptureResponseProperties.Last4Digits, captureResponse.Last4Digit);
                PaymentUtilities.AddPropertyIfPresent(captureRespnseProperties, GenericNamespace.CaptureResponse, CaptureResponseProperties.CardToken, captureResponse.CardToken);
                PaymentUtilities.AddPropertyIfPresent(captureRespnseProperties, GenericNamespace.CaptureResponse, CaptureResponseProperties.UniqueCardId, captureResponse.UniqueCardId);
                PaymentUtilities.AddPropertyIfPresent(captureRespnseProperties, GenericNamespace.CaptureResponse, CaptureResponseProperties.ProviderTransactionId, captureResponse.ProviderTransactionId);
                PaymentUtilities.AddPropertyIfPresent(captureRespnseProperties, GenericNamespace.CaptureResponse, CaptureResponseProperties.ApprovalCode, captureResponse.ApprovalCode);
                PaymentUtilities.AddPropertyIfPresent(captureRespnseProperties, GenericNamespace.CaptureResponse, CaptureResponseProperties.ResponseCode, captureResponse.ResponseCode);
                PaymentUtilities.AddPropertyIfPresent(captureRespnseProperties, GenericNamespace.CaptureResponse, CaptureResponseProperties.CurrencyCode, captureResponse.CurrencyCode);
                PaymentUtilities.AddPropertyIfPresent(captureRespnseProperties, GenericNamespace.CaptureResponse, CaptureResponseProperties.CaptureResult, captureResponse.CaptureResult);
                PaymentUtilities.AddPropertyIfPresent(captureRespnseProperties, GenericNamespace.CaptureResponse, CaptureResponseProperties.ProviderMessage, captureResponse.ProviderMessage);
                PaymentUtilities.AddPropertyIfPresent(captureRespnseProperties, GenericNamespace.CaptureResponse, CaptureResponseProperties.TransactionType, captureResponse.TransactionType);
                PaymentUtilities.AddPropertyIfPresent(captureRespnseProperties, GenericNamespace.CaptureResponse, CaptureResponseProperties.TransactionDateTime, captureResponse.TransactionDateTime);
                properties.Add(new PaymentProperty(GenericNamespace.CaptureResponse, CaptureResponseProperties.Properties, captureRespnseProperties.ToArray()));

                response.Properties = properties.ToArray();
                return(response);
            }
        public async Task CanGetMultiplePaymentActions()
        {
            PaymentRequest <CardSource> paymentRequest  = TestHelper.CreateCardPaymentRequest();
            PaymentResponse             paymentResponse = await _api.Payments.RequestAsync(paymentRequest);

            var captureRequest = new CaptureRequest
            {
                Reference = Guid.NewGuid().ToString()
            };
            CaptureResponse captureResponse = await _api.Payments.CaptureAsync(paymentResponse.Payment.Id, captureRequest);

            IEnumerable <PaymentAction> actionsResponse = await _api.Payments.GetActionsAsync(paymentResponse.Payment.Id);

            actionsResponse.ShouldNotBeNull();

            PaymentAction authorizationPaymentAction = actionsResponse.SingleOrDefault(a => a.Type == ActionType.Authorization);

            authorizationPaymentAction.ShouldNotBeNull();
            authorizationPaymentAction.Id.ShouldBe(paymentResponse.Payment.ActionId);

            PaymentAction capturePaymentAction = actionsResponse.SingleOrDefault(a => a.Type == ActionType.Capture);

            capturePaymentAction.ShouldNotBeNull();
            capturePaymentAction.Id.ShouldBe(captureResponse.ActionId);
            capturePaymentAction.Reference.ShouldBe(captureResponse.Reference);
            capturePaymentAction.Links.ShouldNotBeNull();
        }
Example #3
0
            protected override void OnTarget(Mobile from, object targeted)
            {
                if (m_Paints.Deleted || !m_Paints.IsChildOf(from.Backpack))
                {
                    return;
                }

                PlayerMobile player = from as PlayerMobile;

                if (player != null)
                {
                    QuestSystem qs = player.Quest;

                    if (qs is CollectorQuest)
                    {
                        CaptureImagesObjective obj = qs.FindObjective(typeof(CaptureImagesObjective)) as CaptureImagesObjective;

                        if (obj != null && !obj.Completed)
                        {
                            if (targeted is Mobile)
                            {
                                CaptureResponse response = obj.CaptureImage((targeted.GetType().Name == "GreaterMongbat" ? new Mongbat().GetType() : targeted.GetType()), out ImageType image);

                                switch (response)
                                {
                                case CaptureResponse.Valid:
                                {
                                    player.SendLocalizedMessage(1055125);                                                     // The enchanted paints swirl for a moment then an image begins to take shape. *Click*
                                    player.AddToBackpack(new PaintedImage(image));

                                    break;
                                }

                                case CaptureResponse.AlreadyDone:
                                {
                                    player.SendAsciiMessage(0x2C, "You have already captured the image of this creature");

                                    break;
                                }

                                case CaptureResponse.Invalid:
                                {
                                    player.SendLocalizedMessage(1055124);                                                     // You have no interest in capturing the image of this creature.

                                    break;
                                }
                                }
                            }
                            else
                            {
                                player.SendAsciiMessage(0x35, "You have no interest in that.");
                            }

                            return;
                        }
                    }
                }

                from.SendLocalizedMessage(1010085);                 // You cannot use this.
            }
Example #4
0
        public void CaptureSale_Error_Transaction()
        {
            var errorCreditCardCaptureResponse = new CaptureResponse
            {
                HttpStatus          = HttpStatusCode.BadRequest,
                Links               = null,
                ReasonCode          = 0,
                Status              = 0,
                ReasonMessage       = null,
                ErrorDataCollection = new List <Error>()
                {
                    new Error
                    {
                        Code    = 500,
                        Message = "Internal Server Error"
                    }
                }
            };

            _mockRestClient.Setup(m => m.Execute <CaptureResponse>(It.IsAny <IRestRequest>())).Returns(new RestResponse <CaptureResponse>()
            {
                StatusCode = HttpStatusCode.BadRequest,
                Content    = new JsonSerializer().Serialize(errorCreditCardCaptureResponse),
                Data       = errorCreditCardCaptureResponse
            });

            var response = _service.Capture(Guid.NewGuid(), MerchantAuthenticationHelper.CreateMerchantAuthentication(), CaptureTransationHelper.CreateValidCaptureRequest());

            response.ErrorDataCollection.Count.Should().BeGreaterThan(0);
            response.HttpStatus.Should().Be(HttpStatusCode.BadRequest);
            response.ReasonCode.Should().Be(0);
            response.ReasonMessage.Should().BeNull();
            response.Status.Should().Be(0);
            response.Links.Should().BeNull();
        }
Example #5
0
        public CaptureResponse Post(CaptureRequest req)
        {
            CaptureResponse response;

            req.merchant_id = FondyConfig.MerchantId;
            req.version     = FondyConfig.Protocol;
            req.signature   = Signature.GetRequestSignature(RequiredParams.GetHashProperties(req));
            try
            {
                response = Client.Invoke <CaptureRequest, CaptureResponse>(req, req.ActionUrl);
            }
            catch (ClientException c)
            {
                response = new CaptureResponse {
                    Error = c
                };
            }

            if (response.data != null && FondyConfig.Protocol == "2.0")
            {
                return(JsonFormatter.ConvertFromJson <CaptureResponse>(response.data, true, "order"));
            }

            return(response);
        }
        public async void Run_SimpleCaptureTest()
        {
            ShowTestOnTerminal("SimpleCapture");

            AuthorizationRequest setupRequest = new AuthorizationRequest
            {
                Pan      = "4111111111111111",
                ExpMonth = "12",
                ExpYear  = "2025",
                Amount   = "25.55",
                Test     = true,
            };

            output.WriteLine("Setup request: {0}", setupRequest);

            AuthorizationResponse setupResponse = await blockchyp.PreauthAsync(setupRequest);

            output.WriteLine("Setup Response: {0}", setupResponse);

            CaptureRequest request = new CaptureRequest
            {
                TransactionId = setupResponse.TransactionId,
                Test          = true,
            };

            output.WriteLine("Request: {0}", request);

            CaptureResponse response = await blockchyp.CaptureAsync(request);

            output.WriteLine("Response: {0}", response);

            Assert.True(response.Success, "response.Success");
            Assert.True(response.Approved, "response.Approved");
        }
        private void MakePayment(OffAmazonPaymentsServiceAutomaticPaymentsSimpleCheckout automaticPayments,
                                 string totalAmount, int indicator, bool captureNow)
        {
            lblNotification.Text += "<br>-----Making payment with indicator " + indicator.ToString() + "<br>";

            /************************************************************************
             * Invoke Authorize on Billing Agreement Action
             ***********************************************************************/
            AuthorizeOnBillingAgreementResponse authResponse = automaticPayments.AuthorizeOnBillingAgreement(totalAmount, indicator, captureNow);

            if (authResponse == null)
            {
                throw new OffAmazonPaymentsServiceException("The response from AuthorizeOnBillingAgreement request is null");
            }

            /************************************************************************
             * Wait for the notification from ipn.aspx page in a loop, then print the corresponding information
             ***********************************************************************/
            lblNotification.Text += formatStringForDisplay(WaitAndGetNotificationDetails(authResponse.AuthorizeOnBillingAgreementResult.AuthorizationDetails.AmazonAuthorizationId + "_Authorize"));
            GetAuthorizationDetailsResponse response = automaticPayments.CheckAuthorizationStatus(authResponse);

            /************************************************************************
             * On an IPN callback, call GetAuthorizationDetails to retreive additional
             * information about the authorization - this is done as part of the
             * previous call to check the status.
             ***********************************************************************/
            StringWriter stringWriter = new StringWriter();

            GetAuthorizationDetailsSample.printGetAuthorizationDetailsResponseToBuffer(response, stringWriter);
            lblNotification.Text += formatStringForDisplay(stringWriter.ToString());

            if (!captureNow)
            {
                /************************************************************************
                 * Invoke Capture Action
                 ***********************************************************************/
                CaptureResponse captureResponse = automaticPayments.Capture(authResponse, totalAmount, indicator);
                if (captureResponse == null)
                {
                    throw new OffAmazonPaymentsServiceException("The response from Capture request is null");
                }

                /************************************************************************
                 * Wait for the notification from ipn.aspx page in a loop, then print the corresponding information
                 ***********************************************************************/
                lblNotification.Text += formatStringForDisplay(WaitAndGetNotificationDetails(captureResponse.CaptureResult.CaptureDetails.AmazonCaptureId + "_Capture"));

                /************************************************************************
                 * Invoke Get Capture Details Action
                 ***********************************************************************/
                if (automaticPayments.GetCaptureDetail(captureResponse) == null)
                {
                    throw new OffAmazonPaymentsServiceException("The response from GetCaptureDetail request is null");
                }
            }

            lblNotification.Text += "-----Payment with indicator " + indicator.ToString() + " is complete<br><br>";
        }
Example #8
0
        public async void Example()
        {
#pragma warning disable 0168
            using (Client client = GetClient())
            {
                CaptureResponse response = await client.Merchant("merchantId").Captures().Get("captureId");
            }
#pragma warning restore 0168
        }
Example #9
0
        public async Task CaptureFull_ServiceReturnsValidJson_ReturnsResponseInstance()
        {
            _messageHandler.SendAsyncReturns(new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent("{\"capturedAmount\": 248.0000,\"authorizedAmount\": 248.0000,\"remainingAuthorizedAmount\": 0.0,\"captureNumber\": \"800007901\"}")
            });
            CaptureResponse result = await _service.CaptureFullAsync(Factory.GetString(), Factory.GetString());

            Assert.IsType <CaptureResponse>(result);
        }
        public async void Example()
        {
#pragma warning disable 0168
            using (Client client = GetClient())
            {
                CapturePaymentRequest body = new CapturePaymentRequest();
                body.Amount = 2980L;

                CaptureResponse response = await client.Merchant("merchantId").Payments().Capture("paymentId", body);
            }
#pragma warning restore 0168
        }
        public Output Capture(ref SecurityHeaderType Security, RequestHeaderType RequestHeader, Input Input)
        {
            CaptureRequest inValue = new CaptureRequest();

            inValue.Security      = Security;
            inValue.RequestHeader = RequestHeader;
            inValue.Input         = Input;
            CaptureResponse retVal = ((CaptureV02)(this)).Capture(inValue);

            Security = retVal.Security;
            return(retVal.Output);
        }
Example #12
0
        public static Dictionary <string, string> CaptureApiCall()
        {
            string captureId         = "";
            string uniqueReferenceId = GenerateRandomUniqueString();

            // If the captureNow was not true then capture the amount for the Authorization ID
            if (!captureNow)
            {
                CaptureRequest captureRequestParameters = new CaptureRequest();
                captureRequestParameters.WithAmazonAuthorizationId(amazonAuthorizationId)
                // The below code can be used to get the amount from the session. the amount was added into session in the SetPaymentDetails.aspx
                //.WithAmount(decimal.Parse(Session["amount"].ToString()))

                //For example we will be authorizing amount value of 1.99
                .WithAmount((decimal)1.99)
                .WithCurrencyCode(Regions.currencyCode.USD)
                .WithCaptureReferenceId(uniqueReferenceId)
                .WithSellerCaptureNote("customNote");

                CaptureResponse captureResponse = client.Capture(captureRequestParameters);
                apiResponse["captureResponse"] = captureResponse.GetJson();

                if (!captureResponse.GetSuccess())
                {
                    // API CALL FAILED, get the Error code and Error Message
                    string errorCode    = captureResponse.GetErrorCode();
                    string errorMessage = captureResponse.GetErrorMessage();
                }
                else
                {
                    return(apiResponse);
                }
            }
            else
            {
                // The captureNow was true therefore just disply the Captured response details
                GetCaptureDetailsRequest getCaptureRequestParameters = new GetCaptureDetailsRequest();
                foreach (string id in amazonCaptureIdList)
                {
                    // Here there can be multiple Capture ID's. For example purposes we are considering a single Capture ID.
                    captureId = id;
                }
                getCaptureRequestParameters.WithAmazonCaptureId(captureId);

                CaptureResponse getCaptureDetailsResponse = client.GetCaptureDetails(getCaptureRequestParameters);
                apiResponse["captureResponse"] = getCaptureDetailsResponse.GetJson();
                if (getCaptureDetailsResponse.GetSuccess())
                {
                    return(apiResponse);
                }
            }
            return(apiResponse);
        }
Example #13
0
        public async Task Create()
        {
            var response = new CaptureResponse();

            using (var api = new EbanxCaptureOperationApi())
            {
                var request = new CaptureRequest
                {
                };

                response = await api.Create(request);
            }

            Assert.IsFalse(response.Success);
        }
        private static void MakePayment(OffAmazonPaymentsServiceAutomaticPaymentsSimpleCheckout automaticPayments,
                                        string totalAmount, int indicator, bool captureNow)
        {
            Console.WriteLine("Making payment with indicator " + indicator.ToString());
            Console.WriteLine("=============================================================================");

            /************************************************************************
             * Invoke Authorize on Billing Agreement Action
             ***********************************************************************/
            AuthorizeOnBillingAgreementResponse authResponse = automaticPayments.AuthorizeOnBillingAgreement(totalAmount, indicator, captureNow);

            if (authResponse == null)
            {
                throw new OffAmazonPaymentsServiceException("The response from AuthorizeOnBillingAgreement request is null");
            }
            Console.WriteLine("=============================================================================");

            /************************************************************************
             * Check the authorization status unitl it is not "PENDING" any more
             * GetAuthorizationDetails is contained in this method
             ***********************************************************************/
            automaticPayments.CheckAuthorizationStatus(authResponse);

            if (!captureNow)
            {
                /************************************************************************
                 * Invoke Capture Action
                 ***********************************************************************/
                CaptureResponse captureResponse = automaticPayments.Capture(authResponse, totalAmount, indicator);
                if (captureResponse == null)
                {
                    throw new OffAmazonPaymentsServiceException("The response from Capture request is null");
                }
                Console.WriteLine("=============================================================================");

                /************************************************************************
                 * Invoke Get Capture Details Action
                 ***********************************************************************/
                if (automaticPayments.GetCaptureDetail(captureResponse) == null)
                {
                    throw new OffAmazonPaymentsServiceException("The response from GetCaptureDetail request is null");
                }
                Console.WriteLine("=============================================================================");
            }

            Console.WriteLine("Payment with indicator " + indicator.ToString() + " is complete");
            Console.WriteLine("=============================================================================");
        }
Example #15
0
        public void CaptureApiCall()
        {
            string captureId         = "";
            string uniqueReferenceId = GenerateRandomUniqueString();

            // If the capture has not happened on the previous Authorize API call then capture the amount.
            if (!captureNow)
            {
                CaptureRequest captureRequestParameters = new CaptureRequest();
                captureRequestParameters.WithAmazonAuthorizationId(amazonAuthorizationId)
                .WithAmount(decimal.Parse(Session["amount"].ToString()))
                .WithCurrencyCode(Regions.currencyCode.USD)
                .WithCaptureReferenceId(uniqueReferenceId)
                .WithSellerCaptureNote("customNote");

                CaptureResponse captureResponse = client.Capture(captureRequestParameters);

                // Capture was not a success Get the Error code and the Error message
                if (!captureResponse.GetSuccess())
                {
                    string errorCode    = captureResponse.GetErrorCode();
                    string errorMessage = captureResponse.GetErrorMessage();
                    capture.InnerHtml = "Capture API call Failed" + Environment.NewLine + captureResponse.GetJson();
                }
                else
                {
                    // In this example the below is to simply display the output
                    capture.InnerHtml = captureResponse.GetJson();
                }
            }
            else
            {
                // In this case the capture had already happened . running the GetCaptureDetails API call to get the output of the capture.
                GetCaptureDetailsRequest getCaptureRequestParameters = new GetCaptureDetailsRequest();
                foreach (string id in amazonCaptureIdList)
                {
                    captureId = id;
                }
                getCaptureRequestParameters.WithAmazonCaptureId(captureId);

                CaptureResponse getCaptureDetailsResponse = client.GetCaptureDetails(getCaptureRequestParameters);

                if (getCaptureDetailsResponse.GetSuccess())
                {
                    capture.InnerHtml = getCaptureDetailsResponse.GetJson();
                }
            }
        }
Example #16
0
        private async Task ShouldCapturePayment_IdempotencyKey()
        {
            var captureResponse = new CaptureResponse();

            _apiClient.Setup(apiClient =>
                             apiClient.Post <CaptureResponse>(PaymentsPath + "/payment_id/captures", _authorization,
                                                              null,
                                                              CancellationToken.None, "test"))
            .ReturnsAsync(() => captureResponse);

            IPaymentsClient paymentsClient = new PaymentsClient(_apiClient.Object, _configuration.Object);

            var response = await paymentsClient.CapturePayment("payment_id", null, "test");

            response.ShouldNotBeNull();
        }
Example #17
0
        private async Task ShouldCapturePayment()
        {
            var orderCaptureRequest = new OrderCaptureRequest();
            var captureResponse     = new CaptureResponse();

            _apiClient.Setup(apiClient =>
                             apiClient.Post <CaptureResponse>("klarna-external/orders/id/captures", _authorization,
                                                              orderCaptureRequest,
                                                              CancellationToken.None, null))
            .ReturnsAsync(() => captureResponse);

            var klarnaClient = new KlarnaClient(_apiClient.Object, _configuration.Object);

            var response = await klarnaClient.CapturePayment("id", orderCaptureRequest, CancellationToken.None);

            response.ShouldNotBeNull();
        }
        private AmazonPayData GetDetails(CaptureResponse response)
        {
            var data = new AmazonPayData();

            data.MessageType       = "GetCaptureDetails";
            data.MessageId         = response.GetRequestId();
            data.CaptureId         = response.GetCaptureId();
            data.ReferenceId       = response.GetCaptureReferenceId();
            data.Fee               = new AmazonPayPrice(response.GetCaptureFee(), response.GetCaptureFeeCurrencyCode());
            data.CapturedAmount    = new AmazonPayPrice(response.GetCaptureAmount(), response.GetCaptureAmountCurrencyCode());
            data.Creation          = response.GetCreationTimestamp();
            data.ReasonCode        = response.GetReasonCode();
            data.ReasonDescription = response.GetReasonDescription();
            data.State             = response.GetCaptureState();
            data.StateLastUpdate   = response.GetLastUpdatedTimestamp();

            return(data);
        }
        /// <summary>
        /// Parse the Notification into API Response objects.
        /// </summary>
        private void GetIpnResponseObjects()
        {
            string xml;

            xml = this.ToXml();

            if (Enum.IsDefined(typeof(NotificationType), this.GetNotificationType()))
            {
                switch ((NotificationType)Enum.Parse(typeof(NotificationType), this.GetNotificationType()))
                {
                case NotificationType.OrderReferenceNotification:
                    orderReferenceDetailsObject = new OrderReferenceDetailsResponse(xml);
                    break;

                case NotificationType.BillingAgreementNotification:
                    billingAgreementDetailsObject = new BillingAgreementDetailsResponse(xml);
                    break;

                case NotificationType.PaymentAuthorize:
                    authorizeResponseObject = new AuthorizeResponse(xml);
                    break;

                case NotificationType.PaymentCapture:
                    captureResponseObject = new CaptureResponse(xml);
                    break;

                case NotificationType.PaymentRefund:
                    refundResponseObject = new RefundResponse(xml);
                    break;

                case NotificationType.ProviderCredit:
                    providerCreditResponseObject = new GetProviderCreditDetailsResponse(xml);
                    break;

                case NotificationType.ProviderCreditReversal:
                    providerCreditReversalResponseObject = new GetProviderCreditReversalDetailsResponse(xml);
                    break;

                case NotificationType.ChargebackDetailedNotification:
                    chargebackResponseObject = new ChargebackResponse(xml);
                    break;
                }
            }
        }
Example #20
0
        public CaptureResponse Capture(CaptureRequest captureRequest)
        {
            CaptureResponse respose;

            if (_repo.TryGetAuthorization(captureRequest.AuthorizationId, out var authorization))
            {
                if (IsCaptureAllowed(authorization))
                {
                    if (authorization.AmountCaptured + captureRequest.Amount <= authorization.AmountAuthorized)
                    {
                        _repo.UpdateCapture(captureRequest.AuthorizationId, captureRequest.Amount);
                        respose = new CaptureResponse(authorization.Currency, captureRequest.Amount)
                        {
                            Message = $"{authorization.CardNumber} - Successfully captured {authorization.Currency} {captureRequest.Amount}"
                        };
                    }
                    else
                    {
                        respose = new CaptureResponse(authorization.Currency, captureRequest.Amount)
                        {
                            IsError = true, Message = $"{authorization.CardNumber} - Failed to capture {authorization.Currency} {captureRequest.Amount} as it exceeds authorized amount"
                        };
                    }
                }
                else
                {
                    respose = new CaptureResponse(authorization.Currency, captureRequest.Amount)
                    {
                        IsError = true, Message = $"{authorization.CardNumber} - Capture not allowed on a void/refunded transaction"
                    };
                }

                return(respose);
            }
            else
            {
                respose = new CaptureResponse(string.Empty, captureRequest.Amount)
                {
                    IsError = true, Message = $"Capture failed. Invalid authorization Id: {captureRequest.AuthorizationId}"
                };
                return(respose);
            }
        }
        public async Task GetCaptureAsync_DefaultBehaviour_ResponseIsParsed()
        {
            // Given: We request a capture with a payment id and capture id
            string        expectedUrl   = $"{BaseMollieClient.ApiEndPoint}payments/{defaultPaymentId}/captures/{defaultCaptureId}";
            var           mockHttp      = this.CreateMockHttpMessageHandler(HttpMethod.Get, expectedUrl, defaultCaptureJsonResponse);
            HttpClient    httpClient    = mockHttp.ToHttpClient();
            CaptureClient captureClient = new CaptureClient("api-key", httpClient);

            // When: We make the request
            CaptureResponse captureResponse = await captureClient.GetCaptureAsync(defaultPaymentId, defaultCaptureId);

            // Then: Response should be parsed
            mockHttp.VerifyNoOutstandingExpectation();
            Assert.IsNotNull(captureResponse);
            Assert.AreEqual(defaultPaymentId, captureResponse.PaymentId);
            Assert.AreEqual(defaultShipmentId, captureResponse.ShipmentId);
            Assert.AreEqual(defaultSettlementId, captureResponse.SettlementId);
            Assert.AreEqual(defaultAmountValue, captureResponse.Amount.Value);
            Assert.AreEqual(defaultAmountCurrency, captureResponse.Amount.Currency);
        }
Example #22
0
        public CaptureResponse Capture(Guid paymentId, MerchantAuthentication merchantAuthentication, CaptureRequest captureRequest)
        {
            var restRequest = new RestRequest(@"sales/{paymentId}/capture", Method.PUT)
            {
                RequestFormat = DataFormat.Json
            };

            AddHeaders(restRequest, merchantAuthentication);

            restRequest.AddUrlSegment("paymentId", paymentId.ToString());

            if (captureRequest != null)
            {
                restRequest.AddQueryParameter("amount", captureRequest.Amount.ToString());
                restRequest.AddQueryParameter("serviceTaxAmount", captureRequest.ServiceTaxAmount.ToString());
            }

            var response = RestClient.Execute <CaptureResponse>(restRequest);

            CaptureResponse captureResponse = null;

            if (response.StatusCode == HttpStatusCode.OK)
            {
                captureResponse = JsonConvert.DeserializeObject <CaptureResponse>(response.Content);
            }
            else if (response.StatusCode == HttpStatusCode.BadRequest)
            {
                captureResponse = new CaptureResponse {
                    ErrorDataCollection = JsonDeserializer.Deserialize <List <Error> >(response)
                }
            }
            ;
            else
            {
                captureResponse = new CaptureResponse();
            }

            captureResponse.HttpStatus = response.StatusCode;

            return(captureResponse);
        }
Example #23
0
        public async Task ListSettlementCaptures_DefaultBehaviour_ResponseIsParsed()
        {
            // Given: We request a list of captures
            string            expectedUrl       = $"{BaseMollieClient.ApiEndPoint}settlements/{defaultSettlementId}/captures";
            var               mockHttp          = this.CreateMockHttpMessageHandler(HttpMethod.Get, expectedUrl, defaultCaptureListJsonResponse);
            HttpClient        httpClient        = mockHttp.ToHttpClient();
            SettlementsClient settlementsClient = new SettlementsClient("api-key", httpClient);

            // When: We make the request
            ListResponse <CaptureResponse> listCaptureResponse = await settlementsClient.ListSettlementCapturesAsync(defaultSettlementId);

            // Then: Response should be parsed
            mockHttp.VerifyNoOutstandingExpectation();
            Assert.IsNotNull(listCaptureResponse);
            Assert.AreEqual(1, listCaptureResponse.Count);
            CaptureResponse captureResponse = listCaptureResponse.Items.First();

            Assert.AreEqual(defaultPaymentId, captureResponse.PaymentId);
            Assert.AreEqual(defaultShipmentId, captureResponse.ShipmentId);
            Assert.AreEqual(defaultSettlementId, captureResponse.SettlementId);
            Assert.AreEqual(defaultAmountValue, captureResponse.Amount.Value);
            Assert.AreEqual(defaultAmountCurrency, captureResponse.Amount.Currency);
        }
Example #24
0
 protected void Page_Load(object sender, EventArgs e)
 {
     System.Globalization.CultureInfo ui = System.Globalization.CultureInfo.CurrentUICulture;
     if (Request.Form["payment_id"] != null || Request.Form["data"] != null)
     {
         var resp = new Response().GetResponse(Request.Form.ToString(), "form");
         ResponeData = resp;
         if (resp.SignatureError != null)
         {
             ResponeOrderError                     = "Signature error";
             ResponeOrderSignatureString           = resp.SignatureError.SignatureString;
             ResponeOrderCalculatedSignatureString = resp.SignatureError.CalculatedSignature;
         }
         else
         {
             ResponeOrder = resp.order_id;
             var captureReq = new CaptureRequest
             {
                 order_id = resp.order_id,
                 amount   = Convert.ToInt32(resp.amount) - 1,
                 currency = "USD",
             };
             var cresp = new Capture().Post(captureReq);
             if (cresp.Error != null)
             {
                 ResponeData = null;
                 DataError   = cresp.Error.ErrorMessage;
                 Data        = cresp.Error.RequestId;
             }
             else
             {
                 CaptureResp = cresp;
             }
         }
     }
     btnSubmit.Click += Submit;
 }
Example #25
0
        public override string CaptureOrder(Order o)
        {
            String result = String.Empty;

            o.CaptureTXCommand = "";
            o.CaptureTXResult  = "";

            // check for ReauthorizationID first, if doesn't exist, use original AuthorizationID
            String TransID = Regex.Match(o.AuthorizationPNREF, "(?<=REAU=)[0-9A-Z]+", RegexOptions.Compiled).ToString();

            if (TransID.Length == 0)
            {
                TransID = Regex.Match(o.AuthorizationPNREF, "(?<=AUTH=)[0-9A-Z]+", RegexOptions.Compiled).ToString();
            }

            Decimal OrderTotal = o.OrderBalance;

            if (TransID.Length == 0 || TransID == "0")
            {
                result = "Invalid or Empty Transaction ID";
            }
            else
            {
                try
                {
                    DoCaptureReq          CaptureReq         = new DoCaptureReq();
                    DoCaptureRequestType  CaptureRequestType = new DoCaptureRequestType();
                    DoCaptureResponseType CaptureResponse;

                    BasicAmountType totalAmount = new BasicAmountType();
                    totalAmount.Value      = Localization.CurrencyStringForGatewayWithoutExchangeRate(OrderTotal);
                    totalAmount.currencyID = (CurrencyCodeType)Enum.Parse(typeof(CurrencyCodeType), AppLogic.AppConfig("Localization.StoreCurrency"), true);

                    CaptureRequestType.Amount          = totalAmount;
                    CaptureRequestType.AuthorizationID = TransID;

                    CaptureRequestType.CompleteType = CompleteCodeType.Complete;
                    CaptureRequestType.Version      = API_VER;

                    CaptureReq.DoCaptureRequest = CaptureRequestType;

                    o.CaptureTXCommand = XmlCommon.SerializeObject(CaptureReq, CaptureReq.GetType());                     //"Not Available For PayPal";

                    CaptureResponse = (DoCaptureResponseType)IPayPal.DoCapture(CaptureReq);

                    //if (LogToErrorTable)
                    //{
                    //    PayPalController.Log(XmlCommon.SerializeObject(CaptureReq, CaptureReq.GetType()), "DoCapture Request");
                    //    PayPalController.Log(XmlCommon.SerializeObject(CaptureResponse, CaptureResponse.GetType()), "DoCapture Response");
                    //}

                    o.CaptureTXResult = XmlCommon.SerializeObject(CaptureResponse, CaptureResponse.GetType());

                    if (CaptureResponse != null && CaptureResponse.Ack.ToString().StartsWith("success", StringComparison.InvariantCultureIgnoreCase))
                    {
                        result = AppLogic.ro_OK;
                        String CaptureTransID = CaptureResponse.DoCaptureResponseDetails.PaymentInfo.TransactionID;
                        o.AuthorizationPNREF = o.AuthorizationPNREF + "|CAPTURE=" + CaptureTransID;
                    }
                    else
                    {
                        if (CaptureResponse.Errors != null)
                        {
                            bool first = true;
                            for (int ix = 0; ix < CaptureResponse.Errors.Length; ix++)
                            {
                                if (!first)
                                {
                                    result += ", ";
                                }
                                result += "Error: [" + CaptureResponse.Errors[ix].ErrorCode + "] " + CaptureResponse.Errors[ix].LongMessage;
                                first   = false;
                            }
                        }
                    }
                }
                catch
                {
                    result = "NO RESPONSE FROM GATEWAY!";
                }
            }
            return(result);
        }
Example #26
0
        public static CaptureResponse InvokeCapture(IOffAmazonPaymentsService service, CaptureRequest request)
        {
            CaptureResponse response = null;

            try
            {
                response = service.Capture(request);
                Console.WriteLine("Service Response");
                Console.WriteLine("=============================================================================");
                Console.WriteLine();
                Console.WriteLine("        CaptureResponse");
                if (response.IsSetCaptureResult())
                {
                    Console.WriteLine("            CaptureResult");
                    CaptureResult captureResult = response.CaptureResult;
                    if (captureResult.IsSetCaptureDetails())
                    {
                        Console.WriteLine("                CaptureDetails");
                        CaptureDetails captureDetails = captureResult.CaptureDetails;
                        if (captureDetails.IsSetAmazonCaptureId())
                        {
                            Console.WriteLine("                    AmazonCaptureId");
                            Console.WriteLine("                        {0}", captureDetails.AmazonCaptureId);
                        }
                        if (captureDetails.IsSetCaptureReferenceId())
                        {
                            Console.WriteLine("                    CaptureReferenceId");
                            Console.WriteLine("                        {0}", captureDetails.CaptureReferenceId);
                        }
                        if (captureDetails.IsSetSellerCaptureNote())
                        {
                            Console.WriteLine("                    SellerCaptureNote");
                            Console.WriteLine("                        {0}", captureDetails.SellerCaptureNote);
                        }
                        if (captureDetails.IsSetCaptureAmount())
                        {
                            Console.WriteLine("                    CaptureAmount");
                            Price captureAmount = captureDetails.CaptureAmount;
                            if (captureAmount.IsSetAmount())
                            {
                                Console.WriteLine("                        Amount");
                                Console.WriteLine("                            {0}", captureAmount.Amount);
                            }
                            if (captureAmount.IsSetCurrencyCode())
                            {
                                Console.WriteLine("                        CurrencyCode");
                                Console.WriteLine("                            {0}", captureAmount.CurrencyCode);
                            }
                        }
                        if (captureDetails.IsSetRefundedAmount())
                        {
                            Console.WriteLine("                    RefundedAmount");
                            Price refundedAmount = captureDetails.RefundedAmount;
                            if (refundedAmount.IsSetAmount())
                            {
                                Console.WriteLine("                        Amount");
                                Console.WriteLine("                            {0}", refundedAmount.Amount);
                            }
                            if (refundedAmount.IsSetCurrencyCode())
                            {
                                Console.WriteLine("                        CurrencyCode");
                                Console.WriteLine("                            {0}", refundedAmount.CurrencyCode);
                            }
                        }
                        if (captureDetails.IsSetCaptureFee())
                        {
                            Console.WriteLine("                    CaptureFee");
                            Price captureFee = captureDetails.CaptureFee;
                            if (captureFee.IsSetAmount())
                            {
                                Console.WriteLine("                        Amount");
                                Console.WriteLine("                            {0}", captureFee.Amount);
                            }
                            if (captureFee.IsSetCurrencyCode())
                            {
                                Console.WriteLine("                        CurrencyCode");
                                Console.WriteLine("                            {0}", captureFee.CurrencyCode);
                            }
                        }
                        if (captureDetails.IsSetCreationTimestamp())
                        {
                            Console.WriteLine("                    CreationTimestamp");
                            Console.WriteLine("                        {0}", captureDetails.CreationTimestamp);
                        }
                        if (captureDetails.IsSetProviderCreditSummaryList())
                        {
                            Console.WriteLine("                    ProviderCreditSummaryList");
                            foreach (ProviderCreditSummary providerCreditSummary in captureDetails.ProviderCreditSummaryList.member)
                            {
                                if (providerCreditSummary.IsSetProviderCreditId())
                                {
                                    Console.WriteLine("                         ProviderCreditId");
                                    Console.WriteLine("                             {0}", providerCreditSummary.ProviderCreditId);
                                }
                                if (providerCreditSummary.IsSetProviderId())
                                {
                                    Console.WriteLine("                         ProviderId");
                                    Console.WriteLine("                             {0}", providerCreditSummary.ProviderId);
                                }
                            }
                        }
                        if (captureDetails.IsSetCaptureStatus())
                        {
                            Console.WriteLine("                    CaptureStatus");
                            Status captureStatus = captureDetails.CaptureStatus;
                            if (captureStatus.IsSetState())
                            {
                                Console.WriteLine("                        State");
                                Console.WriteLine("                            {0}", captureStatus.State);
                            }
                            if (captureStatus.IsSetLastUpdateTimestamp())
                            {
                                Console.WriteLine("                        LastUpdateTimestamp");
                                Console.WriteLine("                            {0}", captureStatus.LastUpdateTimestamp);
                            }
                            if (captureStatus.IsSetReasonCode())
                            {
                                Console.WriteLine("                        ReasonCode");
                                Console.WriteLine("                            {0}", captureStatus.ReasonCode);
                            }
                            if (captureStatus.IsSetReasonDescription())
                            {
                                Console.WriteLine("                        ReasonDescription");
                                Console.WriteLine("                            {0}", captureStatus.ReasonDescription);
                            }
                        }
                    }
                }

                if (response.IsSetResponseMetadata())
                {
                    Console.WriteLine("            ResponseMetadata");
                    ResponseMetadata responseMetadata = response.ResponseMetadata;
                    if (responseMetadata.IsSetRequestId())
                    {
                        Console.WriteLine("                RequestId");
                        Console.WriteLine("                    {0}", responseMetadata.RequestId);
                    }
                }

                Console.WriteLine();
            }

            catch (OffAmazonPaymentsServiceException ex)
            {
                PrintException(ex);
            }

            return(response);
        }
Example #27
0
        private void RunSampleMultiShipments(string orderAmount, OffAmazonPaymentsServiceMultipleShipment instance)
        {
            /************************************************************************
             * Invoke Get Order Reference Details Action
             ***********************************************************************/
            GetOrderReferenceDetailsResponse getOrderDetails = instance.GetOrderReferenceDetails();

            if (getOrderDetails == null)
            {
                throw new OffAmazonPaymentsServiceException("The response from GetOrderReference request is null");
            }

            Address address = getOrderDetails.GetOrderReferenceDetailsResult.OrderReferenceDetails.Destination.PhysicalDestination;

            lblShipping.Text = "The shipping address is: " + address.City + "<br>" + address.StateOrRegion + "<br>" + address.PostalCode + "<br>";

            /************************************************************************
             * Invoke Set Order Reference Details Action
             ***********************************************************************/
            SetOrderReferenceDetailsResponse setOrderDetailsResponse = instance.SetOrderReferenceDetails(orderAmount);

            if (setOrderDetailsResponse == null)
            {
                throw new OffAmazonPaymentsServiceException("The response from SetOrderReference request is null");
            }

            /************************************************************************
             * Invoke Confirm Order Reference Action
             ***********************************************************************/
            if (instance.ConfirmOrderReferenceObject() == null)
            {
                throw new OffAmazonPaymentsServiceException("The response from ConfirmOrderResponse request is null");
            }

            //iterate the authoriztion amount in the authList
            for (int i = 0; i < numberOfShipment; i++)
            {
                String eachOrderAmount = amountEachShip[i].ToString();

                /************************************************************************
                 * Invoke Authorize Action
                 ***********************************************************************/
                AuthorizeResponse authResponse = instance.AuthorizeAction(eachOrderAmount, indicator);
                if (authResponse == null)
                {
                    throw new OffAmazonPaymentsServiceException("The response from Authorization Response request is null");
                }

                /************************************************************************
                 * Wait for the notification from ipn.aspx page in a loop, then print the corresponding information
                 ***********************************************************************/
                lblNotification.Text += WaitAndGetNotificationDetails(authResponse.AuthorizeResult.AuthorizationDetails.AmazonAuthorizationId + "_Authorize");

                instance.CheckAuthorizationStatus(authResponse);

                /************************************************************************
                 * Invoke Capture Action
                 ***********************************************************************/
                CaptureResponse captureResponse = instance.CaptureAction(authResponse, eachOrderAmount, indicator);
                if (captureResponse == null)
                {
                    throw new OffAmazonPaymentsServiceException("The response from Caputre Response request is null");
                }

                lblNotification.Text += WaitAndGetNotificationDetails(captureResponse.CaptureResult.CaptureDetails.AmazonCaptureId + "_Capture");

                /************************************************************************
                 * Invoke Get Capture Details Action
                 ***********************************************************************/
                if (instance.GetCaptureDetails(captureResponse) == null)
                {
                    throw new OffAmazonPaymentsServiceException("The response from GetCaputreDetails Response request is null");
                }

                indicator++;
            }

            /************************************************************************
             * Invoke Close Order Reference Action
             ***********************************************************************/
            if (instance.CloseOrderReference() == null)
            {
                throw new OffAmazonPaymentsServiceException("The response from CloseOrderReference Response request is null");
            }

            lblNotification.Text += WaitAndGetNotificationDetails(orderReferenceId + "_OrderReference");
        }
        private static void RunSampleMultiShipments(string orderReferenceId, string orderAmount, OffAmazonPaymentsServiceMultipleShipment instance)
        {
            /************************************************************************
             * Invoke Get Order Reference Details Action
             ***********************************************************************/
            GetOrderReferenceDetailsResponse getOrderDetails = instance.GetOrderReferenceDetails();

            if (getOrderDetails == null)
            {
                throw new OffAmazonPaymentsServiceException("The response from GetOrderReference request is null");
            }
            Console.WriteLine("=======================================================");

            /************************************************************************
             * Invoke Set Order Reference Details Action
             ***********************************************************************/
            SetOrderReferenceDetailsResponse setOrderDetailsResponse = instance.SetOrderReferenceDetails(orderAmount);

            if (setOrderDetailsResponse == null)
            {
                throw new OffAmazonPaymentsServiceException("The response from SetOrderReference request is null");
            }
            Console.WriteLine("=======================================================");

            /************************************************************************
             * Invoke Confirm Order Reference Action
             ***********************************************************************/
            if (instance.ConfirmOrderReferenceObject() == null)
            {
                throw new OffAmazonPaymentsServiceException("The response from ConfirmOrderResponse request is null");
            }
            Console.WriteLine("=======================================================");
            Console.WriteLine("===========================================");
            Console.WriteLine("Here is the demo of one capture per authorization.");
            Console.WriteLine("===========================================");
            Console.WriteLine();

            IDictionary <string, OrderItem> orderList = instance.OrderList;

            Console.WriteLine("Current orders are listed as below: ");
            instance.ShowCurrentOrders();
            System.Threading.Thread.Sleep(3000);

            //iterate the authoriztion amount in the authList
            foreach (string item in orderList.Keys)
            {
                String eachOrderAmount = (orderList[item].Price * orderList[item].Number).ToString();

                /************************************************************************
                 * Invoke Authorize Action
                 ***********************************************************************/
                AuthorizeResponse authResponse = instance.AuthorizeAction(eachOrderAmount, indicator);
                if (authResponse == null)
                {
                    throw new OffAmazonPaymentsServiceException("The response from Authorization Response request is null");
                }
                Console.WriteLine("=======================================================");

                /************************************************************************
                 * Check the authorization status unitl it is not "PENDING" any more
                 * GetAuthorizeDetails is contained in this method
                 ***********************************************************************/
                instance.CheckAuthorizationStatus(authResponse);

                /************************************************************************
                 * Invoke Capture Action
                 ***********************************************************************/
                CaptureResponse captureResponse = instance.CaptureAction(authResponse, eachOrderAmount, indicator);
                if (captureResponse == null)
                {
                    throw new OffAmazonPaymentsServiceException("The response from Caputre Response request is null");
                }
                Console.WriteLine("=======================================================");

                /************************************************************************
                 * Invoke GetCaptureDetails Action
                 ***********************************************************************/
                if (instance.GetCaptureDetails(captureResponse) == null)
                {
                    throw new OffAmazonPaymentsServiceException("The response from GetCaputreDetails Response request is null");
                }
                Console.WriteLine("=======================================================");

                indicator++;
            }

            /************************************************************************
             * Invoke CloseOrderReference Action
             ***********************************************************************/
            if (instance.CloseOrderReference() == null)
            {
                throw new OffAmazonPaymentsServiceException("The response from CloseOrderReference Response request is null");
            }
        }
 //Invoke the GetCaptureDetails method
 public GetCaptureDetailsResponse GetCaptureDetails(CaptureResponse captureReponse)
 {
     return(GetCaptureDetailsSample.GetCaptureDetails(propertiesCollection, service, captureReponse.CaptureResult.CaptureDetails.AmazonCaptureId));
 }
 //Use a loop to check for the ProviderCreditSummaryList in the CaptureDetails. Once found, return it.
 public ProviderCreditSummaryList CheckCaptureForProviderCreditSummaryList(CaptureResponse captureResponse)
 {
     return GetCaptureDetailsSample.CheckCaptureForProviderCreditSummaryList(captureResponse.CaptureResult.CaptureDetails.AmazonCaptureId, propertiesCollection, service);
 }
 //Invoke the GetCaptureDetails method
 public GetCaptureDetailsResponse GetCaptureDetails(CaptureResponse captureReponse)
 {
     return GetCaptureDetailsSample.GetCaptureDetails(propertiesCollection, service, captureReponse.CaptureResult.CaptureDetails.AmazonCaptureId);
 }
Example #32
0
        public static void Thread1(object sock)
        {
            string           gatewayPrivateKey = File.ReadAllText("d:/file/gatewayPrivateKey.xml");
            X509Certificate2 caCertificate = new X509Certificate2("d:/file/ca.crt");
            X509Certificate2 gatewayCertificate = new X509Certificate2("d:/file/gateway.crt");
            X509Certificate2 issuerCertificate = new X509Certificate2("d:/file/issuer.crt");
            X509Certificate2 customerCertificate, merchantCertificate;
            string           sendMessage;
            Common           c = new Common();
            Socket           socket = (Socket)sock;

            //nhận auth request
            string receiveMessage = c.receive(ref socket);

            string[] tam = receiveMessage.Split('-');
            customerCertificate = new X509Certificate2(c.StringToByteArray(tam[4]));
            merchantCertificate = new X509Certificate2(c.StringToByteArray(tam[5]));
            if (c.VerifyCertificate(caCertificate, customerCertificate) == false || c.VerifyCertificate(caCertificate, merchantCertificate) == false)
            {
                Console.WriteLine("verify authorization request certificate false");
                string message = "ERROR" + "-" + 4 + "-" + "xac thuc that bai";
                c.send(message, ref socket);
            }
            else
            {
                AuthorizationRequest authorizationRequest = new AuthorizationRequest(tam[0], tam[1], tam[2], tam[3], tam[4], tam[5], tam[6]);
                if (authorizationRequest.Verify(gatewayPrivateKey) == false)
                {
                    Console.WriteLine("verify authorization request false");
                    string s = "ERROR" + "-" + 4 + "-" + "xac thuc that bai";
                    c.send(s, ref socket);
                }
                else
                {
                    Console.WriteLine("verify authorization request true");
                    //chuyển auth request đến issuer
                    string              issuerPublicKey = issuerCertificate.GetRSAPublicKey().ToXmlString(false);
                    string              PI                  = authorizationRequest.getPI(gatewayPrivateKey);
                    string[]            splitPI             = PI.Split(':');
                    PaymentInstructions paymentInstructions = new PaymentInstructions(splitPI[0], splitPI[1], splitPI[2], splitPI[3], splitPI[4], splitPI[5], Convert.ToInt64(splitPI[6]));
                    string              RRPID               = paymentInstructions.getRRPID();
                    paymentInstructions.setRRPID(c.Random(2));
                    ForwardAuthorizationRequest forwardAuthorization = new ForwardAuthorizationRequest(paymentInstructions.PIToString(), issuerPublicKey);
                    sendMessage = forwardAuthorization.ToMessage();

                    //kết nối issuer
                    IPEndPoint iep    = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1236);
                    Socket     client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    client.Connect(iep);

                    c.send(sendMessage, ref client);

                    //nhận kq response từ issuer
                    receiveMessage = c.receive(ref client);
                    string[] splitRES = receiveMessage.Split('-');
                    issuerCertificate = new X509Certificate2(c.StringToByteArray(splitRES[2]));
                    if (c.VerifyCertificate(caCertificate, issuerCertificate) == true)
                    {
                        Console.WriteLine("verify authorization response certificate from issuer true");
                        issuerPublicKey = issuerCertificate.GetRSAPublicKey().ToXmlString(false);
                        bool verifyRES = c.Verify(issuerPublicKey, splitRES[1], splitRES[0]);
                        if (verifyRES == true)
                        {
                            Console.WriteLine("verify authorization response from issuer true");
                            //tạo và gửi auth response
                            string[] splitIssuerRES = splitRES[0].Split(':');
                            //kiểm tra response từ issuer có ERROR hay không
                            if (splitIssuerRES[0].CompareTo("ERROR") == 0)
                            {
                                string                message               = splitIssuerRES[0] + ":" + RRPID + ":" + splitIssuerRES[1] + ":" + splitIssuerRES[2];
                                X509Certificate2      certificate2          = new X509Certificate2(c.StringToByteArray(authorizationRequest.getMerchantCertificate()));
                                string                publicKeyMerchant     = certificate2.GetRSAPublicKey().ToXmlString(false);
                                AuthorizationResponse authorizationResponse = new AuthorizationResponse(message, publicKeyMerchant);
                                c.send(authorizationResponse.ToMessageNoToken(), ref socket);
                            }
                            else
                            {
                                string                message               = splitIssuerRES[0] + ":" + RRPID + ":" + splitIssuerRES[1] + ":" + splitIssuerRES[2];
                                CaptureToken          token                 = new CaptureToken(paymentInstructions.getTransID(), paymentInstructions.getCardNumber(), paymentInstructions.getTien());
                                X509Certificate2      certificate2          = new X509Certificate2(c.StringToByteArray(authorizationRequest.getMerchantCertificate()));
                                string                publicKeyMerchant     = certificate2.GetRSAPublicKey().ToXmlString(false);
                                AuthorizationResponse authorizationResponse = new AuthorizationResponse(message, publicKeyMerchant);
                                authorizationResponse.setCaptureToken(token.ToMessage());
                                c.send(authorizationResponse.ToMessage(), ref socket);
                                //nhận capture request
                                receiveMessage = c.receive(ref socket);
                                string[] splitCapture = receiveMessage.Split('-');
                                merchantCertificate = new X509Certificate2(c.StringToByteArray(splitCapture[6]));
                                if (c.VerifyCertificate(caCertificate, merchantCertificate) == false)
                                {
                                    Console.WriteLine("verify capture request certificate false");
                                    string message1 = "ERROR" + "-" + 4 + "-" + "xac thuc that bai";
                                    c.send(message1, ref socket);
                                }
                                else
                                {
                                    Console.WriteLine("verify capture request certificate true");
                                    CaptureRequest captureRequest = new CaptureRequest(splitCapture[0], splitCapture[1], splitCapture[2], splitCapture[3], splitCapture[4], splitCapture[5], splitCapture[6]);
                                    if (captureRequest.Verify() == false)
                                    {
                                        Console.WriteLine("verify capture request false");
                                        message = "ERROR" + "-" + 4 + "-" + "xac thuc that bai";
                                        c.send(message, ref socket);
                                    }
                                    else
                                    {
                                        Console.WriteLine("verify capture request true");
                                        //chuyển capture request tới issuer
                                        sendMessage = captureRequest.messageToIssuer();
                                        c.send(sendMessage, ref client);

                                        //nhận message từ issuer
                                        receiveMessage = c.receive(ref client);
                                        string[] splitCaptureRES = receiveMessage.Split('-');
                                        issuerCertificate = new X509Certificate2(c.StringToByteArray(splitCaptureRES[2]));
                                        if (c.VerifyCertificate(caCertificate, issuerCertificate) == true)
                                        {
                                            Console.WriteLine("verify capture response certificate from issuer true");
                                            issuerCertificate = new X509Certificate2(c.StringToByteArray(splitCaptureRES[2]));
                                            issuerPublicKey   = issuerCertificate.GetRSAPublicKey().ToXmlString(false);
                                            if (c.Verify(issuerPublicKey, splitCaptureRES[1], splitCaptureRES[0]) == true)
                                            {
                                                Console.WriteLine("verify capture response from issuer true");
                                                //tạo capture response gừi tới merchant
                                                string[] split = splitCaptureRES[0].Split(':');
                                                message = split[0] + ":" + captureRequest.getRRPID() + ":" + split[1] + ":" + split[2];
                                                CaptureResponse captureResponse = new CaptureResponse(message, publicKeyMerchant);
                                                c.send(captureResponse.ToMessage(), ref socket);
                                            }
                                        }
                                        client.Close();
                                    }
                                }
                            }
                        }
                    }
                }
            }

            socket.Close();
        }