public static ThreeDSecurePaymentStatusResponse CreateMaskedClone(this ThreeDSecurePaymentStatusResponse obj)
        {
            ThreeDSecurePaymentStatusResponse clone = obj.DeepClone();

            clone.Card?.Mask();
            return(clone);
        }
Beispiel #2
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());
            }
        }
Beispiel #3
0
        public IActionResult ThreeDSecureConfirm(string id, string resourcePath)
        {
            PayOnClient      client = new PayOnClient(Settings.EntityIdThreeDSecure, Settings.UserId, Settings.Password, Settings.BaseUrl);
            PaymentViewModel model  = new PaymentViewModel
            {
                Id = id
            };

            try
            {
                ThreeDSecurePaymentStatusResponse paymentStatus = client.RequestThreeDSecurePaymentStatus(id);
                model.Status = $"{Enum.GetName(typeof(ResultStatus), paymentStatus.Result.GetResultStatus())}. Result code: {paymentStatus.Result.Code}. Result Description: {paymentStatus.Result.Description}";;
            }
            catch (Exception ex)
            {
                _logger.LogError("Unable to start 3D Secure Transaction", ex);
                model.Status = $"Unable to start 3D Secure Transaction. {ex}";
            }

            return(View(model));
        }