Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 17 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,18 +96,23 @@ Client client = new Client("Your X-API-KEY", Environment.TEST);
PaymentsApi paymentsApi = new PaymentsApi(client);

// Create PaymentRequest
PaymentRequest paymentRequest = new PaymentRequest();
paymentRequest.setMerchantAccount("YOUR_MERCHANT_ACCOUNT");
CardDetails cardDetails = new CardDetails();
cardDetails.encryptedCardNumber("test_4111111111111111")
.encryptedSecurityCode("test_737")
.encryptedExpiryMonth("test_03")
.encryptedExpiryYear("test_2030");
paymentRequest.setPaymentMethod(new CheckoutPaymentMethod(cardDetails));
Amount amount = new Amount().currency("EUR").value(1000L);
paymentRequest.setAmount(amount);
paymentRequest.setReference("Your order number");
paymentRequest.setReturnUrl("https://your-company.com/checkout?shopperOrder=12xy..");
CardDetails cardDetails =
new CardDetails()
.type(CardDetails.TypeEnum.SCHEME)
.encryptedCardNumber("5136333333333335")
.holderName("John Doe")
.cvc("737")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For consistency with the other encrypted fields like encryptedCardNumber, encryptedExpiryMonth, and encryptedExpiryYear, it would be better to use encryptedSecurityCode instead of cvc. This also promotes a better security practice by avoiding the handling of raw CVC data, which has PCI compliance implications.

Suggested change
.cvc("737")
.encryptedSecurityCode("737")

.encryptedExpiryMonth("08")
.encryptedExpiryYear("2018");
PaymentRequest paymentRequest =
new PaymentRequest()
.merchantAccount("YOUR_MERCHANT_ACCOUNT")
.reference("YOUR_REFERENCE")
.amount(new Amount()
.currency("EUR")
.value(1000L))
.returnUrl("https://your-company.example.org/checkout?shopperOrder=12xy..")
.paymentMethod(new CheckoutPaymentMethod(cardDetails));

