Skip to content

Commit 5a3547d

Browse files
committed
Amazon Pay Java SDK 3.5.0
1 parent e470bb1 commit 5a3547d

9 files changed

Lines changed: 229 additions & 17 deletions

File tree

CHANGES.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
Version 3.5.0 - February 2019
2+
- ConfirmOrderReference API has four new request parameters:
3+
SuccessUrl, FailureUrl, AuthorizationAmount, and AuthorizationCurrencyCode
4+
For usage instructions, please consult the
5+
Amazon Pay Strong Customer Authentication (SCA) Upgrade Integration Guide
6+
17
Version 3.4.1 - October 2018
28
- Updated XMLInputFactory.newFactory() to XMLInputFactory.newInstance() in generateErrorException method (now consistent with 3.0.1 release).
39
- Add parameter SupplementaryData to SetOrderAttributes and SetOrderReferenceDetails API calls. Only use this field at the specific direction of Amazon Pay.

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>com.amazon.pay</groupId>
55
<artifactId>amazon-pay-java-sdk</artifactId>
66
<packaging>jar</packaging>
7-
<version>3.4.1</version>
7+
<version>3.5.0</version>
88
<dependencies>
99
<dependency>
1010
<groupId>commons-codec</groupId>

src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java

Lines changed: 107 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
* Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License").
55
* You may not use this file except in compliance with the License.
@@ -14,6 +14,7 @@
1414
*/
1515
package com.amazon.pay.request;
1616

17+
import com.amazon.pay.types.CurrencyCode;
1718
import java.io.Serializable;
1819

