Beispiel #1
0
        public IActionResult RecurringRepeat(PaymentViewModel model)
        {
            PayOnClient         client           = new PayOnClient(Settings.EntityIdRecurring, Settings.UserId, Settings.Password, Settings.BaseUrl);
            RegistrationRequest recurringRequest = new RegistrationRequest
            {
                PaymentBrand       = model.PaymentBrand,
                Amount             = model.Amount,
                Currency           = model.Currency,
                RecurringType      = "REPEATED",
                PaymentType        = "DB",
                CreateRegistration = false,
                RegistrationId     = model.RegistrationId
            };

            try
            {
                RegistrationResponse response = client.RequestRegistration(recurringRequest);
                model.Id     = response.Id;
                model.Status = $"{Enum.GetName(typeof(ResultStatus), response.Result.GetResultStatus())}. Result code: {response.Result.Code}. Result Description: {response.Result.Description}";

                return(View(model));
            }
            catch (Exception ex)
            {
                _logger.LogError("Unable to start 3D Secure Transaction", ex);
                model.Status = $"Unable to start 3D Secure Transaction. {ex}";
            }

            return(View(model));
        }
Beispiel #2
0
        public IActionResult RecurringInitialConfirm(string id, string resourcePath)
        {
            PayOnClient      client = new PayOnClient(Settings.EntityIdThreeDSecure, Settings.UserId, Settings.Password, Settings.BaseUrl);
            PaymentViewModel model  = new PaymentViewModel
            {
                Id = id
            };

            try
            {
                PaymentStatusResponse paymentStatus = client.RequestPaymentStatus(id);
                model.Status         = $"{Enum.GetName(typeof(ResultStatus), paymentStatus.Result.GetResultStatus())}. Result code: {paymentStatus.Result.Code}. Result Description: {paymentStatus.Result.Description}";
                model.RegistrationId = CachedRegistrationId;
                model.Amount         = "234.56";
                model.Currency       = "ZAR";
                model.PaymentBrand   = paymentStatus.PaymentBrand;

                return(View(model));
            }
            catch (Exception ex)
            {
                _logger.LogError("Unable to start 3D Secure Transaction", ex);
                model.Status = $"Unable to start 3D Secure Transaction. {ex}";
            }

            return(View(model));
        }
Beispiel #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));
        }
