internal string CreateRequestData(ThreeDSecurePaymentRequest request) => $"entityId={EntityId}" + $"&amount={request.Amount}" + $"¤cy={request.Currency}" + $"&paymentBrand={request.PaymentBrand}" + ( string.IsNullOrEmpty(request.RecurringType) || request.RecurringType == "INITIAL" ? $"&card.number={request.Card.Number}" + $"&card.holder={request.Card.Holder}" + $"&card.expiryMonth={request.Card.ExpiryMonth}" + $"&card.expiryYear={request.Card.ExpiryYear}" + $"&card.cvv={request.Card.Cvv}" : string.Empty ) + ( !string.IsNullOrEmpty(request.RecurringType) ? $"&recurringType={request.RecurringType}" : string.Empty ) + ( request.CreateRegistration ? $"&createRegistration=true" : string.Empty ) + $"&shopperResultUrl={request.ShopperResultUrl}" + ( !string.IsNullOrWhiteSpace(_testMode) ? $"&testMode={_testMode}" : "" );
public static ThreeDSecurePaymentRequest CreateMaskedClone(this ThreeDSecurePaymentRequest obj) { ThreeDSecurePaymentRequest 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()); } }
internal ThreeDSecurePaymentResponse RequestPayment(ThreeDSecurePaymentRequest request) { string requestData = CreateRequestData(request); return(Request(PaymentPath, requestData)); }
public ThreeDSecurePaymentResponse RequestThreeDSecurePayment(ThreeDSecurePaymentRequest request) { ThreeDSecureManager paymentManager = new ThreeDSecureManager(_baseUrl, _entityId, _authentication, _testMode, _logger); return(paymentManager.RequestPayment(request)); }