1920
/**
@@ -32,22 +33,121 @@ protected ConfirmOrderReferenceRequest getThis() {
3233
//required parameters
3334
private String amazonOrderReferenceId;
3435

36+
//optional parameters
37+
private String successUrl;
38+
private String failureUrl;
39+
private String authorizationAmount;
40+
private CurrencyCode authorizationCurrencyCode;
41+
3542
/**
36-
*
43+
* Constructor requires an order reference identifier.
3744
* @param amazonOrderReferenceId The order reference identifier.
3845
*/
39-
public ConfirmOrderReferenceRequest(String amazonOrderReferenceId){
46+
public ConfirmOrderReferenceRequest(String amazonOrderReferenceId) {
4047
this.amazonOrderReferenceId = amazonOrderReferenceId;
4148
}
4249

4350
/**
51+
* The order reference identifier.
4452
*
4553
* @return AmazonOrderReferenceId
4654
*/
4755
public String getAmazonOrderReferenceId() {
4856
return amazonOrderReferenceId;
4957
}
5058

59+
/**
60+
* @param currencyCode
61+
* Three-digit currency code. In ISO 4217 format.
62+
*
63+
* @return ConfirmOrderReferenceRequest
64+
* Container holding Confirm Order Reference operation parameters
65+
*/
66+
public ConfirmOrderReferenceRequest setAuthorizationCurrencyCode(final CurrencyCode currencyCode) {
67+
this.authorizationCurrencyCode = currencyCode;
68+
return this;
69+
}
70+
71+
/**
72+
* Represents currency code for Confirm Order Reference request
73+
*
74+
* @return CurrencyCode
75+
* Enum representing three-character currency code (ISO 4217)
76+
*/
77+
public CurrencyCode getAuthorizationCurrencyCode() {
78+
return authorizationCurrencyCode;
79+
}
80+
81+
/**
82+
* @param authorizationAmount
83+
* The amount to authorize during MFA completion.
84+
* Use this parameter if you want to set a payment
85+
* amount that is different than the OrderTotal
86+
* provided in the SetOrderReferenceDetails
87+
* operation call.
88+
*
89+
* If this parameter is not set, the amount authorized
90+
* during MFA will be equal to the OrderTotal.
91+
*
92+
* @return ConfirmOrderReferenceRequest
93+
* Container holding Confirm Order Reference operation parameters
94+
*/
95+
public ConfirmOrderReferenceRequest setAuthorizationAmount(final String authorizationAmount) {
96+
this.authorizationAmount = authorizationAmount;
97+
return this;
98+
}
99+
100+
/**
101+
* Represents the amount to be authorized during MFA completion.
102+
*
103+
* @return String
104+
*/
105+
public String getAuthorizationAmount() {
106+
return authorizationAmount;
107+
}
108+
109+
/**
110+
* @param successUrl
111+
* The buyer is redirected to this URL if the MFA is successful.
112+
*
113+
* @return ConfirmOrderReferenceRequest
114+
* Container holding Confirm Order Reference operation parameters
115+
*/
116+
public ConfirmOrderReferenceRequest setSuccessUrl(final String successUrl) {
117+
this.successUrl = successUrl;
118+
return this;
119+
}
120+
121+
/**
122+
* Represents the URL buyer is redirected to when MFA is successful.
123+
*
124+
* @return String
125+
*/
126+
public String getSuccessUrl() {
127+
return successUrl;
128+
}
129+
130+
/**
131+
* @param failureUrl
132+
* The buyer is redirected to this URL if the MFA is not successful.
133+
*
134+
* @return ConfirmOrderReferenceRequest
135+
* Container holding Confirm Order Reference operation parameters
136+
*/
137+
public ConfirmOrderReferenceRequest setFailureUrl(final String failureUrl) {
138+
this.failureUrl = failureUrl;
139+
return this;
140+
}
141+
142+
/**
143+
* Represents the URL buyer is redirected to when MFA is not successful.
144+
*
145+
* @return String
146+
*/
147+
public String getFailureUrl() {
148+
return failureUrl;
149+
}
150+
51151
/**
52152
* Returns a string representation of this object; useful for testing and
53153
* debugging.
@@ -60,6 +160,10 @@ public String getAmazonOrderReferenceId() {
60160
public String toString() {
61161
return "ConfirmOrderReferenceRequest{"
62162
+ "amazonOrderReferenceId=" + amazonOrderReferenceId
163+
+ ", authorizationAmount=" + authorizationAmount
164+
+ ", authorizationCurrencyCode=" + authorizationCurrencyCode
165+
+ ", successUrl=" + successUrl
166+
+ ", failureUrl=" + failureUrl
63167
+ ", mwsAuthToken=" + getMwsAuthToken() + '}';
64168
}
65169

src/com/amazon/pay/request/RequestHelper.java

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
* Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License").
55
* You may not use this file except in compliance with the License.
@@ -252,6 +252,22 @@ public String getPostURL(ConfirmOrderReferenceRequest request) {
252252
if (request.getAmazonOrderReferenceId() != null) {
253253
parameters.put(ServiceConstants.AMAZON_ORDER_REFERENCE_ID, request.getAmazonOrderReferenceId());
254254
}
255+
if (request.getSuccessUrl() != null) {
256+
parameters.put(ServiceConstants.SUCCESS_URL, request.getSuccessUrl());
257+
}
258+
if (request.getFailureUrl() != null) {
259+
parameters.put(ServiceConstants.FAILURE_URL, request.getFailureUrl());
260+
}
261+
262+
if (request.getAuthorizationAmount() != null) {
263+
parameters.put(ServiceConstants.AUTHORIZATION_AMOUNT, request.getAuthorizationAmount());
264+
265+
if (request.getAuthorizationCurrencyCode() == null) {
266+
request.setAuthorizationCurrencyCode(payConfig.getCurrencyCode());
267+
}
268+
parameters.put(ServiceConstants.AUTHORIZATION_CURRENCEYCODE, request.getAuthorizationCurrencyCode().toString());
269+
}
270+
255271
addClientParameters(parameters, request);
256272
return Util.convertParameterMapToString(parameters);
257273
}
@@ -298,9 +314,9 @@ public String getPostURL(CloseAuthorizationRequest request) {
298314
public String getPostURL(RefundRequest request) {
299315
Map<String,String> parameters = new TreeMap<String,String>();
300316
parameters.put(ServiceConstants.ACTION, ServiceConstants.REFUND);
301-
if (request.getRefundCurrencyCode() == null)
317+
if (request.getRefundCurrencyCode() == null) {
302318
request.setRefundCurrencyCode(payConfig.getCurrencyCode());
303-
319+
}
304320
if (request.getAmazonCaptureId() != null) {
305321
parameters.put(ServiceConstants.AMAZON_CAPTURE_ID, request.getAmazonCaptureId());
306322
}
@@ -432,13 +448,13 @@ public String getPostURL(AuthorizeOnBillingAgreementRequest request) {
432448
request.setAuthorizationCurrencyCode(payConfig.getCurrencyCode());
433449
if (request.getAmazonBillingAgreementId() != null)
434450
parameters.put(ServiceConstants.AMAZON_BILLING_AGREEMENT_ID, request.getAmazonBillingAgreementId());
435-
if (request.getAuthorizationReferenceId() != null)
451+
if (request.getAuthorizationReferenceId() != null)
436452
parameters.put(ServiceConstants.AUTHORIZATION_REFERENCE_ID, request.getAuthorizationReferenceId());
437-
if (request.getAuthorizationAmount() != null)
453+
if (request.getAuthorizationAmount() != null)
438454
parameters.put(ServiceConstants.AUTHORIZATION_AMOUNT, request.getAuthorizationAmount());
439-
if (request.getAuthorizationCurrencyCode() != null)
455+
if (request.getAuthorizationCurrencyCode() != null)
440456
parameters.put(ServiceConstants.AUTHORIZATION_CURRENCEYCODE, request.getAuthorizationCurrencyCode().toString());
441-
if (request.getSellerAuthorizationNote() != null)
457+
if (request.getSellerAuthorizationNote() != null)
442458
parameters.put(ServiceConstants.SELLER_AUTHORIZATION_NOTE, request.getSellerAuthorizationNote());
443459
if (request.getTransactionTimeout() != null)
444460
parameters.put(ServiceConstants.TRANSACTION_TIMEOUT, request.getTransactionTimeout());

src/com/amazon/pay/types/ServiceConstants.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
* Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License").
55
* You may not use this file except in compliance with the License.
@@ -93,6 +93,8 @@ public class ServiceConstants {
9393
public static final String ORDER_ATTRIBUTES_SELLER_ORDER_ID = "OrderAttributes.SellerOrderAttributes.SellerOrderId";
9494
public static final String ORDER_ATTRIBUTES_STORE_NAME = "OrderAttributes.SellerOrderAttributes.StoreName";
9595
public static final String ORDER_ATTRIBUTES_SUPPLEMENTARY_DATA = "OrderAttributes.SellerOrderAttributes.SupplementaryData";
96+
public static final String SUCCESS_URL = "SuccessUrl";
97+
public static final String FAILURE_URL = "FailureUrl";
9698

9799
// API Request Parameters - (Mostly) Required Parameters
98100
public static final String ACTION = "Action";
@@ -147,7 +149,7 @@ public class ServiceConstants {
147149
public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus";
148150

149151
// SDK version
150-
public static final String APPLICATION_LIBRARY_VERSION = "3.4.1";
152+
public static final String APPLICATION_LIBRARY_VERSION = "3.5.0";
151153
public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java";
152154

153155
// Exponential backoff wait times (milliseconds) for retry operations

tst/com/amazon/pay/TestConstants.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
* Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License").
55
* You may not use this file except in compliance with the License.
@@ -57,5 +57,8 @@ public class TestConstants {
5757
public static final int pageSize = 5;
5858
public static final String nextPageToken = "1eUc0QkJMVnJpcGgrbDNHclpIUT09IiwibWFya2V0cGxhY2VJZCI6IkEzQlhCMFlOM1hIMTdIIn0=";
5959
public static final String SUPPLEMENTARY_DATA = "{\"AirlineMetaData\" : {\"version\": 1.0, \"airlineCode\": \"PAX\", \"flightDate\": \"2018-03-24T20:29:19.22Z\", \"departureAirport\": \"CDG\", \"destinationAirport\": \"LUX\", \"bookedLastTime\": -1, \"classOfTravel\": \"F\", \"passengers\": {\"numberOfPassengers\": 4, \"numberOfChildren\": 1, \"numberOfInfants\": 1 }}, \"AccommodationMetaData\": {\"version\": 1.0, \"startDate\": \"2018-03-24T20:29:19.22Z\", \"endDate\": \"2018-03-24T20:29:19.22Z\", \"lengthOfStay\": 5, \"numberOfGuests\": 4, \"class\": \"Standard\", \"starRating\": 5, \"bookedLastTime\": -1 }, \"OrderMetaData\": {\"version\": 1.0, \"numberOfItems\": 3, \"type\": \"Digital\" }, \"BuyerMetaData\": {\"version\" : 1.0, \"isFirstTimeCustomer\" : true, \"numberOfPastPurchases\" : 2, \"numberOfDisputedPurchases\" : 3, \"hasOpenDispute\" : true, \"riskScore\" : 0.75 }}";
60+
public static final String AUTHORIZE_AMOUNT = "0.01";
61+
public static final String SUCCESS_URL = "https://pay.amazon.com/success.html";
62+
public static final String FAILURE_URL = "https://pay.amazon.com/failure.html";
6063

6164
}

tst/com/amazon/pay/impl/SignatureAndURLTest.java

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
* Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License").
55
* You may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
1616

1717
import com.amazon.pay.request.RequestHelper;
1818
import com.amazon.pay.TestConstants;
19+
import com.amazon.pay.request.ConfirmOrderReferenceRequest;
1920
import com.amazon.pay.request.GetOrderReferenceDetailsRequest;
2021
import com.amazon.pay.request.SetOrderReferenceDetailsRequest;
2122
import com.amazon.pay.response.model.Environment;
@@ -117,4 +118,76 @@ public void testRequestParameterConstructorSignature_2() throws Exception {
117118
Assert.assertEquals(expectedURL, this.helper.getPostURL(request));
118119
}
119120

121+
@Test
122+
public void testRequestUrlAndSignatureForConfirmOrderReference() throws Exception {
123+
// Non-MFA Confirm request
124+
this.helper = new RequestHelper(config);
125+
PowerMockito.stub(PowerMockito.method(Util.class, "getTimestamp")).toReturn(TestConstants.timeStamp);
126+
final ConfirmOrderReferenceRequest request =
127+
new ConfirmOrderReferenceRequest(TestConstants.amazonOrderReferenceId)
128+
.setSellerId(TestConstants.overrideSellerId)
129+
.setMWSAuthToken(TestConstants.mwsAuthToken);
130+
final String action = "ConfirmOrderReference";
131+
final String signature = "mbJBrZKC4Jz8J%2BrhRqyfYsY6TkSapWOvCTlC%2BUDUTok%3D";
132+
final String expectedURL =
133+
"AWSAccessKeyId=" + TestConstants.accessKey
134+
+ "&Action=" + action
135+
+ "&AmazonOrderReferenceId=" + TestConstants.amazonOrderReferenceId
136+
+ "&MWSAuthToken=" + TestConstants.mwsAuthToken
137+
+ "&SellerId=" + TestConstants.overrideSellerId
138+
+ "&Signature=" + signature
139+
+ "&SignatureMethod=HmacSHA256"
140+
+ "&SignatureVersion=2"
141+
+ "&Timestamp=" + TestConstants.urlEncoded_TimeStamp
142+
+ "&Version=2013-01-01";
143+
Assert.assertEquals(expectedURL, this.helper.getPostURL(request));
144+
145+
// Adding a curency code without an amount should result in same request
146+
request.setAuthorizationCurrencyCode(CurrencyCode.EUR);
147+
Assert.assertEquals(expectedURL, this.helper.getPostURL(request));
148+
149+
// Full MFA parameter set
150+
final String mfaSignature = "KeZbecFqPMxhR4g35iFWsdLmq1rAgwdn4B2WTIFMTHg%3D";
151+
request.setSuccessUrl(TestConstants.SUCCESS_URL);
152+
request.setFailureUrl(TestConstants.FAILURE_URL);
153+
request.setAuthorizationAmount(TestConstants.AUTHORIZE_AMOUNT);
154+
final String expectedURLforMFA =
155+
"AWSAccessKeyId=" + TestConstants.accessKey
156+
+ "&Action=" + action
157+
+ "&AmazonOrderReferenceId=" + TestConstants.amazonOrderReferenceId
158+
+ "&AuthorizationAmount.Amount=" + TestConstants.AUTHORIZE_AMOUNT
159+
+ "&AuthorizationAmount.CurrencyCode=" + CurrencyCode.EUR
160+
+ "&FailureUrl=" + Util.urlEncode(TestConstants.FAILURE_URL)
161+
+ "&MWSAuthToken=" + TestConstants.mwsAuthToken
162+
+ "&SellerId=" + TestConstants.overrideSellerId
163+
+ "&Signature=" + mfaSignature
164+
+ "&SignatureMethod=HmacSHA256"
165+
+ "&SignatureVersion=2"
166+
+ "&SuccessUrl=" + Util.urlEncode(TestConstants.SUCCESS_URL)
167+
+ "&Timestamp=" + TestConstants.urlEncoded_TimeStamp
168+
+ "&Version=2013-01-01";
169+
Assert.assertEquals(expectedURLforMFA, this.helper.getPostURL(request));
170+
171+
// Partial MFA parameter set - not including FailureURL or CurrencyCode
172+
// Should default to the Config object currency code in this scenario (USD instead of EUR)
173+
final String partialMfaSignature = "vGiWtNsdtNKx3QGB%2BcNNq8tLisqwOeg2a5aIy3p6exw%3D";
174+
request.setAuthorizationCurrencyCode(null);
175+
request.setFailureUrl(null);
176+
final String expectedURLforPartialMFA =
177+
"AWSAccessKeyId=" + TestConstants.accessKey
178+
+ "&Action=" + action
179+
+ "&AmazonOrderReferenceId=" + TestConstants.amazonOrderReferenceId
180+
+ "&AuthorizationAmount.Amount=" + TestConstants.AUTHORIZE_AMOUNT
181+
+ "&AuthorizationAmount.CurrencyCode=" + CurrencyCode.USD
182+
+ "&MWSAuthToken=" + TestConstants.mwsAuthToken
183+
+ "&SellerId=" + TestConstants.overrideSellerId
184+
+ "&Signature=" + partialMfaSignature
185+
+ "&SignatureMethod=HmacSHA256"
186+
+ "&SignatureVersion=2"
187+
+ "&SuccessUrl=" + Util.urlEncode(TestConstants.SUCCESS_URL)
188+
+ "&Timestamp=" + TestConstants.urlEncoded_TimeStamp
189+
+ "&Version=2013-01-01";
190+
Assert.assertEquals(expectedURLforPartialMFA, this.helper.getPostURL(request));
191+
}
192+
120193
}

tst/com/amazon/pay/request/PaymentsAPIRequestTest.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
* Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License").
55
* You may not use this file except in compliance with the License.
@@ -118,10 +118,18 @@ public void testCloseOrderReferenceRequest() {
118118
@Test
119119
public void testConfirmOrderReferenceRequest() {
120120
final ConfirmOrderReferenceRequest request = new ConfirmOrderReferenceRequest(TestConstants.amazonOrderReferenceId)
121-
.setMWSAuthToken(TestConstants.mwsAuthToken);
121+
.setMWSAuthToken(TestConstants.mwsAuthToken)
122+
.setAuthorizationAmount(TestConstants.AUTHORIZE_AMOUNT)
123+
.setAuthorizationCurrencyCode(CurrencyCode.EUR)
124+
.setSuccessUrl(TestConstants.SUCCESS_URL)
125+
.setFailureUrl(TestConstants.FAILURE_URL);
122126

123127
Assert.assertEquals(request.getAmazonOrderReferenceId(),TestConstants.amazonOrderReferenceId);
124128
Assert.assertEquals(request.getMwsAuthToken(), TestConstants.mwsAuthToken);
129+
Assert.assertEquals(request.getAuthorizationAmount(), TestConstants.AUTHORIZE_AMOUNT);
130+
Assert.assertEquals(request.getAuthorizationCurrencyCode(), CurrencyCode.EUR);
131+
Assert.assertEquals(request.getSuccessUrl(), TestConstants.SUCCESS_URL);
132+
Assert.assertEquals(request.getFailureUrl(), TestConstants.FAILURE_URL);
125133
}
126134

127135
@Test

0 commit comments

Comments
 (0)