diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
index 11c37c0..2c46e1b 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PaymentResource.java
@@ -71,6 +71,7 @@ import org.killbill.clock.Clock;
import com.codahale.metrics.annotation.Timed;
import com.google.common.base.Function;
import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
@@ -227,7 +228,7 @@ public class PaymentResource extends JaxRsResourceBase {
final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
- final UUID paymentId = UUID.fromString(paymentIdStr);
+ final UUID paymentId = getPaymentId(json, callContext);
final Payment initialPayment = paymentApi.getPayment(paymentId, false, pluginProperties, callContext);
final Account account = accountUserApi.getAccountById(initialPayment.getAccountId(), callContext);
@@ -238,6 +239,7 @@ public class PaymentResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, PaymentResource.class, "getPayment", payment.getId());
}
+
@Timed
@POST
@Path("/{paymentId:" + UUID_PATTERN + "}/" + REFUNDS)
@@ -259,7 +261,7 @@ public class PaymentResource extends JaxRsResourceBase {
final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
- final UUID paymentId = UUID.fromString(paymentIdStr);
+ final UUID paymentId = getPaymentId(json, callContext);
final Payment initialPayment = paymentApi.getPayment(paymentId, false, pluginProperties, callContext);
final Account account = accountUserApi.getAccountById(initialPayment.getAccountId(), callContext);
@@ -339,7 +341,7 @@ public class PaymentResource extends JaxRsResourceBase {
@javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException, AccountApiException {
final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
- final UUID paymentId = UUID.fromString(paymentIdStr);
+ final UUID paymentId = getPaymentId(json, callContext);
final Payment initialPayment = paymentApi.getPayment(paymentId, false, pluginProperties, callContext);
final Account account = accountUserApi.getAccountById(initialPayment.getAccountId(), callContext);
@@ -370,7 +372,7 @@ public class PaymentResource extends JaxRsResourceBase {
final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
- final UUID paymentId = UUID.fromString(paymentIdStr);
+ final UUID paymentId = getPaymentId(json, callContext);
final Payment initialPayment = paymentApi.getPayment(paymentId, false, pluginProperties, callContext);
final Account account = accountUserApi.getAccountById(initialPayment.getAccountId(), callContext);
@@ -425,4 +427,13 @@ public class PaymentResource extends JaxRsResourceBase {
return paymentApi.addPaymentMethod(account, paymentMethodJson.getExternalKey(), paymentMethodJson.getPluginName(), paymentMethodJson.isDefault(),
paymentData.getPluginDetail(), pluginProperties, callContext);
}
+
+ private UUID getPaymentId(final PaymentTransactionJson json, final TenantContext tenantContext) throws PaymentApiException {
+ if (json.getPaymentId() != null) {
+ return UUID.fromString(json.getPaymentId());
+ }
+
+ verifyNonNullOrEmpty(json.getPaymentExternalKey(), "Payment ExternalKey should not be null");
+ return paymentApi.getPaymentByExternalKey(json.getPaymentExternalKey(), false, ImmutableList.<PluginProperty>of(), tenantContext).getId();
+ }
}