Skip to content

Commit 5eea405

Browse files
committed
Extend Hosted Payments & Payment Links to Four API
This commit extends the existing default Hosted Payments & Payment Links to Four CheckoutApi. A few improvements and updates were performed on the existing Request/Response classes to be up to date with the latest API changes.
1 parent fcb45e8 commit 5eea405

File tree

11 files changed

+175
-14
lines changed

11 files changed

+175
-14
lines changed

src/main/java/com/checkout/four/CheckoutApi.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import com.checkout.instruments.four.InstrumentsClient;
77
import com.checkout.marketplace.MarketplaceClient;
88
import com.checkout.payments.four.PaymentsClient;
9+
import com.checkout.payments.hosted.HostedPaymentsClient;
10+
import com.checkout.payments.links.PaymentLinksClient;
911
import com.checkout.risk.RiskClient;
1012
import com.checkout.sessions.SessionsClient;
1113
import com.checkout.tokens.TokensClient;
@@ -33,5 +35,9 @@ public interface CheckoutApi extends CheckoutApmApi {
3335

3436
ForexClient forexClient();
3537

38+
PaymentLinksClient paymentLinksClient();
39+
40+
HostedPaymentsClient hostedPaymentsClient();
41+
3642
}
3743

src/main/java/com/checkout/four/CheckoutApiImpl.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
import com.checkout.marketplace.MarketplaceClientImpl;
1818
import com.checkout.payments.four.PaymentsClient;
1919
import com.checkout.payments.four.PaymentsClientImpl;
20+
import com.checkout.payments.hosted.HostedPaymentsClient;
21+
import com.checkout.payments.hosted.HostedPaymentsClientImpl;
22+
import com.checkout.payments.links.PaymentLinksClient;
23+
import com.checkout.payments.links.PaymentLinksClientImpl;
2024
import com.checkout.risk.RiskClient;
2125
import com.checkout.risk.RiskClientImpl;
2226
import com.checkout.sessions.SessionsClient;
@@ -38,6 +42,8 @@ public class CheckoutApiImpl extends AbstractCheckoutApmApi implements CheckoutA
3842
private final MarketplaceClient marketplaceClient;
3943
private final SessionsClient sessionsClient;
4044
private final ForexClient forexClient;
45+
private final PaymentLinksClient paymentLinksClient;
46+
private final HostedPaymentsClient hostedPaymentsClient;
4147

