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)); }
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()); } }