// Make a call to the /payments endpoint
PaymentResponse paymentResponse = paymentsApi.payments(paymentRequest);
Expand Down
131 changes: 69 additions & 62 deletions src/test/java/com/adyen/CheckoutTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,24 @@ public class CheckoutTest extends BaseTest {
@Test
public void TestPaymentSuccess() throws Exception {
Client client = createMockClientFromFile("mocks/checkout/paymentResponse.json");
Amount amount = new Amount().currency("EUR").value(1000L);
CardDetails cardDetails = new CardDetails();
cardDetails
.encryptedCardNumber("5136333333333335")
.holderName("John Doe")
.cvc("737")
.encryptedExpiryMonth("08")
.encryptedExpiryYear("2018");
cardDetails.setType(CardDetails.TypeEnum.SCHEME);
PaymentRequest paymentRequest = new PaymentRequest();
paymentRequest.setAmount(amount);
paymentRequest.setPaymentMethod(new CheckoutPaymentMethod(cardDetails));
CardDetails cardDetails =
new CardDetails()
.type(CardDetails.TypeEnum.SCHEME)
.encryptedCardNumber("5136333333333335")
.holderName("John Doe")
.cvc("737")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For consistency with the other encrypted fields like encryptedCardNumber, encryptedExpiryMonth, and encryptedExpiryYear, consider using encryptedSecurityCode instead of cvc. This would make the test data setup more consistent.

Suggested change
.cvc("737")
.encryptedSecurityCode("737")

.encryptedExpiryMonth("08")
.encryptedExpiryYear("2018");
PaymentRequest paymentRequest =
new PaymentRequest()
.merchantAccount("YOUR_MERCHANT_ACCOUNT")
.reference("YOUR_REFERENCE")
.amount(new Amount()
.currency("EUR")
.value(1000L))
.returnUrl("https://your-company.example.org/checkout?shopperOrder=12xy..")
.paymentMethod(new CheckoutPaymentMethod(cardDetails));

PaymentsApi checkout = new PaymentsApi(client);
PaymentResponse paymentResponse = checkout.payments(paymentRequest);
assertEquals("993617895204576J", paymentResponse.getPspReference());
Expand Down Expand Up @@ -121,8 +127,9 @@ public void TestDeserializePaymentRequestScheme() throws Exception {
@Test
public void TestPaymentMethodsSuccess() throws Exception {
Client client = createMockClientFromFile("mocks/checkout/paymentMethodsResponse.json");
PaymentMethodsRequest paymentMethodsRequest = new PaymentMethodsRequest();
paymentMethodsRequest.setMerchantAccount("myMerchantAccount");
PaymentMethodsRequest paymentMethodsRequest = new PaymentMethodsRequest()
.merchantAccount("myMerchantAccount");

PaymentsApi checkout = new PaymentsApi(client);
PaymentMethodsResponse paymentMethodsResponse = checkout.paymentMethods(paymentMethodsRequest);
assertEquals(1, paymentMethodsResponse.getPaymentMethods().size());
Expand All @@ -133,18 +140,15 @@ public void TestPaymentMethodsSuccess() throws Exception {
@Test
public void TestPaymentLinkSuccess() throws Exception {
Client client = createMockClientFromFile("mocks/checkout/paymentLinkResponse.json");
PaymentLinkRequest createPaymentLinkRequest = new PaymentLinkRequest();
Amount amount = new Amount().currency("EUR").value(500L);
createPaymentLinkRequest.setAmount(amount);
createPaymentLinkRequest.setMerchantAccount("myMerchantAccount");
createPaymentLinkRequest.setReference("merchantReference");
LineItem lineItem = new LineItem();
lineItem.setBrand("brand");
lineItem.setColor("color");
List<LineItem> lineItemList = new ArrayList<>();
lineItemList.add(lineItem);
createPaymentLinkRequest.setLineItems(lineItemList);
PaymentLinkRequest createPaymentLinkRequest = new PaymentLinkRequest()
.amount(new Amount().currency("EUR").value(500L))
.merchantAccount("myMerchantAccount")
.reference("merchantReference")
.lineItems(Arrays.asList(new LineItem()
.brand("brand")
.color("color")));
PaymentLinksApi checkout = new PaymentLinksApi(client);

PaymentLinkResponse paymentLinkResponse = checkout.paymentLinks(createPaymentLinkRequest);
assertEquals("https://test.adyen.link/PL6DB3157D27FFBBCF", paymentLinkResponse.getUrl());
assertEquals(PaymentLinkResponse.StatusEnum.ACTIVE, paymentLinkResponse.getStatus());
Expand Down Expand Up @@ -179,8 +183,8 @@ public void TestPatchPaymentLinkSuccess() throws Exception {
@Test
public void TestPaymentDetailsSuccess() throws Exception {
Client client = createMockClientFromFile("mocks/checkout/paymentDetailsResponse.json");
PaymentDetailsRequest detailsRequest = new PaymentDetailsRequest();
detailsRequest.setPaymentData("STATE_DATA");
PaymentDetailsRequest detailsRequest = new PaymentDetailsRequest()
.paymentData("STATE_DATA");
PaymentsApi checkout = new PaymentsApi(client);
PaymentDetailsResponse paymentDetailsResponse = checkout.paymentsDetails(detailsRequest);
assertEquals(
Expand All @@ -193,8 +197,8 @@ public void TestPaymentDetailsWithThreeDSRequestorChallengeInd() throws Exceptio
Client client =
createMockClientFromFile(
"mocks/checkout/paymentDetailsResponseThreeDSRequestorChallengeInd.json");
PaymentDetailsRequest detailsRequest = new PaymentDetailsRequest();
detailsRequest.setPaymentData("STATE_DATA");
PaymentDetailsRequest detailsRequest = new PaymentDetailsRequest()
.paymentData("STATE_DATA");
PaymentsApi checkout = new PaymentsApi(client);

PaymentDetailsResponse paymentDetailsResponse = checkout.paymentsDetails(detailsRequest);
Expand All @@ -210,8 +214,8 @@ public void TestPaymentDetailsWithThreeDSRequestorChallengeInd() throws Exceptio
public void TestPaymentDetailsWithThreeDS2Action() throws Exception {
Client client =
createMockClientFromFile("mocks/checkout/paymentDetailsResponseThreeDS2Action.json");
PaymentDetailsRequest detailsRequest = new PaymentDetailsRequest();
detailsRequest.setPaymentData("STATE_DATA");
PaymentDetailsRequest detailsRequest = new PaymentDetailsRequest()
.paymentData("STATE_DATA");
PaymentsApi checkout = new PaymentsApi(client);
PaymentDetailsResponse paymentDetailsResponse = checkout.paymentsDetails(detailsRequest);
assertEquals(
Expand All @@ -230,15 +234,16 @@ public void TestPaymentDetailsWithThreeDS2Action() throws Exception {
@Test
public void TestCreateSessionsSuccessCall() throws Exception {
Client client = createMockClientFromFile("mocks/checkout/createSessionsResponse.json");
CreateCheckoutSessionRequest sessionRequest = new CreateCheckoutSessionRequest();
sessionRequest.setReturnUrl("https://your-company.com/checkout?shopperOrder=12xy..");
sessionRequest.setCountryCode("NL");
sessionRequest.setReference("YOUR_PAYMENT_REFERENCE");
sessionRequest.setMerchantAccount("YOUR_MERCHANT_ACCOUNT");
Amount amount = new Amount().currency("EUR").value(100L);
sessionRequest.setAmount(amount);
CreateCheckoutSessionRequest sessionRequest = new CreateCheckoutSessionRequest()
.merchantAccount("YOUR_MERCHANT_ACCOUNT")
.amount(new Amount().currency("EUR").value(1000L))
.reference("YOUR_PAYMENT_REFERENCE")
.returnUrl("https://your-company.com/checkout?shopperOrder=12xy..")
.countryCode("NL");

PaymentsApi checkout = new PaymentsApi(client);
CreateCheckoutSessionResponse createCheckoutSessionResponse = checkout.sessions(sessionRequest);

assertEquals(
"Ab02b4c0!BFHSPFBQTEwM0NBNTM3RfCf5", createCheckoutSessionResponse.getSessionData());
assertEquals("CS1453E3730C313478", createCheckoutSessionResponse.getId());
Expand All @@ -253,11 +258,11 @@ public void TestCreateSessionsSuccessCall() throws Exception {
@Test
public void TestCreateOrderSuccessCall() throws Exception {
Client client = createMockClientFromFile("mocks/checkout/createOrderResponse.json");
CreateOrderRequest checkoutCreateOrderRequest = new CreateOrderRequest();
Amount amount = new Amount().currency("EUR").value(2500L);
checkoutCreateOrderRequest.setAmount(amount);
checkoutCreateOrderRequest.setReference("YOUR_ORDER_REFERENCE");
checkoutCreateOrderRequest.setMerchantAccount("YOUR_MERCHANT_ACOUNT");
CreateOrderRequest checkoutCreateOrderRequest = new CreateOrderRequest()
.amount(new Amount().currency("EUR").value(1000L))
.merchantAccount("YOUR_MERCHANT_ACCOUNT")
.reference("YOUR_ORDER_REFERENCE");

OrdersApi checkout = new OrdersApi(client);
CreateOrderResponse checkoutCreateOrderResponse = checkout.orders(checkoutCreateOrderRequest);
assertEquals("8616178914061985", checkoutCreateOrderResponse.getPspReference());
Expand All @@ -267,13 +272,13 @@ public void TestCreateOrderSuccessCall() throws Exception {
@Test
public void TestCancelOrderSuccessCall() throws Exception {
Client client = createMockClientFromFile("mocks/checkout/cancelOrderResponse.json");
CancelOrderRequest checkoutCancelOrderRequest = new CancelOrderRequest();
checkoutCancelOrderRequest.setMerchantAccount("YOUR_MERCHANT_ACCOUNT");
EncryptedOrderData encryptedOrderData = new EncryptedOrderData();
encryptedOrderData.setPspReference("8815517812932012");
encryptedOrderData.setOrderData("823fh892f8f18f4...148f13f9f3f");
checkoutCancelOrderRequest.setOrder(encryptedOrderData);
CancelOrderRequest checkoutCancelOrderRequest = new CancelOrderRequest()
.merchantAccount("YOUR_MERCHANT_ACCOUNT")
.order(new EncryptedOrderData()
.pspReference("8815517812932012")
.orderData("823fh892f8f18f4...148f13f9f3f"));
OrdersApi checkout = new OrdersApi(client);

CancelOrderResponse checkoutCancelOrderResponse =
checkout.cancelOrder(checkoutCancelOrderRequest);
assertEquals(
Expand All @@ -285,10 +290,11 @@ public void TestCancelOrderSuccessCall() throws Exception {
@Test
public void TestApplePaySessionsSuccessCall() throws Exception {
Client client = createMockClientFromFile("mocks/checkout/applePaySessionsResponse.json");
ApplePaySessionRequest createApplePaySessionRequest = new ApplePaySessionRequest();
createApplePaySessionRequest.setDisplayName("YOUR_MERCHANT_NAME");
createApplePaySessionRequest.setDomainName("YOUR_DOMAIN_NAME");
createApplePaySessionRequest.setMerchantIdentifier("YOUR_MERCHANT_ID");
ApplePaySessionRequest createApplePaySessionRequest = new ApplePaySessionRequest()
.displayName("YOUR_MERCHANT_NAME")
.domainName("YOUR_MERCHANT_DOMAIN")
.merchantIdentifier("YOUR_MERCHANT_ID");

UtilityApi checkout = new UtilityApi(client);
ApplePaySessionResponse applePaySessionResponse =
checkout.getApplePaySession(createApplePaySessionRequest);
Expand All @@ -299,17 +305,18 @@ public void TestApplePaySessionsSuccessCall() throws Exception {
@Test
public void TestDonationsSuccessCall() throws Exception {
Client client = createMockClientFromFile("mocks/checkout/donationResponse.json");
DonationPaymentRequest paymentDonationRequest = new DonationPaymentRequest();
Amount amount = new Amount().currency("EUR").value(1000L);
paymentDonationRequest.setAmount(amount);
paymentDonationRequest.setDonationAccount("YOUR_DONATION_ACCOUNT");
paymentDonationRequest.setMerchantAccount("YOUR_MERCHANT_ACCOUNT");
CardDonations cardDetails = new CardDonations().type(CardDonations.TypeEnum.SCHEME);
paymentDonationRequest.paymentMethod(new DonationPaymentMethod(cardDetails));
paymentDonationRequest.setReference("YOUR_MERCHANT_REFERENCE");
paymentDonationRequest.setReturnUrl("https://your-company.com/...");
DonationPaymentRequest paymentDonationRequest = new DonationPaymentRequest()
.donationAccount("YOUR_DONATION_ACCOUNT")
.merchantAccount("YOUR_MERCHANT_ACCOUNT")
.reference("YOUR_MERCHANT_REFERENCE")
.returnUrl("https://your-company.com/checkout?shopperOrder=12xy..")
.countryCode("NL")
.amount(new Amount().currency("EUR").value(1000L))
.paymentMethod(new DonationPaymentMethod(new CardDonations().type(CardDonations.TypeEnum.SCHEME)));

DonationsApi donationsApi = new DonationsApi(client);
DonationPaymentResponse donationResponse = donationsApi.donations(paymentDonationRequest);

assertEquals(
PaymentResponse.ResultCodeEnum.AUTHORISED, donationResponse.getPayment().getResultCode());
assertEquals("UNIQUE_RESOURCE_ID", donationResponse.getId());
Expand Down
5 changes: 5 additions & 0 deletions src/test/java/com/adyen/ErrorHandlingTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.adyen;

import com.adyen.enums.Environment;
import com.adyen.model.ApiError;
import com.adyen.model.management.CreateAllowedOriginRequest;
import com.adyen.service.checkout.PaymentLinksApi;
import com.adyen.service.exception.ApiException;
Expand Down Expand Up @@ -36,6 +37,10 @@ public void CheckoutErrorTest() throws IOException, ApiException {
service.getPaymentLink("1234");
} catch (ApiException e) {
Assert.assertTrue(e.getResponseBody().contains("Invalid payment link ID"));
ApiError apiError = e.getError();
Assert.assertEquals("Validation", apiError.getErrorType());
Assert.assertEquals("Invalid payment link ID", apiError.getMessage());

}
}
}