4248
public CheckoutApiImpl(final ApiClient apiClient, final CheckoutConfiguration configuration) {
4349
super(apiClient, configuration);
@@ -51,6 +57,9 @@ public CheckoutApiImpl(final ApiClient apiClient, final CheckoutConfiguration co
5157
this.marketplaceClient = new MarketplaceClientImpl(apiClient, configuration);
5258
this.sessionsClient = new SessionsClientImpl(apiClient, configuration);
5359
this.forexClient = new ForexClientImpl(apiClient, configuration);
60+
this.paymentLinksClient = new PaymentLinksClientImpl(apiClient, configuration);
61+
this.hostedPaymentsClient = new HostedPaymentsClientImpl(apiClient, configuration);
62+
5463
}
5564

5665
@Override
@@ -102,4 +111,15 @@ public SessionsClient sessionsClient() {
102111
public ForexClient forexClient() {
103112
return forexClient;
104113
}
114+
115+
@Override
116+
public PaymentLinksClient paymentLinksClient() {
117+
return paymentLinksClient;
118+
}
119+
120+
@Override
121+
public HostedPaymentsClient hostedPaymentsClient() {
122+
return hostedPaymentsClient;
123+
}
124+
105125
}

src/main/java/com/checkout/payments/hosted/HostedPaymentRequest.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.checkout.common.Currency;
44
import com.checkout.common.CustomerRequest;
5+
import com.checkout.common.MarketplaceData;
6+
import com.checkout.common.PaymentSourceType;
57
import com.checkout.common.Product;
68
import com.checkout.payments.BillingDescriptor;
79
import com.checkout.payments.BillingInformation;
@@ -15,7 +17,6 @@
1517
import lombok.Builder;
1618
import lombok.Data;
1719

18-
import javax.validation.constraints.NotEmpty;
1920
import java.time.Instant;
2021
import java.util.List;
2122
import java.util.Map;
@@ -26,7 +27,6 @@ public final class HostedPaymentRequest {
2627

2728
private Long amount;
2829

29-
@NotEmpty
3030
private Currency currency;
3131

3232
private String reference;
@@ -37,7 +37,6 @@ public final class HostedPaymentRequest {
3737

3838
private ShippingDetails shipping;
3939

40-
@NotEmpty
4140
private BillingInformation billing;
4241

4342
private PaymentRecipient recipient;
@@ -48,15 +47,12 @@ public final class HostedPaymentRequest {
4847

4948
private RiskRequest risk;
5049

51-
@NotEmpty
5250
@SerializedName("success_url")
5351
private String successUrl;
5452

55-
@NotEmpty
5653
@SerializedName("cancel_url")
5754
private String cancelUrl;
5855

59-
@NotEmpty
6056
@SerializedName("failure_url")
6157
private String failureUrl;
6258

@@ -76,9 +72,19 @@ public final class HostedPaymentRequest {
7672
private PaymentType paymentType;
7773

7874
@SerializedName("payment_ip")
79-
public String paymentIp;
75+
private String paymentIp;
8076

8177
@SerializedName("billing_descriptor")
82-
public BillingDescriptor billingDescriptor;
78+
private BillingDescriptor billingDescriptor;
79+
80+
@SerializedName("allow_payment_methods")
81+
private List<PaymentSourceType> allowPaymentMethods;
82+
83+
// Only available in Four
84+
85+
@SerializedName("processing_channel_id")
86+
private String processingChannelId;
87+
88+
private MarketplaceData marketplace;
8389

8490
}

src/main/java/com/checkout/payments/hosted/HostedPaymentResponse.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import lombok.EqualsAndHashCode;
66
import lombok.ToString;
77

8+
import java.util.List;
9+
810
@Data
911
@EqualsAndHashCode(callSuper = true)
1012
@ToString(callSuper = true)
@@ -14,4 +16,6 @@ public final class HostedPaymentResponse extends Resource {
1416

1517
private String reference;
1618

19+
private List<Object> warnings;
20+
1721
}

src/main/java/com/checkout/payments/links/PaymentLinkDetailsResponse.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.checkout.common.Currency;
44
import com.checkout.common.CustomerResponse;
5+
import com.checkout.common.MarketplaceData;
56
import com.checkout.common.Product;
67
import com.checkout.common.Resource;
78
import com.checkout.payments.BillingInformation;
@@ -42,4 +43,11 @@ public final class PaymentLinkDetailsResponse extends Resource {
4243

4344
private Map<String, Object> metadata;
4445

46+
// Only available in Four
47+
48+
@SerializedName("processing_channel_id")
49+
private String processingChannelId;
50+
51+
private MarketplaceData marketplace;
52+
4553
}

src/main/java/com/checkout/payments/links/PaymentLinkRequest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.checkout.common.Currency;
44
import com.checkout.common.CustomerRequest;
5+
import com.checkout.common.PaymentSourceType;
56
import com.checkout.common.Product;
67
import com.checkout.payments.BillingDescriptor;
78
import com.checkout.payments.BillingInformation;
@@ -15,7 +16,6 @@
1516
import lombok.Builder;
1617
import lombok.Data;
1718

18-
import javax.validation.constraints.NotEmpty;
1919
import java.time.Instant;
2020
import java.util.List;
2121
import java.util.Map;
@@ -24,10 +24,8 @@
2424
@Builder
2525
public final class PaymentLinkRequest {
2626

27-
@NotEmpty
2827
private Long amount;
2928

30-
@NotEmpty
3129
private Currency currency;
3230

3331
private String reference;
@@ -41,7 +39,6 @@ public final class PaymentLinkRequest {
4139

4240
private ShippingDetails shipping;
4341

44-
@NotEmpty
4542
private BillingInformation billing;
4643

4744
private PaymentRecipient recipient;
@@ -71,9 +68,12 @@ public final class PaymentLinkRequest {
7168
private PaymentType paymentType;
7269

7370
@SerializedName("payment_ip")
74-
public String paymentIp;
71+
private String paymentIp;
7572

7673
@SerializedName("billing_descriptor")
77-
public BillingDescriptor billingDescriptor;
74+
private BillingDescriptor billingDescriptor;
75+
76+
@SerializedName("allow_payment_methods")
77+
private List<PaymentSourceType> allowPaymentMethods;
7878

7979
}

src/main/java/com/checkout/payments/links/PaymentLinkResponse.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import lombok.Data;
66
import lombok.EqualsAndHashCode;
77

8+
import java.util.List;
9+
810
@Data
911
@EqualsAndHashCode(callSuper = true)
1012
public final class PaymentLinkResponse extends Resource {
@@ -16,4 +18,6 @@ public final class PaymentLinkResponse extends Resource {
1618

1719
private String reference;
1820

21+
private List<Object> warnings;
22+
1923
}

src/test/java/com/checkout/TestHelper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.checkout.common.CountryCode;
66
import com.checkout.common.Currency;
77
import com.checkout.common.CustomerRequest;
8+
import com.checkout.common.PaymentSourceType;
89
import com.checkout.common.Phone;
910
import com.checkout.common.Product;
1011
import com.checkout.payments.BillingDescriptor;
@@ -21,6 +22,7 @@
2122
import java.time.Instant;
2223
import java.time.LocalDateTime;
2324
import java.time.ZoneOffset;
25+
import java.util.Arrays;
2426
import java.util.Collections;
2527
import java.util.UUID;
2628

@@ -116,6 +118,7 @@ public static PaymentLinkRequest createPaymentLinksRequest(final String referenc
116118
.city("London")
117119
.name("Awesome name")
118120
.build())
121+
.allowPaymentMethods(Arrays.asList(PaymentSourceType.CARD, PaymentSourceType.IDEAL))
119122
.build();
120123
}
121124

@@ -153,6 +156,7 @@ public static HostedPaymentRequest createHostedPaymentRequest(final String refer
153156
.city("London")
154157
.name("Awesome name")
155158
.build())
159+
.allowPaymentMethods(Arrays.asList(PaymentSourceType.CARD, PaymentSourceType.IDEAL))
156160
.build();
157161
}
158162

src/test/java/com/checkout/four/CheckoutApiImplTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ void shouldInstantiateAndRetrieveClients() {
2525
assertNotNull(checkoutApi.marketplaceClient());
2626
assertNotNull(checkoutApi.sessionsClient());
2727
assertNotNull(checkoutApi.forexClient());
28+
assertNotNull(checkoutApi.hostedPaymentsClient());
29+
assertNotNull(checkoutApi.paymentLinksClient());
30+
assertNotNull(checkoutApi.forexClient());
2831
// APMs
2932
assertNotNull(checkoutApi.idealClient());
3033
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.checkout.payments.four.hosted;
2+
3+
import com.checkout.PlatformType;
4+
import com.checkout.SandboxTestFixture;
5+
import com.checkout.TestHelper;
6+
import com.checkout.common.Currency;
7+
import com.checkout.payments.hosted.HostedPaymentDetailsResponse;
8+
import com.checkout.payments.hosted.HostedPaymentRequest;
9+
import com.checkout.payments.hosted.HostedPaymentResponse;
10+
import com.checkout.payments.hosted.HostedPaymentStatus;
11+
import org.junit.jupiter.api.Test;
12+
13+
import static org.junit.jupiter.api.Assertions.assertEquals;
14+
import static org.junit.jupiter.api.Assertions.assertNotNull;
15+
import static org.junit.jupiter.api.Assertions.assertTrue;
16+
17+
class HostedPaymentsTestIT extends SandboxTestFixture {
18+
19+
static final String REFERENCE = "ORD-123A";
20+
21+
HostedPaymentsTestIT() {
22+
super(PlatformType.FOUR);
23+
}
24+
25+
@Test
26+
void shouldCreateAndGetHostedPayments() {
27+
final HostedPaymentRequest request = TestHelper.createHostedPaymentRequest(REFERENCE);
28+
final HostedPaymentResponse response = blocking(() -> fourApi.hostedPaymentsClient().createAsync(request));
29+
assertNotNull(response);
30+
assertNotNull(response.getId());
31+
assertEquals(REFERENCE, response.getReference());
32+
assertNotNull(response.getLinks());
33+
assertTrue(response.getLinks().containsKey("redirect"));
34+
assertNotNull(response.getWarnings());
35+
36+
final HostedPaymentDetailsResponse detailsResponse = blocking(() -> fourApi.hostedPaymentsClient().get(response.getId()));
37+
38+
assertNotNull(detailsResponse);
39+
assertNotNull(detailsResponse.getId());
40+
assertNotNull(detailsResponse.getReference());
41+
assertEquals(HostedPaymentStatus.PAYMENT_PENDING, detailsResponse.getStatus());
42+
assertNotNull(detailsResponse.getAmount());
43+
assertNotNull(detailsResponse.getBilling());
44+
assertEquals(Currency.GBP, detailsResponse.getCurrency());
45+
assertNotNull(detailsResponse.getCustomer());
46+
assertNotNull(detailsResponse.getDescription());
47+
assertNotNull(detailsResponse.getFailureUrl());
48+
assertNotNull(detailsResponse.getSuccessUrl());
49+
assertNotNull(detailsResponse.getCancelUrl());
50+
51+
}
52+
}

0 commit comments

Comments
 (0)