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