Skip to content

Commit a23875c

Browse files
authored
[ACL-226] New HPP link builder with ability to show mandate results, and set wait and/or signup (#328)
1 parent 53c86a5 commit a23875c

16 files changed

+320
-50
lines changed

README.md

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,30 @@ CompletableFuture<ApiResponse<CreatePaymentResponse>> paymentResponse = client
123123
ApiResponse<CreatePaymentResponse> payment = paymentResponse.get();
124124
```
125125

126-
### Build a link to our hosted createPaymentResponse page
126+
### Build a link to our Hosted Payment Page (HPP)
127+
128+
By default, the Hosted Payment Page link builder creates a payment result page, so you can just pass
129+
a `resource_id`, a `resource_token` and `return_uri` parameters:
130+
```java
131+
URI link = client.hppLinkBuilder()
132+
.resourceType(ResourceType.PAYMENT) // Either PAYMENT or MANDATE. Not mandatory, if not specified PAYMENT is used as default
133+
.resourceId("$resourceId")
134+
.resourceToken("$resourceToken")
135+
.returnUri(URI.create("http://yourdomain.com"))
136+
.build();
137+
```
138+
If needed, you can specify extra parameters as per our [public documentation](https://docs.truelayer.com/docs/authorise-payments-or-mandates-with-the-hpp#1-build-a-hpp-url),
139+
like `max_wait_for_result` and `signup`:
140+
127141
```java
128-
URI hppLink = client.hpp().getHostedPaymentPageLink("your-createPaymentResponse-id",
129-
"your-createPaymentResponse-token",
130-
URI.create("http://yourdomain.com"));
142+
URI link = client.hppLinkBuilder()
143+
.resourceType(ResourceType.MANDATE)
144+
.resourceId("$resourceId")
145+
.resourceToken("$resourceToken")
146+
.returnUri(URI.create("http://yourdomain.com"))
147+
.maxWaitForResultSeconds(15)
148+
.signup(true)
149+
.build();
131150
```
132151

133152
## Local setup

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Main properties
22
group=com.truelayer
33
archivesBaseName=truelayer-java
4-
version=16.0.1
4+
version=16.1.0
55

66
# Artifacts properties
77
sonatype_repository_url=https://s01.oss.sonatype.org/service/local/
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package com.truelayer.java;
2+
3+
import static org.apache.commons.lang3.ObjectUtils.isEmpty;
4+
5+
import com.truelayer.java.entities.ResourceType;
6+
import java.net.URI;
7+
import java.text.MessageFormat;
8+
import lombok.AccessLevel;
9+
import lombok.RequiredArgsConstructor;
10+
11+
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
12+
public class HostedPaymentPageLinkBuilder {
13+
private final Environment environment;
14+
15+
private ResourceType resourceType = ResourceType.PAYMENT;
16+
private String resourceId;
17+
private String resourceToken;
18+
private URI returnUri;
19+
private Integer maxWaitForResultSeconds;
20+
private Boolean signup;
21+
22+
public HostedPaymentPageLinkBuilder resourceType(ResourceType resourceType) {
23+
this.resourceType = resourceType;
24+
return this;
25+
}
26+
27+
public HostedPaymentPageLinkBuilder resourceId(String resourceId) {
28+
this.resourceId = resourceId;
29+
return this;
30+
}
31+
32+
public HostedPaymentPageLinkBuilder resourceToken(String resourceToken) {
33+
this.resourceToken = resourceToken;
34+
return this;
35+
}
36+
37+
public HostedPaymentPageLinkBuilder returnUri(URI returnUri) {
38+
this.returnUri = returnUri;
39+
return this;
40+
}
41+
42+
public HostedPaymentPageLinkBuilder maxWaitForResultSeconds(int maxWaitForResultSeconds) {
43+
this.maxWaitForResultSeconds = maxWaitForResultSeconds;
44+
return this;
45+
}
46+
47+
public HostedPaymentPageLinkBuilder signup(boolean signup) {
48+
this.signup = signup;
49+
return this;
50+
}
51+
52+
public URI build() {
53+
if (isEmpty(this.resourceId)) {
54+
throw new TrueLayerException("resource_id must be set");
55+
}
56+
57+
if (isEmpty(resourceToken)) {
58+
throw new TrueLayerException("resource_token must be set");
59+
}
60+
61+
if (isEmpty(returnUri) || isEmpty(returnUri.toString())) {
62+
throw new TrueLayerException("return_uri must be set");
63+
}
64+
65+
URI hppLink = URI.create(MessageFormat.format(
66+
"{0}/{1}#{2}={3}&resource_token={4}&return_uri={5}",
67+
environment.getHppUri(),
68+
resourceType.getHppLinkPath(),
69+
resourceType.getHppLinkQueryParameter(),
70+
resourceId,
71+
resourceToken,
72+
returnUri));
73+
74+
if (!isEmpty(maxWaitForResultSeconds)) {
75+
hppLink = URI.create(MessageFormat.format("{0}&max_wait_for_result={1}", hppLink, maxWaitForResultSeconds));
76+
}
77+
78+
if (!isEmpty(signup)) {
79+
hppLink = URI.create(MessageFormat.format("{0}&signup={1}", hppLink, signup));
80+
}
81+
82+
return hppLink;
83+
}
84+
}

src/main/java/com/truelayer/java/ITrueLayerClient.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,17 @@ public interface ITrueLayerClient {
6363
/**
6464
* Entrypoint for Hosted Payment Page related services.
6565
* @return a utility to build a Hosted Payment Page URL.
66+
* @deprecated use {@link #hppLinkBuilder()} instead.
6667
*/
68+
@Deprecated
6769
IHostedPaymentPageLinkBuilder hpp();
6870

71+
/**
72+
* Entrypoint for Hosted Payment Page related services.
73+
* @return a utility to build a Hosted Payment Page URL.
74+
*/
75+
HostedPaymentPageLinkBuilder hppLinkBuilder();
76+
6977
/**
7078
* Utility to submit payment returns parameters.
7179
* @param request a submit payment return parameters payload

src/main/java/com/truelayer/java/TrueLayerClient.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,25 @@ public class TrueLayerClient implements ITrueLayerClient {
3434
private ISignupPlusHandler signupPlusHandler;
3535
private ICommonHandler commonHandler;
3636

37-
private IHostedPaymentPageLinkBuilder hostedPaymentPageLinkBuilder;
37+
/**
38+
* @deprecated - use {@link #hostedPaymentPageLinkBuilder} instead.
39+
*/
40+
@Deprecated
41+
private IHostedPaymentPageLinkBuilder hppLinkBuilder;
42+
43+
private HostedPaymentPageLinkBuilder hostedPaymentPageLinkBuilder;
3844

3945
public TrueLayerClient(
4046
IAuthenticationHandler authenticationHandler,
4147
IHostedPaymentPageLinkBuilder hostedPaymentPageLinkBuilder,
4248
ICommonHandler commonHandler,
43-
ISignupPlusHandler signupPlusHandler) {
49+
ISignupPlusHandler signupPlusHandler,
50+
HostedPaymentPageLinkBuilder hppLinkBuilder) {
4451
this.authenticationHandler = authenticationHandler;
45-
this.hostedPaymentPageLinkBuilder = hostedPaymentPageLinkBuilder;
52+
this.hppLinkBuilder = hostedPaymentPageLinkBuilder;
4653
this.commonHandler = commonHandler;
4754
this.signupPlusHandler = signupPlusHandler;
55+
this.hostedPaymentPageLinkBuilder = hppLinkBuilder;
4856
}
4957

5058
/**
@@ -124,7 +132,13 @@ public ISignupPlusHandler signupPlus() {
124132
* {@inheritDoc}
125133
*/
126134
@Override
135+
@Deprecated
127136
public IHostedPaymentPageLinkBuilder hpp() {
137+
return this.hppLinkBuilder;
138+
}
139+
140+
@Override
141+
public HostedPaymentPageLinkBuilder hppLinkBuilder() {
128142
return this.hostedPaymentPageLinkBuilder;
129143
}
130144

src/main/java/com/truelayer/java/TrueLayerClientBuilder.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import com.truelayer.java.commonapi.ICommonApi;
1010
import com.truelayer.java.commonapi.ICommonHandler;
1111
import com.truelayer.java.entities.RequestScopes;
12-
import com.truelayer.java.hpp.HostedPaymentPageLinkBuilder;
1312
import com.truelayer.java.hpp.IHostedPaymentPageLinkBuilder;
1413
import com.truelayer.java.http.OkHttpClientFactory;
1514
import com.truelayer.java.http.RetrofitFactory;
@@ -229,8 +228,9 @@ public TrueLayerClient build() {
229228
.httpClient(RetrofitFactory.build(authServerApiHttpClient, environment.getAuthApiUri()))
230229
.build();
231230

232-
IHostedPaymentPageLinkBuilder hppLinkBuilder =
233-
HostedPaymentPageLinkBuilder.New().uri(environment.getHppUri()).build();
231+
IHostedPaymentPageLinkBuilder hppLinkBuilder = com.truelayer.java.hpp.HostedPaymentPageLinkBuilder.New()
232+
.uri(environment.getHppUri())
233+
.build();
234234

235235
// We're reusing a client with only User agent and Idempotency key interceptors and give it our base payment
236236
// endpoint
@@ -254,7 +254,12 @@ public TrueLayerClient build() {
254254
// As per our RFC, if signing options is not configured we create a client which is able to interact
255255
// with the Authentication API only
256256
if (isEmpty(signingOptions)) {
257-
return new TrueLayerClient(authenticationHandler, hppLinkBuilder, commonHandler, signupPlusHandler);
257+
return new TrueLayerClient(
258+
authenticationHandler,
259+
hppLinkBuilder,
260+
commonHandler,
261+
signupPlusHandler,
262+
new HostedPaymentPageLinkBuilder(environment));
258263
}
259264

260265
// The client used for PayIn endpoints has the authenticated as baseline, but adds the signature manager
@@ -319,7 +324,8 @@ public TrueLayerClient build() {
319324
payoutsHandler,
320325
signupPlusHandler,
321326
commonHandler,
322-
hppLinkBuilder);
327+
hppLinkBuilder,
328+
new HostedPaymentPageLinkBuilder(environment));
323329
}
324330

325331
private boolean customScopesPresent() {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.truelayer.java.entities;
2+
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
6+
@RequiredArgsConstructor
7+
@Getter
8+
public enum ResourceType {
9+
PAYMENT("payments", "payment_id"),
10+
MANDATE("mandates", "mandate_id"),
11+
;
12+
13+
private final String hppLinkPath;
14+
private final String hppLinkQueryParameter;
15+
}

src/main/java/com/truelayer/java/hpp/HostedPaymentPageLinkBuilder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99

1010
/**
1111
* {@inheritDoc}
12+
* @deprecated - use {@link com.truelayer.java.HostedPaymentPageLinkBuilder} instead.
1213
*/
1314
@Builder(builderMethodName = "New")
1415
@Getter
16+
@Deprecated
1517
public class HostedPaymentPageLinkBuilder implements IHostedPaymentPageLinkBuilder {
16-
/**
17-
* @param uri the hosted payment page URI
18-
*/
18+
1919
private URI uri;
2020

2121
@Override

src/main/java/com/truelayer/java/hpp/IHostedPaymentPageLinkBuilder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44

55
/**
66
* Exposes all the Hosted Payment Page related capabilities of the library.
7+
* @deprecated - use {@link com.truelayer.java.HostedPaymentPageLinkBuilder} instead
78
*/
9+
@Deprecated
810
public interface IHostedPaymentPageLinkBuilder {
11+
912
/**
1013
* Builds a link to TrueLayer HPP with the given details
1114
* @param paymentId the id of the payment created with a previous call to the Create Payment endpoint

0 commit comments

Comments
 (0)