Add an optional description to the payment intent request

This commit is contained in:
Ehren Kret 2021-05-12 17:37:26 -05:00
parent ac7eb88194
commit e9a3d52d7f
3 changed files with 22 additions and 3 deletions

View File

@ -16,6 +16,7 @@ public class DonationConfiguration {
private String uri; private String uri;
private String apiKey; private String apiKey;
private String description;
private Set<String> supportedCurrencies; private Set<String> supportedCurrencies;
private CircuitBreakerConfiguration circuitBreaker = new CircuitBreakerConfiguration(); private CircuitBreakerConfiguration circuitBreaker = new CircuitBreakerConfiguration();
private RetryConfiguration retry = new RetryConfiguration(); private RetryConfiguration retry = new RetryConfiguration();
@ -42,6 +43,16 @@ public class DonationConfiguration {
this.apiKey = apiKey; this.apiKey = apiKey;
} }
@JsonProperty
public String getDescription() {
return description;
}
@VisibleForTesting
public void setDescription(final String description) {
this.description = description;
}
@JsonProperty @JsonProperty
@NotEmpty @NotEmpty
public Set<String> getSupportedCurrencies() { public Set<String> getSupportedCurrencies() {

View File

@ -20,6 +20,7 @@ import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.Duration; import java.time.Duration;
import java.util.Base64; import java.util.Base64;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
@ -48,12 +49,14 @@ public class DonationController {
private final URI uri; private final URI uri;
private final String apiKey; private final String apiKey;
private final String description;
private final Set<String> supportedCurrencies; private final Set<String> supportedCurrencies;
private final FaultTolerantHttpClient httpClient; private final FaultTolerantHttpClient httpClient;
public DonationController(final Executor executor, final DonationConfiguration configuration) { public DonationController(final Executor executor, final DonationConfiguration configuration) {
this.uri = URI.create(configuration.getUri()); this.uri = URI.create(configuration.getUri());
this.apiKey = configuration.getApiKey(); this.apiKey = configuration.getApiKey();
this.description = configuration.getDescription();
this.supportedCurrencies = configuration.getSupportedCurrencies(); this.supportedCurrencies = configuration.getSupportedCurrencies();
this.httpClient = FaultTolerantHttpClient.newBuilder() this.httpClient = FaultTolerantHttpClient.newBuilder()
.withCircuitBreaker(configuration.getCircuitBreaker()) .withCircuitBreaker(configuration.getCircuitBreaker())
@ -77,11 +80,15 @@ public class DonationController {
return CompletableFuture.completedFuture(Response.status(422).build()); return CompletableFuture.completedFuture(Response.status(422).build());
} }
final Map<String, String> formData = new HashMap<>();
formData.put("amount", Long.toString(request.getAmount()));
formData.put("currency", request.getCurrency());
if (!Strings.isNullOrEmpty(description)) {
formData.put("description", description);
}
final HttpRequest httpRequest = HttpRequest.newBuilder() final HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(uri) .uri(uri)
.POST(FormDataBodyPublisher.of(Map.of( .POST(FormDataBodyPublisher.of(formData))
"amount", Long.toString(request.getAmount()),
"currency", request.getCurrency())))
.header("Authorization", "Basic " + Base64.getEncoder().encodeToString( .header("Authorization", "Basic " + Base64.getEncoder().encodeToString(
(apiKey + ":").getBytes(StandardCharsets.UTF_8))) (apiKey + ":").getBytes(StandardCharsets.UTF_8)))
.header("Content-Type", "application/x-www-form-urlencoded") .header("Content-Type", "application/x-www-form-urlencoded")

View File

@ -50,6 +50,7 @@ public class DonationControllerTest {
public void before() throws Throwable { public void before() throws Throwable {
DonationConfiguration configuration = new DonationConfiguration(); DonationConfiguration configuration = new DonationConfiguration();
configuration.setApiKey("test-api-key"); configuration.setApiKey("test-api-key");
configuration.setDescription("some description");
configuration.setUri("http://localhost:" + wireMockRule.port() + "/foo/bar"); configuration.setUri("http://localhost:" + wireMockRule.port() + "/foo/bar");
configuration.setCircuitBreaker(new CircuitBreakerConfiguration()); configuration.setCircuitBreaker(new CircuitBreakerConfiguration());
configuration.setRetry(new RetryConfiguration()); configuration.setRetry(new RetryConfiguration());