internal string CreateRequestData(ThreeDSecurePaymentRequest request) =>
 $"entityId={EntityId}" +
 $"&amount={request.Amount}" +
 $"&currency={request.Currency}" +
 $"&paymentBrand={request.PaymentBrand}" +
 (
     string.IsNullOrEmpty(request.RecurringType) || request.RecurringType == "INITIAL" ?
     $"&card.number={request.Card.Number}" +
     $"&card.holder={request.Card.Holder}" +
     $"&card.expiryMonth={request.Card.ExpiryMonth}" +
     $"&card.expiryYear={request.Card.ExpiryYear}" +
     $"&card.cvv={request.Card.Cvv}" :
     string.Empty
 ) +
 (
     !string.IsNullOrEmpty(request.RecurringType) ?
     $"&recurringType={request.RecurringType}" :
     string.Empty
 ) +
 (
     request.CreateRegistration ?
     $"&createRegistration=true" :
     string.Empty
 ) +
 $"&shopperResultUrl={request.ShopperResultUrl}" +
 (
     !string.IsNullOrWhiteSpace(_testMode) ?
     $"&testMode={_testMode}" :
     ""
 );
Пример #2
0
        public static ThreeDSecurePaymentRequest CreateMaskedClone(this ThreeDSecurePaymentRequest obj)
        {
            ThreeDSecurePaymentRequest clone = obj.DeepClone();

            clone.Card?.Mask();
            return(clone);
        }
Пример #3
0
        public IActionResult ThreeDSecure(PaymentViewModel model)
        {
            PayOnClient client = new PayOnClient(Settings.EntityIdThreeDSecure, Settings.UserId, Settings.Password, Settings.BaseUrl);
            ThreeDSecurePaymentRequest request = new ThreeDSecurePaymentRequest
            {
                PaymentBrand = model.PaymentBrand,
                Amount       = model.Amount,
                Card         = new CardAccount
                {
                    Holder       = model.CardHolder,
                    Number       = model.CardNumber,
                    ExpiryMonth  = model.CardExpiryMonth,
                    ExpiryYear   = model.CardExpiryYear,
                    Cvv          = model.CardCvv,
                    ThreeDSecure = true,
                    PaymentBrand = model.PaymentBrand
                },
                Currency         = "ZAR",
                Timestamp        = DateTime.Now.ToIso8601String(),
                ShopperResultUrl = $"{Request.Scheme}://{Request.Host}/Home/ThreeDSecureConfirm"
            };

            try
            {
                ThreeDSecurePaymentResponse response = client.RequestThreeDSecurePayment(request);

                if (response.Result.GetResultStatus() == ResultStatus.Approved)
                {
                    model.Status = $"Card not enrolled for 3D Secure. Result code: {response.Result.Code}. Result Description: {response.Result.Description}";
                    return(View(model));
                }

                if (response.Result.GetResultStatus() == ResultStatus.Declined)
                {
                    model.Status = $"Declined. Result code: {response.Result.Code}. Result Description: {response.Result.Description}";
                    return(View(model));
                }

                if (response.Result.GetResultStatus() != ResultStatus.Pending)
                {
                    model.Status = $"Unexpected response. Result code: {response.Result.Code}. Result Description: {response.Result.Description}";
                    return(View(model));
                }

                return(Content(GetRedirectPageHtml(response), "text/html"));
            }
            catch (Exception ex)
            {
                _logger.LogError("Unable to start 3D Secure Transaction", ex);
                model.Status = $"Unable to start 3D Secure Transaction. {ex}";
            }

            return(View(model));
        }
Пример #4
0
        public void ThreeDSecurePayment()
        {
            PayOnClient threeDSecureClient = new PayOnClient(EntityId_ThreeDPayment, UserId, Password, BaseUrl, TestMode);

            CardAccount[] cardAccounts = TestData.GetTestPaymentCardAccounts()
                                         .Where(x => x.ThreeDSecure)
                                         .ToArray();

            foreach (var cardAccount in cardAccounts)
            {
                int idx = Array.FindIndex(cardAccounts, x => x == cardAccount) + 1;
                Log($"\nTest card: {idx}/{cardAccounts.Count()}");

                ThreeDSecurePaymentRequest request = new ThreeDSecurePaymentRequest
                {
                    PaymentBrand     = cardAccount.PaymentBrand,
                    Amount           = "123.45",
                    Card             = cardAccount,
                    Currency         = "ZAR",
                    Timestamp        = DateTime.Now.ToIso8601String(),
                    ShopperResultUrl = "https://newco/payment/confirm"
                };

                Log("3D Secure Request", JsonConvert.SerializeObject(request));
                ThreeDSecurePaymentResponse response = threeDSecureClient.RequestThreeDSecurePayment(request);
                Log("3D Secure Response", JsonConvert.SerializeObject(response));

                Assert.Equal(ResultStatus.Pending, response.Result.GetResultStatus());

                AcsRequest acsRequest = _payOnHttpClient.GetAcsRequestAsync(response).Result;

                Log("ACS Request", JsonConvert.SerializeObject(acsRequest));
                Assert.True(acsRequest.IsValid);
                AcsResponse acsResponse = _payOnHttpClient.PostAcsRequestAsync(acsRequest).Result;
                Log("ACS Response", JsonConvert.SerializeObject(acsResponse));

                Assert.True(acsResponse.IsValid);

                AcsRedirectResponse acsRedirectResponse = _payOnHttpClient.GetAcsRedirectResponseAsync(acsResponse).Result;

                Log("ACS Redirect Response", JsonConvert.SerializeObject(acsRedirectResponse));
                Assert.True(acsRedirectResponse.IsValid);
                ThreeDSecurePaymentStatusResponse paymentStatus = threeDSecureClient.RequestThreeDSecurePaymentStatus(acsRedirectResponse.Id);
                Log("3D Secure Payment Status", JsonConvert.SerializeObject(paymentStatus));

                Assert.Equal(ResultStatus.Approved, paymentStatus.Result.GetResultStatus());
            }
        }
        internal ThreeDSecurePaymentResponse RequestPayment(ThreeDSecurePaymentRequest request)
        {
            string requestData = CreateRequestData(request);

            return(Request(PaymentPath, requestData));
        }
Пример #6
0
        public ThreeDSecurePaymentResponse RequestThreeDSecurePayment(ThreeDSecurePaymentRequest request)
        {
            ThreeDSecureManager paymentManager = new ThreeDSecureManager(_baseUrl, _entityId, _authentication, _testMode, _logger);

            return(paymentManager.RequestPayment(request));
        }