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