Beispiel #4
0
        public IActionResult RecurringInitial(PaymentViewModel model)
        {
            PayOnClient    client  = new PayOnClient(Settings.EntityIdThreeDSecure, Settings.UserId, Settings.Password, Settings.BaseUrl);
            PaymentRequest request = new PaymentRequest
            {
                PaymentBrand = model.PaymentBrand,
                Amount       = model.Amount,
                Card         = new CardAccount
                {
                    Holder       = model.CardHolder,
                    Number       = model.CardNumber,
                    ExpiryMonth  = model.CardExpiryMonth,
                    ExpiryYear   = model.CardExpiryYear,
                    Cvv          = model.CardCvv,
                    PaymentBrand = model.PaymentBrand
                },
                Currency           = "ZAR",
                PaymentType        = "DB",
                RecurringType      = "INITIAL",
                CreateRegistration = true,
                Timestamp          = DateTime.Now.ToIso8601String(),
                ShopperResultUrl   = $"{Request.Scheme}://{Request.Host}/Home/RecurringInitialConfirm"
            };

            try
            {
                PaymentResponse response = client.RequestPayment(request);

                model.Id = response.Id;

                // Not enrolled for 3D Secure
                if (response.Result.GetResultStatus() == ResultStatus.Approved)
                {
                    return(RedirectToAction("RedirectComplete", response.RegistrationId));
                }

                if (response.Result.GetResultStatus() == ResultStatus.Declined || response.Result.GetResultStatus() != ResultStatus.Pending)
                {
                    model.Status = $"{Enum.GetName(typeof(ResultStatus), response.Result.GetResultStatus())}. Result code: {response.Result.Code}. Result Description: {response.Result.Description}";
                    return(View(model));
                }

                CachedRegistrationId = response.RegistrationId;

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

            return(View(model));
        }
Beispiel #5
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 #6
0
        private PaymentStatusResponse RequestPaymentStatus(PayOnClient threeDSecureClient, CardAccount cardAccount, Redirect redirect)
        {
            AcsRequest acsRequest = _payOnHttpClient.GetAcsRequestAsync(redirect).Result;

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

            Log("ACS Response", JsonConvert.SerializeObject(acsResponse));

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

            Log("ACS Redirect Response", JsonConvert.SerializeObject(acsRedirectResponse));
            PaymentStatusResponse paymentStatus = threeDSecureClient.RequestPaymentStatus(acsRedirectResponse.Id);

            Log("3D Secure Payment Status", JsonConvert.SerializeObject(paymentStatus));

            return(paymentStatus);
        }
Beispiel #7
0
        public IActionResult Reverse(string id)
        {
            PayOnClient      client = new PayOnClient(Settings.EntityIdThreeDSecure, Settings.UserId, Settings.Password, Settings.BaseUrl);
            PaymentViewModel model  = new PaymentViewModel();

            try
            {
                PaymentRequest paymentRequest = new PaymentRequest
                {
                    PaymentType = "RV",
                };
                PaymentResponse response = client.RequestPaymentReversal(id);

                model.Status = $"{Enum.GetName(typeof(ResultStatus), response.Result.GetResultStatus())}. Result code: {response.Result.Code}. Result Description: {response.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));
        }
Beispiel #8
0
        public void ThreeDSecureTokenizationWithRecurringPayment()
        {
            PayOnClient threeDSecureClient     = new PayOnClient(EntityId_ThreeDPayment, UserId, Password, BaseUrl, TestMode);
            PayOnClient recurringPaymentClient = new PayOnClient(EntityId_Recurring, UserId, Password, BaseUrl, TestMode);

            CardAccount[] cardAccounts = TestData.GetTestPaymentCardAccounts();

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

                PaymentRequest request = new PaymentRequest
                {
                    PaymentBrand       = cardAccount.PaymentBrand,
                    Amount             = "1.00",
                    Currency           = "ZAR",
                    Card               = cardAccount,
                    PaymentType        = "DB",
                    RecurringType      = "INITIAL",
                    CreateRegistration = true,
                    ShopperResultUrl   = "https://newco/payment/confirm",
                    Timestamp          = DateTime.Now.ToIso8601String()
                };

                Log("3D Secure Request with Tokenization", JsonConvert.SerializeObject(request));
                PaymentResponse response = threeDSecureClient.RequestPayment(request);
                Log("3D Secure Response with Tokenization", JsonConvert.SerializeObject(response));

                string registrationId = response.RegistrationId;

                Assert.NotNull(registrationId);

                // If ACS is required
                if (response.Result.GetResultStatus() == ResultStatus.Pending)
                {
                    PaymentStatusResponse paymentResult = RequestPaymentStatus(threeDSecureClient, cardAccount, response.Redirect);
                    Assert.Equal(ResultStatus.Approved, paymentResult?.Result?.GetResultStatus());
                }
                else
                {
                    Assert.Equal(ResultStatus.Approved, response.Result.GetResultStatus());
                }

                // Recurring transaction
                RegistrationRequest recurringRequest = new RegistrationRequest
                {
                    PaymentBrand       = cardAccount.PaymentBrand,
                    Amount             = "123.45",
                    Currency           = "ZAR",
                    RecurringType      = "REPEATED",
                    PaymentType        = "DB",
                    CreateRegistration = false,
                    RegistrationId     = registrationId
                };

                Log("Initial Recurring Registration Request", JsonConvert.SerializeObject(recurringRequest));
                RegistrationResponse recurringResponse = recurringPaymentClient.RequestRegistration(recurringRequest);
                Log("Repeat Recurring Registration Response", JsonConvert.SerializeObject(recurringResponse));

                Assert.Equal(ResultStatus.Approved, recurringResponse.Result.GetResultStatus());
            }
        }