public static ThreeDSecurePaymentResponse CreateMaskedClone(this ThreeDSecurePaymentResponse obj) { ThreeDSecurePaymentResponse clone = obj.DeepClone(); clone.Card?.Mask(); return(clone); }
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 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 string GetRedirectPageHtml(ThreeDSecurePaymentResponse response) { return(GetRedirectPageHtml(response.Redirect)); }
public async Task <AcsRequest> GetAcsRequestAsync(ThreeDSecurePaymentResponse threeDSecurePaymentResponse) { return(await GetAcsRequestAsync(threeDSecurePaymentResponse.Redirect)); }