From f2ca89ed2e5e7d6a473c45f4dce47e8ba794ce22 Mon Sep 17 00:00:00 2001 From: tarishah Date: Mon, 5 Mar 2018 20:45:32 -0800 Subject: [PATCH 01/21] Update Readme for Maven central badge --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index e860cf0..dc1578d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.amazon.pay/amazon-pay-java-sdk/badge.svg)] -(https://maven-badges.herokuapp.com/maven-central/com.amazon.pay/amazon-pay-java-sdk) +[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.amazon.pay/amazon-pay-java-sdk/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.amazon.pay/amazon-pay-java-sdk) ### Amazon Pay Java SDK From b7963b686838724b6519ed320d84794e54f73ee2 Mon Sep 17 00:00:00 2001 From: Henri Yandell Date: Tue, 13 Mar 2018 11:42:12 -0700 Subject: [PATCH 02/21] Adding standard files --- .github/PULL_REQUEST_TEMPLATE.md | 6 ++++ CODE_OF_CONDUCT.md | 4 +++ CONTRIBUTING.md | 61 ++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..ab40d21 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,6 @@ +*Issue #, if available:* + +*Description of changes:* + + +By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..3b64466 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,4 @@ +## Code of Conduct +This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). +For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact +opensource-codeofconduct@amazon.com with any additional questions or comments. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..ef506f1 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,61 @@ +# Contributing Guidelines + +Thank you for your interest in contributing to our project. Whether it's a bug report, new feature, correction, or additional +documentation, we greatly value feedback and contributions from our community. + +Please read through this document before submitting any issues or pull requests to ensure we have all the necessary +information to effectively respond to your bug report or contribution. + + +## Reporting Bugs/Feature Requests + +We welcome you to use the GitHub issue tracker to report bugs or suggest features. + +When filing an issue, please check [existing open](https://github.com/amzn/amazon-pay-sdk-java/issues), or [recently closed](https://github.com/amzn/amazon-pay-sdk-java/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aclosed%20), issues to make sure somebody else hasn't already +reported the issue. Please try to include as much information as you can. Details like these are incredibly useful: + +* A reproducible test case or series of steps +* The version of our code being used +* Any modifications you've made relevant to the bug +* Anything unusual about your environment or deployment + + +## Contributing via Pull Requests +Contributions via pull requests are much appreciated. Before sending us a pull request, please ensure that: + +1. You are working against the latest source on the *master* branch. +2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already. +3. You open an issue to discuss any significant work - we would hate for your time to be wasted. + +To send us a pull request, please: + +1. Fork the repository. +2. Modify the source; please focus on the specific change you are contributing. If you also reformat all the code, it will be hard for us to focus on your change. +3. Ensure local tests pass. +4. Commit to your fork using clear commit messages. +5. Send us a pull request, answering any default questions in the pull request interface. +6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation. + +GitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and +[creating a pull request](https://help.github.com/articles/creating-a-pull-request/). + + +## Finding contributions to work on +Looking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels ((enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any ['help wanted'](https://github.com/amzn/amazon-pay-sdk-java/labels/help%20wanted) issues is a great place to start. + + +## Code of Conduct +This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). +For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact +opensource-codeofconduct@amazon.com with any additional questions or comments. + + +## Security issue notifications +If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue. + + +## Licensing + +See the [LICENSE](https://github.com/amzn/amazon-pay-sdk-java/blob/master/LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution. + +We may ask you to sign a [Contributor License Agreement (CLA)](http://en.wikipedia.org/wiki/Contributor_License_Agreement) for larger changes. From 53aac111af6ec4910e16b96b654847c972e96bfa Mon Sep 17 00:00:00 2001 From: tarishah Date: Tue, 13 Mar 2018 14:28:19 -0700 Subject: [PATCH 03/21] Amazon Pay Java SDK 3.3.3 --- CHANGES.txt | 3 + pom.xml | 128 +++++++++--------- .../amazon/pay/types/ServiceConstants.java | 2 +- 3 files changed, 71 insertions(+), 62 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index eeb86ef..f3c2ffc 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +Version 3.3.3 - March 2018 +- Maven central release changes + Version 3.3.2 - March 2018 - Maven Central Release - Documentation changes to satisfy Maven central release diff --git a/pom.xml b/pom.xml index 7a1c50f..f82db27 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazon.pay amazon-pay-java-sdk jar - 3.3.2 + 3.3.3 commons-codec @@ -54,65 +54,71 @@ oss-parent 7 - - - release - target - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.0 - - 1.6 - 1.6 - 1.6 - UTF-8 - - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - - attach-sources - - jar-no-fork - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - - attach-javadocs - - jar - - - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - - + src/com/amazon/pay + tst/com/amazon/pay - - - + + + release + + target + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.0 + + 1.6 + 1.6 + 1.6 + UTF-8 + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + package + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + attach-javadocs + package + + jar + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + + + + + \ No newline at end of file diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index 569f636..9734e9d 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -141,7 +141,7 @@ public class ServiceConstants { public static final String SET_ORDER_ATTRIBUTES = "SetOrderAttributes"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.3.2"; + public static final String APPLICATION_LIBRARY_VERSION = "3.3.3"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations From 0da235a918a3d5c2d4b987d2be7745dcf3056cd6 Mon Sep 17 00:00:00 2001 From: tarishah Date: Tue, 13 Mar 2018 14:33:10 -0700 Subject: [PATCH 04/21] Amazon Pay Java SDK 3.3.4 --- CHANGES.txt | 3 +++ pom.xml | 2 +- src/com/amazon/pay/types/ServiceConstants.java | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index f3c2ffc..21f377c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +Version 3.3.4 - March 2018 +- Maven central release changes + Version 3.3.3 - March 2018 - Maven central release changes diff --git a/pom.xml b/pom.xml index f82db27..8c8f53f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazon.pay amazon-pay-java-sdk jar - 3.3.3 + 3.3.4 commons-codec diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index 9734e9d..3d0c63d 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -141,7 +141,7 @@ public class ServiceConstants { public static final String SET_ORDER_ATTRIBUTES = "SetOrderAttributes"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.3.3"; + public static final String APPLICATION_LIBRARY_VERSION = "3.3.4"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations From 549612ed848f7c150a6694cbbde714ee6e209cca Mon Sep 17 00:00:00 2001 From: BJ Guillot Date: Fri, 13 Apr 2018 20:52:52 +0000 Subject: [PATCH 05/21] Amazon Pay Java SDK 3.4.0 --- CHANGES.txt | 13 +- README.md | 38 ++++- dist/amazon-pay-3.3.0.jar | Bin 227358 -> 0 bytes ....3.1.jar => amazon-pay-java-sdk-3.4.0.jar} | Bin 227358 -> 233093 bytes pom.xml | 10 +- src/com/amazon/pay/Client.java | 77 ++++++--- src/com/amazon/pay/impl/PayClient.java | 86 +++++++--- src/com/amazon/pay/impl/Util.java | 3 +- .../AuthorizeOnBillingAgreementRequest.java | 81 +++++---- .../amazon/pay/request/AuthorizeRequest.java | 49 +++--- .../request/CancelOrderReferenceRequest.java | 69 +++----- .../amazon/pay/request/CaptureRequest.java | 49 ++---- src/com/amazon/pay/request/ChargeRequest.java | 33 +--- .../request/CloseAuthorizationRequest.java | 44 ++--- .../request/CloseBillingAgreementRequest.java | 44 ++--- .../request/CloseOrderReferenceRequest.java | 40 ++--- .../ConfirmBillingAgreementRequest.java | 40 ++--- .../request/ConfirmOrderReferenceRequest.java | 37 ++--- .../CreateOrderReferenceForIdRequest.java | 34 +--- .../amazon/pay/request/DelegateRequest.java | 80 +++++++++ .../GetAuthorizationDetailsRequest.java | 39 ++--- .../GetBillingAgreementDetailsRequest.java | 44 ++--- .../pay/request/GetCaptureDetailsRequest.java | 36 ++-- .../GetMerchantAccountStatusRequest.java | 46 ++++++ .../GetOrderReferenceDetailsRequest.java | 43 ++--- .../GetProviderCreditDetailsRequest.java | 44 ++--- ...tProviderCreditReversalDetailsRequest.java | 56 ++----- .../pay/request/GetRefundDetailsRequest.java | 36 ++-- .../ListOrderReferenceByNextTokenRequest.java | 10 +- .../request/ListOrderReferenceRequest.java | 10 +- src/com/amazon/pay/request/RefundRequest.java | 41 ++--- src/com/amazon/pay/request/RequestHelper.java | 154 ++++++------------ .../request/ReverseProviderCreditRequest.java | 79 ++++----- .../SetBillingAgreementDetailsRequest.java | 52 +++--- .../amazon/pay/request/SetMWSAuthToken.java | 40 ----- .../request/SetOrderAttributesRequest.java | 9 +- .../SetOrderReferenceDetailsRequest.java | 60 +++---- .../ValidateBillingAgreementRequest.java | 39 ++--- .../pay/response/model/AccountStatus.java | 30 ++++ .../GetMerchantAccountStatusResponse.java | 65 ++++++++ .../model/GetMerchantAccountStatusResult.java | 64 ++++++++ .../response/model/OrderReferenceList.java | 14 +- .../GetMerchantAccountStatusResponseData.java | 70 ++++++++ .../amazon/pay/response/parser/Parser.java | 14 +- .../pay/response/parser/ResponseData.java | 2 + .../amazon/pay/types/ServiceConstants.java | 5 +- tst/com/amazon/pay/TestConstants.java | 7 +- .../amazon/pay/impl/LoginUserInfoTest.java | 56 ++++--- .../amazon/pay/impl/SignatureAndURLTest.java | 101 +++++++++--- .../pay/impl/ipn/NotificationFactoryTest.java | 14 ++ .../ipn/NotificationVerificationTest.java | 14 ++ .../pay/impl/ipn/SigningCertURLTest.java | 46 ++++-- .../pay/request/PaymentsAPIRequestTest.java | 65 +++++--- .../pay/response/PaymentsAPIResponseTest.java | 56 ++++++- .../xml/GetMerchantAccountStatusActive.xml | 9 + .../xml/GetMerchantAccountStatusError.xml | 9 + .../xml/GetMerchantAccountStatusInactive.xml | 8 + 57 files changed, 1285 insertions(+), 1029 deletions(-) delete mode 100644 dist/amazon-pay-3.3.0.jar rename dist/{amazon-pay-3.3.1.jar => amazon-pay-java-sdk-3.4.0.jar} (54%) create mode 100644 src/com/amazon/pay/request/DelegateRequest.java create mode 100644 src/com/amazon/pay/request/GetMerchantAccountStatusRequest.java delete mode 100644 src/com/amazon/pay/request/SetMWSAuthToken.java create mode 100644 src/com/amazon/pay/response/model/AccountStatus.java create mode 100644 src/com/amazon/pay/response/model/GetMerchantAccountStatusResponse.java create mode 100644 src/com/amazon/pay/response/model/GetMerchantAccountStatusResult.java create mode 100644 src/com/amazon/pay/response/parser/GetMerchantAccountStatusResponseData.java create mode 100644 tst/com/amazon/pay/response/xml/GetMerchantAccountStatusActive.xml create mode 100644 tst/com/amazon/pay/response/xml/GetMerchantAccountStatusError.xml create mode 100644 tst/com/amazon/pay/response/xml/GetMerchantAccountStatusInactive.xml diff --git a/CHANGES.txt b/CHANGES.txt index 21f377c..208d698 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,12 +1,11 @@ -Version 3.3.4 - March 2018 -- Maven central release changes +Version 3.4.0 - April 2018 +- Add support for GetMerchantAccountStatus API +- Solution Providers can now override the Seller ID on a per-request basis instead of having to instantiate a new Client object for each request. +- Fixed pay.amazon.com links to online API documentaton in Client.java -Version 3.3.3 - March 2018 -- Maven central release changes - -Version 3.3.2 - March 2018 +Version 3.3.5 - March 2018 - Maven Central Release -- Documentation changes to satisfy Maven central release +- JavaDoc changes to satisfy Maven central release Version 3.3.1 - January 2018 - Fix the SDK version number in all files diff --git a/README.md b/README.md index dc1578d..4933795 100644 --- a/README.md +++ b/README.md @@ -419,7 +419,7 @@ XMLGregorianCalendar endTime = ListOrderReferenceRequest listOrderReferenceRequest = new ListOrderReferenceRequest("YOUR_SELLER_ORDER_ID", "SellerOrderId"); // optional parameters -listOrderReferenceRequest.setMwsAuthToken("YOUR_MWS_AUTH_TOKEN"); +listOrderReferenceRequest.setMWSAuthToken("YOUR_MWS_AUTH_TOKEN"); listOrderReferenceRequest.setStartTime(startTime); listOrderReferenceRequest.setEndTime(endTime); listOrderReferenceRequest.setPageSize(5); @@ -435,8 +435,42 @@ This API returns a list of the continued orders from the previous call (ListOrde ```java ListOrderReferenceByNextTokenRequest listOrderReferenceByNextTokenRequest = new ListOrderReferenceByNextTokenRequest(nextPageToken); //nextPageToken is derived from the ListOrderReference response explained above //optional parameters -listOrderReferenceByNextTokenRequest.setMwsAuthToken("YOUR_MWS_AUTH_TOKEN"); +listOrderReferenceByNextTokenRequest.setMWSAuthToken("YOUR_MWS_AUTH_TOKEN"); ListOrderReferenceByNextTokenResponseData response = client.listOrderReferenceByNextToken(listOrderReferenceByNextTokenRequest); ``` + +### Get Merchant Account Status API +The GetMerchantAccountStatus operation is used to query the status of a particular merchant account and to retrieve information if the account is active or inactive. + +```java +import com.amazon.pay.response.model.AccountStatus; +import com.amazon.pay.response.parser.GetMerchantAccountStatusResponseData; +import com.amazon.pay.request.GetMerchantAccountStatusRequest; +... + +// To check the status of your merchant account +final GetMerchantAccountStatusResponseData response = client.getMerchantAccountStatus(); +final AccountStatus accountStatus = response.getAccountStatus(); + +if (accountStatus.equals(AccountStatus.ACTIVE)) { + System.out.println("Merchant account is enabled"); +} else if (accountStatus.equals(AccountStatus.INACTIVE)) { + System.out.println("Merchant account is disabled"); +} + +// Or using MWS delegation to check on the status of another merchant account +final GetMerchantAccountStatusRequest request = new GetMerchantAccountStatusRequest(); +request.setSellerId("REPLACE_WITH_OTHER_MERCHANT_ID"); +request.setMWSAuthToken("REPLACE_WITH_MWS_AUTH_TOKEN"); + +final GetMerchantAccountStatusResponseData resp = client.getMerchantAccountStatus(request); +final AccountStatus status = resp.getAccountStatus(); + +if (status.equals(AccountStatus.ACTIVE)) { + System.out.println("Child merchant account is enabled"); +} else if (status.equals(AccountStatus.INACTIVE)) { + System.out.println("Child merchant account is disabled"); +} +``` diff --git a/dist/amazon-pay-3.3.0.jar b/dist/amazon-pay-3.3.0.jar deleted file mode 100644 index e7f39501a0bf2ceaa514baf7da3b35fabc8372e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227358 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 z
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
{@code
+ *      
+ *        
+ *          ACTIVE
+ *        
+ *        
+ *          986dce6b-45e2-4883-bbf4-17adce5994a4
+ *        
+ *      
+ *  }
+ * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "getMerchantAccountStatusResult", + "responseMetadata" +}) +@XmlRootElement(name = "GetMerchantAccountStatusResponse") +public class GetMerchantAccountStatusResponse { + + @XmlElement(name = "GetMerchantAccountStatusResult", required = true) + protected GetMerchantAccountStatusResult getMerchantAccountStatusResult; + + @XmlElement(name = "ResponseMetadata", required = true) + protected ResponseMetadata responseMetadata; + + public GetMerchantAccountStatusResponse() { + super(); + } + + public GetMerchantAccountStatusResult getMerchantAccountStatusResult() { + return getMerchantAccountStatusResult; + } + + public ResponseMetadata getResponseMetadata() { + return responseMetadata; + } + +} diff --git a/src/com/amazon/pay/response/model/GetMerchantAccountStatusResult.java b/src/com/amazon/pay/response/model/GetMerchantAccountStatusResult.java new file mode 100644 index 0000000..5a6b3ba --- /dev/null +++ b/src/com/amazon/pay/response/model/GetMerchantAccountStatusResult.java @@ -0,0 +1,64 @@ +/** + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.pay.response.model; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + +/** + * This represents the GetMerchantAccountStatusResult node parsed + * from the Amazon Pay GetMerchantAccountStatusResponse. + * + *
{@code
+ *      
+ *        ACTIVE
+ *      
+ *  }
+ * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "accountStatus" +}) +@XmlRootElement(name = "GetMerchantAccountStatusResult") +public class GetMerchantAccountStatusResult { + + @XmlElement(name = "AccountStatus", required = true) + protected AccountStatus accountStatus; + + public GetMerchantAccountStatusResult() { + super(); + } + + /** + * @return account status: + * ACTIVE - Merchant account is active + * INACTIVE - Merchant account is not active + */ + public AccountStatus getAccountStatus() { + return accountStatus; + } + + /** + * Returns the string representation of GetMerchantAccountStatusResult + */ + @Override + public String toString() { + return "GetMerchantAccountStatus{" + "accountStatus=" + accountStatus + "}"; + } +} diff --git a/src/com/amazon/pay/response/model/OrderReferenceList.java b/src/com/amazon/pay/response/model/OrderReferenceList.java index 8079282..e3f984f 100644 --- a/src/com/amazon/pay/response/model/OrderReferenceList.java +++ b/src/com/amazon/pay/response/model/OrderReferenceList.java @@ -23,6 +23,18 @@ import java.util.ArrayList; import java.util.List; +/** + * This represents the OrderReferenceList node parsed + * from the Amazon Pay ListOrderReference API response. + * + * <OrderReferenceList> + * <OrderReference> + * ... + * </OrderReference> + * </OrderReferenceList> + * + */ + @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "orderReferences" @@ -47,4 +59,4 @@ public List getOrderReferences() { } return orderReferences; } -} \ No newline at end of file +} diff --git a/src/com/amazon/pay/response/parser/GetMerchantAccountStatusResponseData.java b/src/com/amazon/pay/response/parser/GetMerchantAccountStatusResponseData.java new file mode 100644 index 0000000..832942e --- /dev/null +++ b/src/com/amazon/pay/response/parser/GetMerchantAccountStatusResponseData.java @@ -0,0 +1,70 @@ +/** + * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.pay.response.parser; + +import com.amazon.pay.response.model.AccountStatus; +import com.amazon.pay.response.model.GetMerchantAccountStatusResponse; + +import java.io.Serializable; + +/** + * Response from GetMerchantAccountStatus API, as returned by Amazon Pay + */ +public final class GetMerchantAccountStatusResponseData extends ResponseData implements Serializable { + + private String requestId; + private AccountStatus accountStatus; + + public GetMerchantAccountStatusResponseData(GetMerchantAccountStatusResponse response, ResponseData rawResponse) { + super(rawResponse); + if (response != null) { + this.requestId = response.getResponseMetadata().getRequestId(); + if (response.getMerchantAccountStatusResult() != null) { + accountStatus = response.getMerchantAccountStatusResult().getAccountStatus(); + } + } + } + + /** + * The AccountStatus enum that identifies the merchant acconut as + * being ACTIVE or INACTIVE. + * + * @return The AccountStatus enum. + */ + public AccountStatus getAccountStatus() { + return accountStatus; + } + + /** + * The requestID that uniquely identifies the service request + * the caller made. + * + * @return The requestID that uniquely identifies the service request + * the caller made. + */ + public String getRequestId() { + return requestId; + } + + /** + * Returns the string representation of GetOrderReferenceDetailsResponseData + */ + @Override + public String toString() { + return "GetServiceStatusResponseData{" + "requestId=" + requestId + + ", accountStatus=" + accountStatus + "}"; + } + +} diff --git a/src/com/amazon/pay/response/parser/Parser.java b/src/com/amazon/pay/response/parser/Parser.java index 08ab564..c754ce0 100644 --- a/src/com/amazon/pay/response/parser/Parser.java +++ b/src/com/amazon/pay/response/parser/Parser.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ import com.amazon.pay.response.model.GetBillingAgreementDetailsResponse; import com.amazon.pay.response.model.GetCaptureDetailsResponse; import com.amazon.pay.response.model.GetOrderReferenceDetailsResponse; +import com.amazon.pay.response.model.GetMerchantAccountStatusResponse; import com.amazon.pay.response.model.GetProviderCreditReversalDetailsResponse; import com.amazon.pay.response.model.GetProviderCreditDetailsResponse; import com.amazon.pay.response.model.GetRefundDetailsResponse; @@ -178,17 +179,22 @@ public static CreateOrderReferenceForIdResponseData createOrderReferenceForId( public static ListOrderReferenceResponseData listOrderReference(ResponseData rawResponse) throws AmazonServiceException { final ListOrderReferenceResponse response = marshalXML(ListOrderReferenceResponse.class, rawResponse); - return new ListOrderReferenceResponseData(response,rawResponse); + return new ListOrderReferenceResponseData(response, rawResponse); } public static ListOrderReferenceByNextTokenResponseData listOrderReferenceByNextToken(ResponseData rawResponse) throws AmazonServiceException { final ListOrderReferenceByNextTokenResponse response = marshalXML(ListOrderReferenceByNextTokenResponse.class, rawResponse); - return new ListOrderReferenceByNextTokenResponseData(response,rawResponse); + return new ListOrderReferenceByNextTokenResponseData(response, rawResponse); } public static SetOrderAttributesResponseData setOrderAttributes(ResponseData rawResponse) throws AmazonServiceException { final SetOrderAttributesResponse response = marshalXML(SetOrderAttributesResponse.class, rawResponse); - return new SetOrderAttributesResponseData(response,rawResponse); + return new SetOrderAttributesResponseData(response, rawResponse); + } + + public static GetMerchantAccountStatusResponseData getMerchantAccountStatus(ResponseData rawResponse) throws AmazonServiceException { + final GetMerchantAccountStatusResponse response = marshalXML(GetMerchantAccountStatusResponse.class, rawResponse); + return new GetMerchantAccountStatusResponseData(response, rawResponse); } public static T marshalXML(Class clazz, ResponseData rawResponse) throws AmazonServiceException { diff --git a/src/com/amazon/pay/response/parser/ResponseData.java b/src/com/amazon/pay/response/parser/ResponseData.java index f36a885..2d1aedd 100644 --- a/src/com/amazon/pay/response/parser/ResponseData.java +++ b/src/com/amazon/pay/response/parser/ResponseData.java @@ -59,6 +59,8 @@ public String toXML() { /** * Converts the raw XML response to JSON format * + * @throws JSONException + * If the XML response cannot be converted into JSON * @return * JSON representation of response returned by Amazon Service API */ diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index 3d0c63d..0a1ebc9 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -139,9 +139,10 @@ public class ServiceConstants { public static final String LIST_ORDER_REFERENCE = "ListOrderReference"; public static final String LIST_ORDER_REFERENCE_BY_NEXT_TOKEN = "ListOrderReferenceByNextToken"; public static final String SET_ORDER_ATTRIBUTES = "SetOrderAttributes"; + public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.3.4"; + public static final String APPLICATION_LIBRARY_VERSION = "3.4.0"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations diff --git a/tst/com/amazon/pay/TestConstants.java b/tst/com/amazon/pay/TestConstants.java index 606d27f..5d14d08 100644 --- a/tst/com/amazon/pay/TestConstants.java +++ b/tst/com/amazon/pay/TestConstants.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -28,8 +28,8 @@ public class TestConstants { public static final String secretKey = "TEST_SECRET_KEY"; public static final String region = "us"; public static final String sandbox_mode = "true"; - public static final String timeStamp = "2015-00-00T00:00:00Z"; - public static final String urlEncoded_TimeStamp = "2015-00-00T00%3A00%3A00Z"; + public static final String timeStamp = "2015-12-31T23:59:58Z"; + public static final String urlEncoded_TimeStamp = "2015-12-31T23%3A59%3A58Z"; public static final String platformId = "A11WKBU7ADWTAU"; public static final String MWS_URL = "https://mws.amazonservices.com/OffAmazonPayments_Sandbox/2013-01-01"; public static final String mwsAuthToken = "TEST_MWS_AUTH_TOKEN"; @@ -40,6 +40,7 @@ public class TestConstants { public static final String amazonOrderReferenceId = "AMAZON_ORDER_REFERENCE_ID"; public static final String Endpoint500 = "https://www.example.com/"; public static final String providerSellerId = "TEST_PROVIDER_SELLER_ID"; + public static final String overrideSellerId = "OVERRIDE_SELLER_ID"; public static final String providerCreditId = "TEST_PROVIDER_CREDIT"; public static final String reversalProviderCreditId = "TEST_PROVIDER_REVERSAL_CREDIT"; public static final String reversalProviderCreditReferenceId = "TEST_PROVIDER_REVERSAL_CREDIT_REFERENCE_ID"; diff --git a/tst/com/amazon/pay/impl/LoginUserInfoTest.java b/tst/com/amazon/pay/impl/LoginUserInfoTest.java index 2a2e056..585cbaf 100644 --- a/tst/com/amazon/pay/impl/LoginUserInfoTest.java +++ b/tst/com/amazon/pay/impl/LoginUserInfoTest.java @@ -1,3 +1,17 @@ +/** + * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ package com.amazon.pay.impl; import com.amazon.pay.TestConstants; @@ -6,6 +20,7 @@ import com.amazon.pay.types.CurrencyCode; import com.amazon.pay.types.Region; import com.amazon.pay.types.User; +import java.net.HttpURLConnection; import java.net.URLDecoder; import java.util.HashMap; import java.util.Map; @@ -17,16 +32,15 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; - @RunWith(PowerMockRunner.class) @PrepareForTest(Util.class) public class LoginUserInfoTest { - + private final String accessToken = TestConstants.addressConsentToken; private final String clientId = TestConstants.clientId; private PayConfig config; private PayClient client; - + @Before public void setUp() throws Exception { PowerMockito.spy(Util.class); @@ -37,36 +51,32 @@ public void setUp() throws Exception { .withCurrencyCode(CurrencyCode.USD) .withSandboxMode(true) .withRegion(Region.US); - client = new PayClient(config); } - - @Test + + @Test public void testGetUserInfo() throws Exception { - - ResponseData tokenInfoResponse = new ResponseData(200 , TestConstants.tokenInfoResponse); - String tokenInfoURL = TestConstants.tokenInfoURL + URLDecoder.decode(accessToken, "UTF-8"); - PowerMockito.doReturn(tokenInfoResponse).when(Util.class, "httpSendRequest" , "GET", tokenInfoURL , null , new HashMap(), null); - - ResponseData userInfoResponse = new ResponseData(200 , TestConstants.userInfoResponse); - Map headerValues = new HashMap(); - headerValues.put("Authorization" , "bearer " + URLDecoder.decode(accessToken, "UTF-8")); - PowerMockito.doReturn(userInfoResponse).when(Util.class, "httpSendRequest" , - "GET", TestConstants.userProfileURL , null , headerValues); + final ResponseData tokenInfoResponse = new ResponseData(HttpURLConnection.HTTP_OK, TestConstants.tokenInfoResponse); + final String tokenInfoURL = TestConstants.tokenInfoURL + URLDecoder.decode(accessToken, "UTF-8"); + PowerMockito.doReturn(tokenInfoResponse).when(Util.class, "httpSendRequest", "GET", tokenInfoURL, null, new HashMap(), null); + final ResponseData userInfoResponse = new ResponseData(HttpURLConnection.HTTP_OK, TestConstants.userInfoResponse); + final Map headerValues = new HashMap(); + headerValues.put("Authorization", "bearer " + URLDecoder.decode(accessToken, "UTF-8")); + PowerMockito.doReturn(userInfoResponse).when(Util.class, "httpSendRequest", + "GET", TestConstants.userProfileURL, null, headerValues); User user = client.getUserInfo(accessToken, clientId); Assert.assertEquals("testbuyer2@amazon.com", user.getEmail()); Assert.assertEquals("Test Buyer", user.getName()); Assert.assertEquals("amzn1.account.AF5W6J2OG52NKFJGEN52GEZ5CWFQ", user.getUserId()); - } - + @Test(expected=AmazonServiceException.class) - public void testInvalidAccessToken () throws Exception{ - ResponseData userProfileErrorResponse = new ResponseData(200 , TestConstants.userProfileErrorResponse); - String tokenInfoURL = TestConstants.tokenInfoURL + URLDecoder.decode(accessToken, "UTF-8"); - PowerMockito.doReturn(userProfileErrorResponse).when(Util.class, "httpSendRequest" , "GET", tokenInfoURL , null , new HashMap()); - User user = client.getUserInfo(accessToken, clientId); + public void testInvalidAccessToken() throws Exception { + final ResponseData userProfileErrorResponse = new ResponseData(HttpURLConnection.HTTP_OK, TestConstants.userProfileErrorResponse); + final String tokenInfoURL = TestConstants.tokenInfoURL + URLDecoder.decode(accessToken, "UTF-8"); + PowerMockito.doReturn(userProfileErrorResponse).when(Util.class, "httpSendRequest", "GET", tokenInfoURL, null, new HashMap()); + final User user = client.getUserInfo(accessToken, clientId); } } diff --git a/tst/com/amazon/pay/impl/SignatureAndURLTest.java b/tst/com/amazon/pay/impl/SignatureAndURLTest.java index 5aa43c3..d233769 100644 --- a/tst/com/amazon/pay/impl/SignatureAndURLTest.java +++ b/tst/com/amazon/pay/impl/SignatureAndURLTest.java @@ -1,3 +1,17 @@ +/** + * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ package com.amazon.pay.impl; import com.amazon.pay.request.RequestHelper; @@ -16,16 +30,14 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; - @RunWith(PowerMockRunner.class) @PowerMockIgnore({"javax.crypto.*" }) @PrepareForTest(Util.class) public class SignatureAndURLTest { - - PayConfig config; - String mcokTimeStamp = "2015-01-01"; - RequestHelper helper; - + + private PayConfig config; + private RequestHelper helper; + @Before public void setUp() throws Exception { config = new PayConfig().withAccessKey(TestConstants.accessKey) @@ -35,33 +47,74 @@ public void setUp() throws Exception { .withRegion(Region.US) .withSandboxMode(true); this.helper = new RequestHelper(config); - PowerMockito.stub(PowerMockito.method(Util.class , "getTimestamp")).toReturn(mcokTimeStamp); + PowerMockito.stub(PowerMockito.method(Util.class , "getTimestamp")).toReturn(TestConstants.timeStamp); } - @Test - public void testRequestUrlAndSignature() throws Exception{ + @Test + public void testRequestUrlAndSignature() throws Exception { this.helper = new RequestHelper(config); - PowerMockito.stub(PowerMockito.method(Util.class , "getTimestamp")).toReturn(mcokTimeStamp); - GetOrderReferenceDetailsRequest request = new GetOrderReferenceDetailsRequest(TestConstants.amazonOrderReferenceId); - String action = "GetOrderReferenceDetails"; - String signature = "f5nzn7c4GBTiiDQC9N2uSFSmOLgOsP3ReAKTmGlNpE4%3D"; - String expectedURL = "AWSAccessKeyId="+TestConstants.accessKey+"&Action="+action+"&AmazonOrderReferenceId="+TestConstants.amazonOrderReferenceId+"&SellerId="+TestConstants.merchantId+"&Signature="+signature+"&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp="+mcokTimeStamp+"&Version=2013-01-01"; + PowerMockito.stub(PowerMockito.method(Util.class, "getTimestamp")).toReturn(TestConstants.timeStamp); + final GetOrderReferenceDetailsRequest request = new GetOrderReferenceDetailsRequest(TestConstants.amazonOrderReferenceId); + final String action = "GetOrderReferenceDetails"; + final String signature = "cpkDC72d5lMIbo5ET2dvERTw4F2cGQJL3eQPzUe2pAE%3D"; + final String expectedURL = + "AWSAccessKeyId=" + TestConstants.accessKey + + "&Action=" + action + + "&AmazonOrderReferenceId=" + TestConstants.amazonOrderReferenceId + + "&SellerId=" + TestConstants.merchantId + + "&Signature=" + signature + + "&SignatureMethod=HmacSHA256" + + "&SignatureVersion=2" + + "&Timestamp=" + TestConstants.urlEncoded_TimeStamp + + "&Version=2013-01-01"; Assert.assertEquals(expectedURL, this.helper.getPostURL(request)); } + @Test + public void testRequestUrlAndSignatureWithMwsDelegation() throws Exception { + this.helper = new RequestHelper(config); + PowerMockito.stub(PowerMockito.method(Util.class, "getTimestamp")).toReturn(TestConstants.timeStamp); + final GetOrderReferenceDetailsRequest request = + new GetOrderReferenceDetailsRequest(TestConstants.amazonOrderReferenceId) + .setSellerId(TestConstants.overrideSellerId) + .setMWSAuthToken(TestConstants.mwsAuthToken); + final String action = "GetOrderReferenceDetails"; + final String signature = "MelQJXDdQJ85Z7aB85s7eYWm5TdGv6xYAQt%2FjoOhXCo%3D"; + final String expectedURL = + "AWSAccessKeyId=" + TestConstants.accessKey + + "&Action=" + action + + "&AmazonOrderReferenceId=" + TestConstants.amazonOrderReferenceId + + "&MWSAuthToken=" + TestConstants.mwsAuthToken + + "&SellerId=" + TestConstants.overrideSellerId + + "&Signature=" + signature + + "&SignatureMethod=HmacSHA256" + + "&SignatureVersion=2" + + "&Timestamp=" + TestConstants.urlEncoded_TimeStamp + + "&Version=2013-01-01"; + Assert.assertEquals(expectedURL, this.helper.getPostURL(request)); + } @Test - public void testRequestParameterConstructorSignature_2() throws Exception{ + public void testRequestParameterConstructorSignature_2() throws Exception { helper = new RequestHelper(config); - PowerMockito.stub(PowerMockito.method(Util.class , "getTimestamp")).toReturn(mcokTimeStamp); - String orderAmount = "2"; - SetOrderReferenceDetailsRequest request = new SetOrderReferenceDetailsRequest(TestConstants.amazonOrderReferenceId , orderAmount); - String action = "SetOrderReferenceDetails"; - String signature = "SAz7bebEm8G63ycFtygCiAI8L4jUoK5katCaU6wlXUI%3D"; - String expectedURL = "AWSAccessKeyId="+TestConstants.accessKey+"&Action="+action+"&AmazonOrderReferenceId="+TestConstants.amazonOrderReferenceId+"&OrderReferenceAttributes.OrderTotal.Amount="+orderAmount+"&OrderReferenceAttributes.OrderTotal.CurrencyCode=USD&SellerId="+TestConstants.merchantId+"&Signature="+signature+"&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp="+mcokTimeStamp+"&Version=2013-01-01"; - Assert.assertEquals(expectedURL, this.helper.getPostURL(request)); + PowerMockito.stub(PowerMockito.method(Util.class, "getTimestamp")).toReturn(TestConstants.timeStamp); + final String orderAmount = "2"; + final SetOrderReferenceDetailsRequest request = new SetOrderReferenceDetailsRequest(TestConstants.amazonOrderReferenceId, orderAmount); + final String action = "SetOrderReferenceDetails"; + final String signature = "i51MSGv9O2G2LHIlhCXLigA3ZKaZRoc7Mb5A1VX2QTA%3D"; + final String expectedURL = + "AWSAccessKeyId=" + TestConstants.accessKey + + "&Action=" + action + + "&AmazonOrderReferenceId=" + TestConstants.amazonOrderReferenceId + + "&OrderReferenceAttributes.OrderTotal.Amount=" + orderAmount + + "&OrderReferenceAttributes.OrderTotal.CurrencyCode=USD" + + "&SellerId=" + TestConstants.merchantId + + "&Signature=" + signature + + "&SignatureMethod=HmacSHA256" + + "&SignatureVersion=2" + + "&Timestamp=" + TestConstants.urlEncoded_TimeStamp + + "&Version=2013-01-01"; + Assert.assertEquals(expectedURL, this.helper.getPostURL(request)); } - - } diff --git a/tst/com/amazon/pay/impl/ipn/NotificationFactoryTest.java b/tst/com/amazon/pay/impl/ipn/NotificationFactoryTest.java index 2b07a90..350dde8 100644 --- a/tst/com/amazon/pay/impl/ipn/NotificationFactoryTest.java +++ b/tst/com/amazon/pay/impl/ipn/NotificationFactoryTest.java @@ -1,3 +1,17 @@ +/** + * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ package com.amazon.pay.impl.ipn; import com.amazon.pay.response.ipn.model.ProviderCreditNotification; diff --git a/tst/com/amazon/pay/impl/ipn/NotificationVerificationTest.java b/tst/com/amazon/pay/impl/ipn/NotificationVerificationTest.java index c3d77fa..663b269 100644 --- a/tst/com/amazon/pay/impl/ipn/NotificationVerificationTest.java +++ b/tst/com/amazon/pay/impl/ipn/NotificationVerificationTest.java @@ -1,3 +1,17 @@ +/** + * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ package com.amazon.pay.impl.ipn; import com.amazon.pay.exceptions.AmazonClientException; diff --git a/tst/com/amazon/pay/impl/ipn/SigningCertURLTest.java b/tst/com/amazon/pay/impl/ipn/SigningCertURLTest.java index bf461c5..c4d211d 100644 --- a/tst/com/amazon/pay/impl/ipn/SigningCertURLTest.java +++ b/tst/com/amazon/pay/impl/ipn/SigningCertURLTest.java @@ -1,3 +1,17 @@ +/** + * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ package com.amazon.pay.impl.ipn; import java.lang.reflect.InvocationTargetException; @@ -6,7 +20,7 @@ import org.junit.Test; public class SigningCertURLTest { - + private static final String VALID_CERT_URL = "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-bb750dd426d95ee9390147a5624348ee.pem"; private static final String VALID_CERT_CN_URL = "https://sns.us-east-1.amazonaws.com.cn/SimpleNotificationService-bb750dd426d95ee9390147a5624348ee.pem"; private static final String INVALID_PROTOCOL_CERT_URL = "http://sns.us-east-1.amazonaws.com/SimpleNotificationService-bb750dd426d95ee9390147a5624348ee.pem"; @@ -14,8 +28,8 @@ public class SigningCertURLTest { private static final String INVALID_DOMAIN1_CERT_URL = "https://sns.us-east-1.fakecert.com/SimpleNotificationService-bb750dd426d95ee9390147a5624348ee.pem"; private static final String INVALID_DOMAIN2_CERT_URL = "https://sni.us-east-1.amazonaws.com/SimpleNotificationService-bb750dd426d95ee9390147a5624348ee.pem"; private static final String INVALID_DOMAIN3_CERT_URL = "https://sns.us.amazonaws.com/SimpleNotificationService-bb750dd426d95ee9390147a5624348ee.pem"; - private static final String INVALID_DOMAIN4_CERT_URL = "https://sns.us-east-1.amazonaws.com.com/SimpleNotificationService-bb750dd426d95ee9390147a5624348ee.pem"; - + private static final String INVALID_DOMAIN4_CERT_URL = "https://sns.us-east-1.amazonaws.com.com/SimpleNotificationService-bb750dd426d95ee9390147a5624348ee.pem"; + /** * SigningCertURL parameter with invalid protocol */ @@ -23,7 +37,7 @@ public class SigningCertURLTest { public void testIllegalProtocolSigningCertURL() throws Throwable { testSigningCertURL(INVALID_PROTOCOL_CERT_URL); } - + /** * SigningCertURL parameter with invalid file type */ @@ -31,7 +45,7 @@ public void testIllegalProtocolSigningCertURL() throws Throwable { public void testInvalidFileSigningCertURL() throws Throwable { testSigningCertURL(INVALID_FILE_CERT_URL); } - + /** * SigningCertURL parameter with invalid host name */ @@ -40,7 +54,7 @@ public void testInvalidDomain1SigningCertURL() throws Throwable { String testURL = INVALID_DOMAIN1_CERT_URL; testSigningCertURL(testURL); } - + /** * SigningCertURL parameter with invalid host name */ @@ -49,7 +63,7 @@ public void testInvalidDomain2SigningCertURL() throws Throwable { String testURL = INVALID_DOMAIN2_CERT_URL; testSigningCertURL(testURL); } - + /** * SigningCertURL parameter with invalid host name */ @@ -58,7 +72,7 @@ public void testInvalidDomain3SigningCertURL() throws Throwable { String testURL = INVALID_DOMAIN3_CERT_URL; testSigningCertURL(testURL); } - + /** * SigningCertURL parameter with invalid host name */ @@ -67,7 +81,7 @@ public void testInvalidDomain4SigningCertURL() throws Throwable { String testURL = INVALID_DOMAIN4_CERT_URL; testSigningCertURL(testURL); } - + /** * SigningCertURL parameter with valid URL */ @@ -76,7 +90,7 @@ public void testValidSigningCertURL() throws Throwable { String testURL = VALID_CERT_URL; testSigningCertURL(testURL); } - + /** * SigningCertURL parameter with valid CN URL */ @@ -85,21 +99,19 @@ public void testValid2SigningCertURL() throws Throwable { String testURL = VALID_CERT_CN_URL; testSigningCertURL(testURL); } - + private void testSigningCertURL(String testURL) throws Throwable { NotificationVerification nv = new NotificationVerification(); Method m = nv.getClass().getDeclaredMethod("isValidSigningCertURL", URL.class); m.setAccessible(true); - try { - m.invoke(nv , new URL(testURL) ); - } catch(InvocationTargetException e) { + try { + m.invoke(nv , new URL(testURL) ); + } catch (InvocationTargetException e) { Throwable targetException = e.getTargetException(); - if(targetException instanceof SecurityException ) { + if (targetException instanceof SecurityException) { throw targetException; } } } - - } diff --git a/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java b/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java index 8425a09..4a58cc8 100644 --- a/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java +++ b/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java @@ -1,3 +1,17 @@ +/** + * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ package com.amazon.pay.request; import com.amazon.pay.response.model.Price; @@ -27,7 +41,7 @@ public class PaymentsAPIRequestTest { @Test public void testAuthorizeRequest() { - AuthorizeRequest request = new AuthorizeRequest(TestConstants.amazonOrderReferenceId, TestConstants.authorizationReferenceId, "2") + final AuthorizeRequest request = new AuthorizeRequest(TestConstants.amazonOrderReferenceId, TestConstants.authorizationReferenceId, "2") .setMWSAuthToken(TestConstants.mwsAuthToken) .setCaptureNow(true) .setSoftDescriptor(TestConstants.softDescriptor) @@ -49,7 +63,7 @@ public void testAuthorizeRequest() { @Test public void testCancelOrderReferenceRequest() { - CancelOrderReferenceRequest request = + final CancelOrderReferenceRequest request = new CancelOrderReferenceRequest(TestConstants.amazonOrderReferenceId) .setMWSAuthToken(TestConstants.mwsAuthToken) .setCancelReason(TestConstants.sampletext); @@ -60,7 +74,7 @@ public void testCancelOrderReferenceRequest() { @Test public void testCapture() { - CaptureRequest request = new CaptureRequest(TestConstants.amazonOrderReferenceId, "Capt123", "2") + final CaptureRequest request = new CaptureRequest(TestConstants.amazonOrderReferenceId, "Capt123", "2") .setMWSAuthToken(TestConstants.mwsAuthToken) .setSellerCaptureNote(TestConstants.sampletext) .setSoftDescriptor(TestConstants.softDescriptor) @@ -79,7 +93,7 @@ public void testCapture() { @Test public void testCloseAuthorizationRequest() { - CloseAuthorizationRequest request = + final CloseAuthorizationRequest request = new CloseAuthorizationRequest("Auth123") .setMWSAuthToken(TestConstants.mwsAuthToken) .setClosureReason(TestConstants.sampletext); @@ -91,7 +105,7 @@ public void testCloseAuthorizationRequest() { @Test public void testCloseOrderReferenceRequest() { - CloseOrderReferenceRequest request = + final CloseOrderReferenceRequest request = new CloseOrderReferenceRequest(TestConstants.amazonOrderReferenceId) .setMWSAuthToken(TestConstants.mwsAuthToken) .setClosureReason(TestConstants.sampletext); @@ -103,7 +117,7 @@ public void testCloseOrderReferenceRequest() { @Test public void testConfirmOrderReferenceRequest() { - ConfirmOrderReferenceRequest request = new ConfirmOrderReferenceRequest(TestConstants.amazonOrderReferenceId) + final ConfirmOrderReferenceRequest request = new ConfirmOrderReferenceRequest(TestConstants.amazonOrderReferenceId) .setMWSAuthToken(TestConstants.mwsAuthToken); Assert.assertEquals(request.getAmazonOrderReferenceId(),TestConstants.amazonOrderReferenceId); @@ -112,7 +126,7 @@ public void testConfirmOrderReferenceRequest() { @Test public void testGetAuthorizationDetailsRequest() { - GetAuthorizationDetailsRequest request = new GetAuthorizationDetailsRequest("Auth123") + final GetAuthorizationDetailsRequest request = new GetAuthorizationDetailsRequest("Auth123") .setMWSAuthToken(TestConstants.mwsAuthToken); Assert.assertEquals(request.getAmazonAuthorizationId(), "Auth123"); Assert.assertEquals(request.getMwsAuthToken(), TestConstants.mwsAuthToken); @@ -120,7 +134,7 @@ public void testGetAuthorizationDetailsRequest() { @Test public void testGetCaptureDetailsRequest() { - GetCaptureDetailsRequest request = new GetCaptureDetailsRequest("Capt123") + final GetCaptureDetailsRequest request = new GetCaptureDetailsRequest("Capt123") .setMWSAuthToken(TestConstants.mwsAuthToken); Assert.assertEquals(request.getAmazonCaptureId(), "Capt123"); @@ -129,7 +143,7 @@ public void testGetCaptureDetailsRequest() { @Test public void testGetOrderReferenceDetailsRequest() { - GetOrderReferenceDetailsRequest request = + final GetOrderReferenceDetailsRequest request = new GetOrderReferenceDetailsRequest(TestConstants.amazonOrderReferenceId) .setAddressConsentToken("Atza|IwEBIDcwh13A-nf8EuZahCu") .setAccessToken("Atza|oVsmstLsCYekhCdyR1Hu6FFveZC") @@ -143,7 +157,7 @@ public void testGetOrderReferenceDetailsRequest() { @Test public void testGetRefundDetailsRequest() { - GetRefundDetailsRequest request = new GetRefundDetailsRequest("Ref123") + final GetRefundDetailsRequest request = new GetRefundDetailsRequest("Ref123") .setMWSAuthToken(TestConstants.mwsAuthToken); Assert.assertEquals(request.getAmazonRefundId(), "Ref123"); @@ -152,7 +166,7 @@ public void testGetRefundDetailsRequest() { @Test public void testRefundRequest() { - RefundRequest request = new RefundRequest("C1233421424","Ref123", "2") + final RefundRequest request = new RefundRequest("C1233421424","Ref123", "2") .setMWSAuthToken(TestConstants.mwsAuthToken) .setSellerRefundNote(TestConstants.sampletext) .setSoftDescriptor(TestConstants.softDescriptor) @@ -176,7 +190,7 @@ public void testRefundRequest() { @Test public void testSetOrderReferenceDetailsRequest() { - SetOrderReferenceDetailsRequest request = new SetOrderReferenceDetailsRequest(TestConstants.amazonOrderReferenceId, "2") + final SetOrderReferenceDetailsRequest request = new SetOrderReferenceDetailsRequest(TestConstants.amazonOrderReferenceId, "2") .setMWSAuthToken(TestConstants.mwsAuthToken) .setPlatformId("platformId") .setSellerOrderId("sellerOrderId") @@ -277,7 +291,7 @@ public void testGetBillingAgreementDetails() { @Test public void testSetBillingAgreementDetails() { - SetBillingAgreementDetailsRequest request = new SetBillingAgreementDetailsRequest(TestConstants.billingAgreementId) + final SetBillingAgreementDetailsRequest request = new SetBillingAgreementDetailsRequest(TestConstants.billingAgreementId) .setMWSAuthToken(TestConstants.mwsAuthToken) .setCustomInformation("custom") .setPlatformId("platformId") @@ -296,7 +310,7 @@ public void testSetBillingAgreementDetails() { @Test public void testValidateBillingAgreement() { - ValidateBillingAgreementRequest request = + final ValidateBillingAgreementRequest request = new ValidateBillingAgreementRequest(TestConstants.billingAgreementId) .setMWSAuthToken(TestConstants.mwsAuthToken); @@ -306,9 +320,9 @@ public void testValidateBillingAgreement() { @Test public void testGetProviderCreditDetails() { - GetProviderCreditDetailsRequest request = + final GetProviderCreditDetailsRequest request = new GetProviderCreditDetailsRequest(TestConstants.providerCreditId, TestConstants.providerSellerId) - .setMwsAuthToken(TestConstants.mwsAuthToken); + .setMWSAuthToken(TestConstants.mwsAuthToken); Assert.assertEquals(request.getAmazonProviderCreditId(), TestConstants.providerCreditId); Assert.assertEquals(request.getSellerId(), TestConstants.providerSellerId); @@ -317,10 +331,10 @@ public void testGetProviderCreditDetails() { @Test public void testGetProviderCreditReversalDetails() { - GetProviderCreditReversalDetailsRequest request = + final GetProviderCreditReversalDetailsRequest request = new GetProviderCreditReversalDetailsRequest( TestConstants.reversalProviderCreditId, TestConstants.providerSellerId) - .setMwsAuthToken(TestConstants.mwsAuthToken); + .setMWSAuthToken(TestConstants.mwsAuthToken); Assert.assertEquals(TestConstants.reversalProviderCreditId, request.getAmazonProviderCreditReversalId()); Assert.assertEquals(TestConstants.providerSellerId, request.getSellerId()); @@ -329,11 +343,11 @@ public void testGetProviderCreditReversalDetails() { @Test public void testReverseProviderCreditDetails() { - ReverseProviderCreditRequest request = new ReverseProviderCreditRequest(TestConstants.reversalProviderCreditId, + final ReverseProviderCreditRequest request = new ReverseProviderCreditRequest(TestConstants.reversalProviderCreditId, TestConstants.reversalProviderCreditReferenceId, TestConstants.providerSellerId, TestConstants.reversalProviderAmount) - .setMwsAuthToken(TestConstants.mwsAuthToken) + .setMWSAuthToken(TestConstants.mwsAuthToken) .setCreditReversalNote(TestConstants.sampletext) .setCreditReversalCurrencyCode(CurrencyCode.USD); @@ -455,7 +469,7 @@ public void testListOrderReferenceByNextToken() { @Test public void testSetOrderAttributes() { - Set orderItemCategories = new HashSet(); + final Set orderItemCategories = new HashSet(); orderItemCategories.add("Antiques"); orderItemCategories.add("Apparel"); final SetOrderAttributesRequest request = @@ -485,4 +499,13 @@ public void testSetOrderAttributes() { Assert.assertTrue(request.getOrderItemCategories().contains("Apparel")); } + @Test + public void testGetMerchantAccountStatus() { + final GetMerchantAccountStatusRequest request = new GetMerchantAccountStatusRequest() + .setMWSAuthToken(TestConstants.mwsAuthToken) + .setSellerId(TestConstants.providerSellerId); + Assert.assertEquals(request.getSellerId(), TestConstants.providerSellerId); + Assert.assertEquals(request.getMwsAuthToken(), TestConstants.mwsAuthToken); + } + } diff --git a/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java b/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java index 6c7a05e..b2e7551 100644 --- a/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java +++ b/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java @@ -1,5 +1,21 @@ +/** + * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ package com.amazon.pay.response; +import com.amazon.pay.exceptions.AmazonServiceException; +import com.amazon.pay.response.model.AccountStatus; import com.amazon.pay.response.model.AuthorizationDetails; import com.amazon.pay.response.model.CaptureDetails; import com.amazon.pay.response.model.Environment; @@ -26,6 +42,7 @@ import com.amazon.pay.response.parser.GetBillingAgreementDetailsResponseData; import com.amazon.pay.response.parser.GetCaptureDetailsResponseData; import com.amazon.pay.response.parser.GetOrderReferenceDetailsResponseData; +import com.amazon.pay.response.parser.GetMerchantAccountStatusResponseData; import com.amazon.pay.response.parser.GetPaymentDetails; import com.amazon.pay.response.parser.GetProviderCreditDetailsResponseData; import com.amazon.pay.response.parser.GetProviderCreditReversalDetailsResponseData; @@ -818,7 +835,6 @@ public void testErrorResponse() throws Exception { Assert.assertEquals(e.getErrorType(), "Sender"); Assert.assertEquals(e.getRequestId(), "6d4699b8-1238-4c09-b539-176e2c2f5462"); Assert.assertEquals(e.getErrorMessage(), "OrderReference S01-5695290-1354077 is not in draft state and cannot be modified with the request submitted by you."); - } } @@ -865,7 +881,43 @@ public void testSetOrderAttributesResponse() throws Exception { Assert.assertEquals(res.getOrderReferenceDetails().getReleaseEnvironment().value(), "LIVE"); Assert.assertEquals(res.getOrderReferenceDetails().getOrderReferenceStatus().getState(),"Draft"); Assert.assertEquals(res.getOrderReferenceDetails().getSellerOrderAttributes().getOrderItemCategories().getOrderItemCategory().size(),2); + } + + @Test + public void testGetMerchantAccountStatusActiveResponse() throws Exception { + final String rawResponse = loadTestFile("GetMerchantAccountStatusActive.xml"); + final ResponseData response = new ResponseData(HttpURLConnection.HTTP_OK, rawResponse); + final GetMerchantAccountStatusResponseData res = Parser.getMerchantAccountStatus(response); + Assert.assertEquals(res.getRequestId(), "4b84390f-748b-40a3-ab07-9395e3616310"); + Assert.assertEquals(res.getAccountStatus(), AccountStatus.ACTIVE); + } + + @Test + public void testGetMerchantAccountStatusInactiveResponse() throws Exception { + final String rawResponse = loadTestFile("GetMerchantAccountStatusInactive.xml"); + final ResponseData response = new ResponseData(HttpURLConnection.HTTP_OK, rawResponse); + final GetMerchantAccountStatusResponseData res = Parser.getMerchantAccountStatus(response); + + Assert.assertEquals(res.getRequestId(), "0441027b-eaf7-443f-bd39-53075c3b8f4f"); + Assert.assertEquals(res.getAccountStatus(), AccountStatus.INACTIVE); } -} + @Test + public void testGetMerchantAccountStatusErrorResponse() throws Exception { + final String rawResponse = loadTestFile("GetMerchantAccountStatusError.xml"); + final ResponseData response = new ResponseData(HttpURLConnection.HTTP_FORBIDDEN, rawResponse); + try { + Parser.marshalXML(ErrorResponse.class, response); + Assert.fail(); + } catch (AmazonServiceException e) { + Assert.assertEquals(e.getResponseXml(), rawResponse); + Assert.assertEquals(e.getStatusCode(), HttpURLConnection.HTTP_FORBIDDEN); + Assert.assertEquals(e.getErrorCode(), "UnauthorizedSolutionProvider"); + Assert.assertEquals(e.getErrorType(), "Sender"); + Assert.assertEquals(e.getRequestId(), "b1c459b9-61c7-4f0b-b0b6-d6afcd314ef9"); + Assert.assertEquals(e.getErrorMessage(), "The Solution Provider : A2J2RH3AOT7N6C is not authorized for getting the status of provided merchant : A3URCZVLDMDI45"); + } + } + +} diff --git a/tst/com/amazon/pay/response/xml/GetMerchantAccountStatusActive.xml b/tst/com/amazon/pay/response/xml/GetMerchantAccountStatusActive.xml new file mode 100644 index 0000000..1a928f4 --- /dev/null +++ b/tst/com/amazon/pay/response/xml/GetMerchantAccountStatusActive.xml @@ -0,0 +1,9 @@ + + + ACTIVE + + + 4b84390f-748b-40a3-ab07-9395e3616310 + + + diff --git a/tst/com/amazon/pay/response/xml/GetMerchantAccountStatusError.xml b/tst/com/amazon/pay/response/xml/GetMerchantAccountStatusError.xml new file mode 100644 index 0000000..4898f5f --- /dev/null +++ b/tst/com/amazon/pay/response/xml/GetMerchantAccountStatusError.xml @@ -0,0 +1,9 @@ + + + Sender + UnauthorizedSolutionProvider + The Solution Provider : A2J2RH3AOT7N6C is not authorized for getting the status of provided merchant : A3URCZVLDMDI45 + + b1c459b9-61c7-4f0b-b0b6-d6afcd314ef9 + + diff --git a/tst/com/amazon/pay/response/xml/GetMerchantAccountStatusInactive.xml b/tst/com/amazon/pay/response/xml/GetMerchantAccountStatusInactive.xml new file mode 100644 index 0000000..82b8e8a --- /dev/null +++ b/tst/com/amazon/pay/response/xml/GetMerchantAccountStatusInactive.xml @@ -0,0 +1,8 @@ + + + INACTIVE + + + 0441027b-eaf7-443f-bd39-53075c3b8f4f + + From e470bb1c26ed7d0f29c3a5e5bc0abf850d82b71b Mon Sep 17 00:00:00 2001 From: BJ Guillot Date: Wed, 24 Oct 2018 16:08:50 +0000 Subject: [PATCH 06/21] Amazon Pay Java SDK 3.4.1 --- CHANGES.txt | 7 +++++ ...ava-sdk-3.4.0.jar => amazon-pay-3.4.1.jar} | Bin 233093 -> 233645 bytes pom.xml | 2 +- src/com/amazon/pay/impl/Util.java | 6 ++--- .../AuthorizeOnBillingAgreementRequest.java | 24 ++++++++++++++++++ .../CreateOrderReferenceForIdRequest.java | 24 ++++++++++++++++++ src/com/amazon/pay/request/RequestHelper.java | 13 ++++++++-- .../request/SetOrderAttributesRequest.java | 24 ++++++++++++++++++ .../SetOrderReferenceDetailsRequest.java | 24 ++++++++++++++++++ .../pay/response/model/ErrorResponse.java | 18 ++++++++++--- .../response/model/SellerOrderAttributes.java | 14 ++++++++++ .../amazon/pay/response/parser/Parser.java | 2 +- .../amazon/pay/types/ServiceConstants.java | 7 ++++- tst/com/amazon/pay/TestConstants.java | 9 ++++--- .../pay/request/PaymentsAPIRequestTest.java | 14 +++++++--- .../pay/response/PaymentsAPIResponseTest.java | 22 ++++++++++++++-- .../xml/GetOrderReferenceDetailsResponse.xml | 9 ++++--- .../xml/SetOrderReferenceDetailsResponse.xml | 1 + tst/com/amazon/pay/response/xml/Throttled.xml | 9 +++++++ 19 files changed, 206 insertions(+), 23 deletions(-) rename dist/{amazon-pay-java-sdk-3.4.0.jar => amazon-pay-3.4.1.jar} (75%) create mode 100644 tst/com/amazon/pay/response/xml/Throttled.xml diff --git a/CHANGES.txt b/CHANGES.txt index 208d698..43d93a0 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,10 @@ +Version 3.4.1 - October 2018 +- Updated XMLInputFactory.newFactory() to XMLInputFactory.newInstance() in generateErrorException method (now consistent with 3.0.1 release). +- Add parameter SupplementaryData to SetOrderAttributes and SetOrderReferenceDetails API calls. Only use this field at the specific direction of Amazon Pay. +- Force InputStreamReader to use UTF-8 encoding for request responses, overriding any local environment setting. +- ErrorResponse object collects both "RequestID" (returned from Throttled calls) and "RequestId" (everywhere else) in the XML instead so that it is accessible via getRequestId(). +- AuthorizeOnBillingAgreement can now properly set the sellerNote and platformId fields + Version 3.4.0 - April 2018 - Add support for GetMerchantAccountStatus API - Solution Providers can now override the Seller ID on a per-request basis instead of having to instantiate a new Client object for each request. diff --git a/dist/amazon-pay-java-sdk-3.4.0.jar b/dist/amazon-pay-3.4.1.jar similarity index 75% rename from dist/amazon-pay-java-sdk-3.4.0.jar rename to dist/amazon-pay-3.4.1.jar index 40d059e5fbf3b5decf04bf69279fddbd4e376cb3..9fab6f7d756e6e2fae73ca76919ba906da6ce0c1 100644 GIT binary patch delta 41584 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 Q9C=PTbF*JI6l28hf0ox@%m4rY delta 41342 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
+QZAcF0dK!I1P9D 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 Aga7~l delta 32602 zcmY(p18^YU6EzxbY}*^#Ha51gv2AT8+1R#iZ?ds%+qTWOzyJ4M)%&`p=1g^;J9oOK z>)u<{=c^I%qzDl~Q3f0W76b$u1Y|N?EDnJRdLmp*zQx3^CXU}88i78_B>_GPJ?;+~ z`1rr@D$)PoodWzHE8#mR&Hqptl>L7g4$AmHYzJjU`R^?t|3AY@AOS~D5SoQdzy*W- ze_6yS-4viO35x%(Ll2Dee}NP*{{P_;82A4W4V>qHs0hyV-|P(m;4~2bIT~uAl)(NM zfqPpIJ_ zOj(r#M@YCslLL0`QKzEviK$?@Ighw0r<|Q8TXMR5`M@2B8c`VxJD|~$NIg^7*O?r} z11cyuasTHlJz%JCF7+F2$2XX6b?lR@HFa3#*QITWLs^odm$v!&~Q?!>_-3 z?r)m{eOX^~Oa&fPqSdpevu;b-9uvh&0>@Vb&(&*AYy8Ue_H(~zraz1h!UqPn zufB^In~Z>$6Ln7tByE!1sSB<=F-1;VV=JhnQp%;u?BJRFFh@8W&ihTEtsjk^EJae| zTK}_F#5cH7)~v_FY?n{_HTOz=ZvERXI3&ZYXH=z_ELytqGvxnQ!O$T8{oouG!K4IO zOclTZ9$E}W0~I|N@@ahkd6B5I?9#X9Q|)S@qWVeSRe$;Ecn`#(wtW-f z=PoTxr#8sXZF{x%EIjmg{-5oG^F-@nA2UD{&?|U%@H5pbtE`LVfz$UjINZK9PmuMc z4Nv--o?-Kl@~Zhp&nG75qc7^K|7qhH^s@r_E9#57|7$ly*QaoIh{ks}cxTFNBxs7rC`Fm&0u7+LdHY|o&P|e0Og6|kcr}N&Eu3-*dd9z58mSLBUpHMk51Pnk+ z4nvDxe49FIE^RtGpbDyDR}7mrn@VF;PNedYMq^eUSf*SI$)q+oFH{W4%${0CBI}uo zJ37x)jA&rRr9zg9JEF?10>$ErtWuC#ZeYcxVw{RQHqTW&$f|aNs%ED|PthzK8m2ps z9x7$z1lmrCcsNEKw2c*VeUMk4dI|(LK8MT5stmYr9zVlk>@ua49&F**IW}|k(wl{o zsWC?|nzi-g+X-l3-02#1%FsE8;&mRN!fiPCX%>d_q-dT8%lVv9rD*oLp6TWLuW^(c zmFeKqCu4Lk<&V%OM_{ml?P4>ixAxb)+hAY~IXbq}$UF1}@u_0rihh@Oi2xRiqI5FJ z+wJPq+1kV+Xk0jTM_j85dFHJMl#KXQ@KSG?U0GC0m=4U#lgdC;gb!DX!=vn)(>&L0 zb^~=uE5o5Rtlj%AjLVrB8kT#X;BYQU|2C)EU;|y~Db4*w430PxAdW3Mx+LjpjzxHnp%tYDGym=_&A|~w zPB&x>)d#yghb|p7O>H}#>Ia@GNqDL^#+>J-7>~DE9lH_?c1AFEW~Z18b_ctZx?dcB zn+XKn!+4j|FHNjlBgzP5KN8Dwm|Zzlo|s%~XfB=mwpOejtGz2@#E@CI z`uh>4pFIWld0~?P0hji3qR__4Y*0GZ?Nys|zx~rWu9DMZJL~k2B(0Lux*{UISdn3m zch(IIvh4YLhvy|afkh5rVpj88c^1&jxE(PrhRws!SgmIM&I~=eZV(YY4TLe~a{l>S zy&yW)Vg2D!;v!YMawa&4cYD+5suE^%9mMMY_REX7cY7i^Gk~BLC4A{Dj)MQs$WkSz zczc}NuJ?ZP&B-qmJ2=Q*9=*U`uTnEZ=>pTmJI~F~lvK=MpuJ?!jzo5NkiMwV`}5GO zgMPO_2Ri#O_A=@?Di4$YkL=Hqkb9wqPGanGYhfqOQR=Wyok$j}CS!<|K8n4!j>GR4d9T5241@*J zpF+3QLijARrQfL!5hUqTtP?Hjw``y3if4^85$qLzK!+yN#{a-q&& z*!60lhDMkx@!U5SX|7ADEY&x0z5|C;eRdnCJt* zbOo_*vkpzC66~UxNsJeM#EI5Z84bm0X`O1`;=ZDL8QW<2RQZ~saq1KDi6c!PHx-Qs z1b7=c1jO5RjtLT_izBRsjbhrI?8vFkO`9p+>R8L@oKL95vDk!^C={plw}fueOq9%f zuSJ@@1D}T;A9An{YITwrS>+zTd)?Leq?lW2vPm-#p1S2Y9v0WD;;n}&B#S0dYZaObA$PuXb`XQrLFCR^Ga?*6)1qoghlHhL|c zU{-L=clI+>AK}joT~O%7&mi-@vrRq6Lg6qw1(?0vGi81jHOa<%+j+pFqIr$ZH`ZfqIA50<42|@GH#;fzX)7zv|lo{+zH~5n#vU^Jr0jG+Y z={**6XYPH!FK{U>4etcT5hIzpu|rhZS6Pw76dG%-GYb0^@ho?%?WB=R@=Y~|!$+gt zf%%chAt!Y*b$+Sad_~fPNZM5~CTE0HbYxNp))&k*Vm7R$_*tfwEvZm$fvy}Qzm+r5 z)@<}^n=$fe(TYpx!(mdXe()^uNOv#Wsc%IB&`+gE>0VnQ77^a=E+UI^0NLwJje_j0|-Y=(c+BA&NkAko1JagmO7=}w`#QJ33rIK z9$nQiUyy?b_C^MUT6d33V=U$}Tm=Uk_u}S3p-f|0Hep!3NN6S1-(jV$e#6Hl=>=SN zz%-Qp@~e_{49Wtpk&P!wyjzr~Y95iS8EYZw7?7OeILWJBB64@rFmZauS#uk@U^h2R z#IG<%@zFrEIqcqR}9Uv<=yG4g9v)YJ|I+bFByZC7WCRo1aWyNJE$+ESEYhzBx z(jRPe_o}ce>;nDjq2gpaTChwq@7H9&Wh9QI$C6CG&Td`4%dPev?hYW(Cbr`Yvc*`vc?5Pe z+((f;at5hU4UY2 zjNACVA^Qbqwf@H0hsFdV`afa#}z~w$W4dnEU-$OHSVScd=^uuhs`iBz2HvSdA zPww~n;1naZl^FrmCao|kq2c)v)l}`h5A9j9%=7qE=&ts@y|saEgT#IY=i>t~%rR!O zGsO)|8+3VO>q-yqLn3sB{9;RSmdY>)X0*7b_bCa(8j!(t+eIs1uE>*l*G6NE*s{Ly+mWXU7jE43yg7KNLw_Z2&jNymn82?(m4Zu2aPTru&Hoa@cOnZ?M$PXZp`} zYs#N9C^nJp%kx#x04)2mT^K;FoqltszipR4a98y#Z@NU15*L@Dm&ePy0pe@AUvS{9 z+ygbQI3wc&m&2fdM!7X(`xkErEi8_S>t}vra zM9!){w9GgCoG~JeX2zrpzgsnp0%}xP7GZH8`NYtwlpxj*F{a;vR+$$dS9$wR*Q_X%&DFNDOrWh6I#D| zMD##aPCj9d-4k11o*DR|!PPd5w<$zIA0!NS#3+fKX$9)M`pdVTTW(QW|8dbFPz{Z* znWFcKnkeW)GJWR-cW)3Solm#DQ2I5CI;QYgBcY*R20ff&U@AS6{wVf*pX7JHXLV+Z zfWo~8SQG}H_6U!oy@<0n4mU+kXILTKkx)mb2FU@O#r{Kb*a1*j)C0&x5ZWQWRC3I& zZRU@>M5bCrT80*LN`X|eY2Y3Nmmkmz^Xn2qON=g^eiDZv!z2$aQZxqYCpys-R4;Up zpeiT8?TdKn_QA#AS~vD>G={PUWnz+`lUdcvGc4{aIl&C{r&p#R;BJO2S$fdwOMY;A z+cKf&Ri|>zzyoAsI_Tx2i2#eM}OnE#e6!j*>`q z5Y#a;%9n5{Z(t^odt)zE)fy>(p|}YAt4KNtGznom!42(MGc4)Tj!tgj)v{0CaYvnU zr*LxyNCA7(pr(2e9j&gaN@@)AG3VjCU7J8^ey%%mtVl_+$cdZgY~DAh^{F*B&uR~q zgrkwW7Wco73U+f2gp(Qv-~Oz#bdT;?s1MbZbSU=y9F9nB)$9w||1PUnZWz)YSvJPL zPG2+pJUNLDXZ4IKkT*hW$uL&Y&kJ2(%kOvaRtgwfV1vii($p;Ov)_jN8T=DAG#oRI zgsoX9E92RVhO3X8MMM%gj9*5ApW5G3EKNTVTNEWX#_n0w&LEm;>d{{~obPxs;^o}W z6{3K6R#{HQT3?=OW6rgb@QX@Fc5*GRQEe%TM|m0#CfMTp+=mZU;OV7F0EwzA8L4FI z+#7I#<>h+NdA5s>G$psGAnjh$a-KTP>w$j+N0ivqFC)cwDD9I!Iu?X6mRxvvMw&P? z+fA{<>H(L4^X5f-R4f)hN;nBLFL9bZY-erW{)kBIA)x&l^^!_7u zKYoK_+HOU5aY;~ilb1T`=6W4-*$iuZ?gM!BIvuQb{aP1@UHVh_Y?7XANK4{;xfk2y zRub4Z;D-0YFTA6_zu==6apE*&nzUHS-8TudGSAwwboSl?%6*?I`eVGz^<}s7m*VVQ z>eNwx3&JLoeJ4)m371#Hx5x++DC5q*rH}KK(p)AJh{c3|0snc|u0C7l<}RcwIbQ&u zp1j^FC3#&}#H*-t@6hdM0eWZUSfoDr{xmFO1x*?E{y?FWH1161C2jn8(u2ce!V0U$ z7nCo{5ZyLeYeJ?qnVX}?VI{km7m@XD;+?nZl!~)0I?iD%*uO32FaOrqUrod#YgQ+P z`^K5!jik(o>Gh?VK-!Wy(78$Wf+*)!|(Qo8AwjQ)I|t`Xh;0r1A;wwq=Q!{AzrIKG4bw;~QJnb}OJ5;xJhM zfNHIjy_b7qS=B*hi#AmUwYH(WrI2*ZmKXaciMi;Nca*cdw_CJuLkZ#9F>m<&M6%QR zQ=C<_)a2xj{-TXBo|+`jA>z>d`B^OE-^|0o%_2~pL1P^}ePp9B(8fVnH zsPsO9_}|8TD@QvTh+(5+Z^VG!vcv-G>t>G|uq=93 z8U325-xw13vEOt4ULmlhpc~zlQs+uqsnhAOO#SFUAlc85YKES3mi=_q>|u`wA?ek( zA`HcA+y6NJeD9|CNrlbSF%?*e#{;tvcJrJ`OI9k^fOj}y$%mO&u7eGbDWfK5wEHJF z_Dno%HgU`{*jy?y%q`&!S&_|QFew;~!}iN7+Xgc4&2kdjK9NF|5Q`3`fH1iWKP3=FfmtViX2bnPm zQDAD}BSI!a8Jow>v5WyW?_mUQ(TwE2`|w~p1^4vSl+blIJkgN;JVVx*o{f!?%7>w9 z^h5s9_i|Tmf8SJDB<~a*@)J&02}zx1eZ=R=I)AX5W8LWc2CdZo##P5gpv9Lb8n|%{ z#Di~q2Gj4VBl~Gy9W#5HfN^^XC~Ld>E6t3bXKztPd<*QWZzTYZ&K+VVV5!{vxI5N- zCX(N?oD^1P)(^#D&3~uz^ZezYC0H<(tP+@ErA^!ZV zmT;11^N#U!HN^&i&K?yYbu^lSf&6Gq;rEqVl~XpalETTUOC6=GPv^dDJ_qVZ_fow0 zs@i6Kli#!-h4d33PHgG;O$+2;Xq6;T@ogLorns9avmyIY$W87{9!WN!+OB_bc zJXtalW_Ky@7&=rcxvDkS@1GfevVB{cA!lMmd7-N(&-4Xieu?WD1Q6ber*k|vA$-Ih;v+a)y~$h_E|+E!Bve_2~<1E(E0d&)>x zZ2`N_BIAGyQ|iey*<6YWhjnVFz|!#R!@^9*2ll80OdF%>n>x%9QhBB%>71n8S3unG ztD)*3e>5Et?T3AQuG33==`bvUan2|FO^^mQrM0kp!`3XeW+w@Hq}a1cMxcp&Ynk^* z%2Ciq>!jA)9%e&9<@mXBn*hx2D0thaFD3n3n*i`$<@D}ca5BCl^bFPs5m+N6L=6;y z3w3Sv3A_@BK0T3vkYYH1QK>?0`;8)YkCw|LBL!5hBaD`hW)breUl|Sqe%Wy7kVrwJ z#7VZfJrdZEB#AEOu_NFZY+r$Aps6u5JH)NEeyc3X1PeRb-;?^e1!1kAnv+#8e*b>k zI|nu-f+9j624HMt=$df%^YGxp$|N*k>+H!|q2IJX#)QHC(y)V+=WkO4zMkqSriRyo zhi{uhinOedGI&rw4jJw0niz(WSEACn_Ri8(=Brkggf7h?YJ%5}qgWFo*4LUT@*Wnd zs~e)fx`OV53;NRMRm^iaV?gc2CRXEy5&{WDHYCa5BM_tRqF-tRitDv_(&}oiLYA)R zkS-!pRmvwy`HGl9{*9h!<$Rt>*!=_BRPbdJPy2#kgn`-%1p;8AC{2Aiskp(@Fi`WY zZhhBkgc?wh#Aal?h90)UMJ2?r2TEMEi~K!%x6K6($XErbI(a42`^BDY5oH<3Q&bI76;Aa+1wuLWEL5Hgxr>ASBT~|dYt6{L` zd3B!AhXb^1lma50J^{F}ECwuwxEY^Z5D|{pI4jUB@Pu%LoUVxd2SqA5CqJ z_|cSm>yS&v-xp}fS91Dj%8!g9LbZ^Ug1_OYvMc?*4%vpt{L!>0yuhR%^t#Pk*&`Jz z*>TO7Df@nVV=%TXCsiCvPO*sI%VI5;ryZhLwL}64jzgq`hm>g^ z5oJ+dveGnKQ?7X(<_sFn+KguLE%3pgY!Ozn(%7L0Z7~jWu@aq530hplxu0hd#TtX~ zD3E=vH$5R-O-fS@QFCYyCR&qn*NU>T1#_`owUVb-``oV)Qo*VJc2}FS@&$A8w<;Zx zVb;0dz!fTGrJ0Q*(5r1>NH0CWlT*v!&^_yzMYia*z8$D$Zb&ab&>B#C>C%0>GZL*? zlDqXUCpc>eyuRno*dGv*>hb zNaD(_-Bv?#|Az0HQC1evSDKb-7Qk3Xf-hq7O`x2)@bv*O6(hac+2QONwTD~=Sz+ef zMz#YDS+(k#nnQ&~RTP!%h?+;+NceS4J1z2>wDgt6Ds@fBiM`95Yuf79ctXgdO6<$JLJC4} z{#k1?qzCAU)2;8Mb=(5v_j&ZWDj7F~1|VJqVFm8@cNnD_~8bGWElvMH&s69;7f}oQTCM3SMB{!+6-0N56V;sGUH4jCUK~6HAxcy*ui*VClmbb8kVKnrx{hCpY|kMIzeSu&4ZmDifei)G(+nPm!)46UR13sU7OvhA+M{n<`1v#^nx3Tp=o-AhO zHQ(iTsR^fqtPuM0rhCnm)^7OB^@V~r0*vrb#BC6Zj&6@NoMU7PhK8;oVj2Bn8I^0g zAolia4D)?(D8@7l(tR+j4z3Kc*|27lk|F9Wn?P!YE&^!`2six%4+#UvZY0{nJQ|ul zgkA^-%RCyw|2FG>``2x~-Xg7~*wLR&$t0%}%*0 zHD~)aN$xEeLAn=ibmFT8!_tw7LQ`qE_kKGhe*@%XD=rCWYYiZ9TLeZd`a;6m8jiDW@mm*4abN7qn)KamV%r!-u%580Qti=X+Ps$1U%8 z%9e55dWfl$AR<`+m!fYl2JEhf_%^xtE|_=^&vzsR_3@<}%iNiIAFj_ptfN1B(8{JBaliWn375^pk2c zT=qcD3_sR7Qq0bVOHFs}9!>065c%HO9QOtty2aKI zADQ_#d3aFT^F6Yos9kzfn&mP1cBFP>7{Cb{LLk!->gyO{s)yr2%}vnZn}P9`<@KCp zD=Lx2^IA;+STO-gKBAx$bvNO1lNl>86WWC>>(xe>H*32mC(83Eokx4wG2b9x{it4h zIZ$8o^oy&i3?&bGSim5`Rc(;7J6^7dWya*oqMh5wi3{g)zyaCS1qHfDuvD5Eof_Pr zP#H35)Sy%?xZ7p`+;vn@vm8DkX%w_p8watK1?+wF2Q)x?P#bibSr+-bB8k}{fd%tY zWw1xyl+T4G={i&STMgC1wWKLnd!B6IQzGtj3=51v5zkMm1j8IBretarhgv79N!4OJ z2`{jyD}gaKy}=(tvd-%3Z03VKcc#JLvhcat7Yil=U z2U??Rn|KXAP>H7e8i#tdtq26*nQPtpwk)mMO-X^<5h2{&4JM%$PQy0u&>*hvLldFv z9CB79ZYpvOzcanx5BOB=dJ4k3ysQVRrXDc9o^Z`4M-4i8mbvi&-h2khW!swJWeY5# zYNC!XZ2)lo`^mk#)L%N=@x|X!O9CNs48TkA^Z>w~2;Q#NLHlqcJ@!SNB#ADVPZZ$O z4*{-hA{5np5Dcc2uCINHl`h?4rdYD-gh7`3 zhUU~UJzxhZ)1`cfw2A!tP}zP7i6sVEw`>rJSOx{Rbb*OS!&vXIlgim45s6q)cDiDW zfuz^F3D4*VhRolb6wr!uYV>4KyZj%P=`}A|wZX zqMqD_{ZIqq*e2n~M2^wqPrEhrfw%%b`CEL4IiuG#kfIZn1}w5HnJH1PUHIg|&`EcIqx~mEfU3*%Bm@HisRsuEp#VWo>5&A- zP64FAkpNH-_|Jlr^%T&A(fQ{vTdUv_Nptfx^X8j~;hxRvRxxE|X;779 zeKOpJ+=ktn(l*#FfzYo$DE6BkqU{)#&5P7$|GJg)Oz$cFCo;~bwI{}(p!nOw;CO!< zQbl`uv*@_-FgfVa>20*Aw3@B+Y=FFY3HB)4;FVg&fL%h-yp0DaM561unoJTRZYQSu zOcepEw+@ZGd#ghJMCoAH;E7u{$Ae6ggGK#Iowsqbk?ZHn4 z77V0b13@+E|MjcGTEYEJzI{H`Kfc$>47ZJNC3i#~ z2)$a3dP)0v8qrC$2kG7?Tvzzzpp{Xy+R`1kvLKq_miydtog-2k$6=iT85AW037^6- znjkvIW9?L}RjPy-wRW^8)h~U(joaDU62(LH-XO%1LjqHfj;du)C7tED6r?Z6|5bSMVMfr= zk^f{{W2h-80^k@48)(q~6&Do1U~FUP?EGJejiLUZ()y3~pJi!ydZ=n(e07YFyWbur z^@A!G!$GW2^szwDEeN5Y3W+B8L0ANwjg1?#Fx}~UTp>u6N;kTed7nvF>F7CB1gWEm zB+izrRa9v&HC;Bke)WBpY=u0xxl{C!r;#t%cX~c`dQSnjyhqv2m!2{2N9WuiXV*vs zXO8Wd6V2R_oI4X>e~+Pe)w5{rXKvKn17Q!a#59xho5+Eg_gt&y?D`=LH1Q)>U9Xc4Jgb*m(lg3}Vp^=fq=mw<-a)z+TC$PSCl3yPnU(VFw|3qo#3{(Lt5p7o3{zUGixo$)b{wCp) z*;CrB<D(Ppb-r?Ys^H#Vo35|l9TjCt`J6sO)b*73Nc`!$7n;h@ec#-k1V`l~^z2Q%h-;Xm_2;~`ies4)4$EiMen8RA+nBy#qs#%wQRhMRP zG2sJ#ivIFvR(OYLAq9=3mBo0*rFbPmYPdUpY4~Be>_-e=08KB1+>s9 z%stR8$=Eo@zhs)eRlUe^m`XW zMP+%gvgBqy+jMfI$K!HzZm6T=IiQGWD{U4bF2yJ|7aciX-YSD(8fC(IZPec14XI0e z9qVtut3xNws*ztb5r47<$umuTUF#2AZMQ*ohDfsM3doVO=1>f76ONfc{@~Vu_aPF@ z-Gb)}AHvpl^qT5Mx*=_Gfqx>}0=Id5|QsY~a9YOjA(5pSAX0J!txn!YrT(j=iDR)vw!IzTKdIYL-LfS!|K|HFCd@S>E~acsA)VSm{peq9w(+XiPIUE2r6$o}>(83@ z#oB7!!WGTI87}{#I$f>vmt-(NpKorAF{RnzkPhX!!oO?h3eCtx8Q6 z0~b(lt%E&~T~Vnjw6KVl^RD8QbI+PGW^CZM9^tHUwWvwEWN}8vs9BDeb3Ry7mIyH| z`4Cu$ZW_C@%#o(A36(vm#0&RLoxKVbm^-V7{Pq3J?;MyPYuB8cXFUQ{`irjb#~)Yf z!n&X%d26<4t*{nt-IxY!x^$d_u4HO|>eHBLztI$?OvMirDTXO<-!$9JGB zi`vcRQNk0K6t}5I6B?>4iuySQiWVGO5!NDTd>FoQOAI2PlMJ3tK98#Pm7Zw-vWkyC zd!Bf6g0G8sv3HG ze_+TSV|66rDRM`ew7Fb7vuB}Ca~U-}c(AsVQu|-dF}aTL5#ISm5RCYP@l;BTNv-lI zueaI5;R|G;{EDeVV}})^ht~hDg-m&n9sW>LD<5<@D<3f0g=cv6iklqx(p(;NER7pa zG6=8ZQvkdfw}$k}8XK<06e7*VE1s76zNZ%iao23pZfDb$E0Q;MAZvIA73#<#P+N}= zB1ZccUoc-Iq3IsCP*s4GqT{!*_ZEvbE9Jt-j{9pbfs|Ech3VYyN(! z^%%SJ?=1cekvkuJ$6kZy2x55TgKeSDAQyTOYru`PQ6)(>gudMQ`*k<0kq<#pCRvIU zL8BO^1Y=bhDF?TV<6~jERwjRi85Fm-{KPDcCSxMl9oS4$IeeR6BA$3kZ;TH`w%vulDR*(Ln$n=U~2~+)xY5Ufr3}kxz2Jic)9K_ed4Jv zCHYUNXQDzR;We#?6DcilyZoRUMvSllSfYOtDS-gjCo%_ZjNdXrMi^R~x!7Bw)?BB$ z2sD`QSpWCwCPmKMS``fh#4ABYn;P(<{yztp|2+R$hZc;FuG)g2d3}4z$Qg(2s{G03 zY@t-~TvmLt$Z9d$cf2&V@88PiMr2rQSy;zqSBq`x14c=QtLbP|#lOLtkc5WDlSa_l zK|{mRAHM#b4mTDNyg?X_qgp;9vLE5A@B z6ziJDfH2bJ%B)n}7*V#E4xyf;oVLrp9?0{=Xjrt*N;R}-rW>>As|^o11+i7Yc_I*L z3|qf=Sjxw?NK*n6d#vXIJ*AScKH`MalNJ4fywzHY#H>qp7QN@I*biaKt9?Bl_fuf~U?1827=MwQRK}c(dz2Yx zpy*`L^DpsM!JYnzcc#!^g(KE1AIzMpJ8qtwiaT=`0fnPG*G{1yx}`VbLFk7O-yTtM z^vZ8c<-Wv(!Ic zTaT@yt2D8FRNPrz6xgtXODqS8bT($AdPH{YX@kH5gs7RG`w}AS>i*V@C2W{O_twgJ z4CKLD_IQ*#gt6>geZ38<^`8vKpSAq^G47IerfMTU^d%?h#=UY=aoK~u5vT}{!;4Kk zOPL|1Ufn{W8ZDn8hhjGo@)suK9?$Mg=oEY- zN4mL7fN=3Mij>bhZTYc>z@_NmSq{_xJgx`|?kfg-j8X*|vGT;MyN zuC$!GmMe*?=-#Im>fPZY~S038w!mU1G8jFY?=B1*zae2Q5hjXwpj z_*4g{29Pi@5Ox<*CMUF)giZ2*$I4E+L}&l#6;?O7Z9V*PUxx`jBsAu)x14uP+(}k$ z{mzaNju$7*)+xHj+hdh(zHuLR`~|J`-mLC4L1~;>Fd$L-hkp69u4R_&Q`1I)3$_B! zJQ%FjZ!vg(d|6Y0&d%*++yg(eUu+DZHp9)|3B`$mn!uipyptr&>hb$2TaJhs@gtFA z4!!~*{5z&gK+vcgD}=eLIdic=$ps9kD{isY*O;UK>@93)@W@>qV$F^3Ji09SSC0A} zOhpX{bG~$0l%;U8vq{t<_b{o2`x}Z0o6d=%CaRjLXk$39VsnLwhmBb9c)%x+AL`+$ zrf#oFmM*sB-fJg&PCdHL@>4iW@{O$L-lK^JZyjYQMD6=m*3$27kkVwNE!^{fX36kD2X@qVfP(GObK% zl4E4yY!JYw4i~HCE&kx5V!rqjzw?PFNfFs&z4m=6`gC3Ix>ep@&B7gE!bNoL>8MYb zh@s(=Wfh2rSIJ8g8Bl#>KF&8dVH%AWUfBr}DUNm_LEY+)Hmcu84Z7rX~RL};BUCAva>#S*c4gd$nJ zH}?qcQYt>-ycfy}3@G5e8~YA!o4;@e_U4EEknBSxoQg+SPzKsF;0U-QK#Ug%KmOG7k8Oro}g2gLm)Q ziobco%+kL7MPDx^{gUxshX}zq&j9%)kNlPW$V!mKj=zkFxU>6+8Qy2Qff)(Kl&yKj z5YyXcGZQWzf#55O%x#v^jo6M|nT?>cL3akJC!B)kQp5&mjKFx1R041w52ebJ+k)2_ zkY90%@*gAHf1hosX$y8b_^I#@g7GgTK0Xm`G#P9n=0}Tb*Oz7~aC?=AUs?Zc9Y5iH zQ@*UOxAr{%tmaF>2uiUa$=Xv-Wfg;IUdp3T2wD{@k>|ORk3NCBC^^***w#0 z^%!B9+Wr14>O%yRQYUa%K=gxHtDnhPX*_W~;vTT%V)NQ~91w3qTWH3NriU%dJ?f|8 z=6C&55*Z1SM3rGyR9w!>JK+XUGT1q?zGQc^NecIm3%RplU-|RqUBfq#5*PQ-4F{IN zy|sc9BxPMpJGB?kA~^W=(*6xJ+K7X$9JEnWqs3=H7-z2!6j~phb{F~D-FdLoG50YE zvIEA5KZ3s1A%&G|b8Bsron0GVvG6oiorTFv@NusZdX}dtJDs-D$=u3+*P>};rRIfJ zud=S%iRy`+e}3uCi=~H_TUC zA_DW2VeryA{Hs2XEbtmStbwP)&SIR^^Ns2;l-8E!=FJ_8kpu4++tze;vw5nBV!vhi z8df}6_c|ot2FqJXZwMa@S`g09S*m{U=8@~wr)p;z-oZ*BQEV7GL3(I|R=YkMy8@*| z2F4@{rk$_fYsk4Telz#2Uo=*3GaN5f%Iq%LoTX zgbSRW&*YU3O>X_6Mg*WaoD!qeP3t1b{$O~z+5NzPJqfDwivMk>gZzl5njSAHATKw{ zks~2$6(bgB`n_Ip-6jQBQMCM&<7_R_V-}~8#LveEECO9jokLE(NPpHzMil^=O!%>$ zIn3AOtP{iFWXf@og0IJ4tN975JJAafTsL1!k9)aVnT>Y4cJT$08p7P5qTUFd?Z;Y=DUT>y5&i+4 zp&UQu7>ccDa4|vjB$o;pbMcNPghmeWm@-0qi^gUYxEl`w64#UuN6(6UQVL@J=+BPH zESNK5%p=4%49qD6RksVU&^T?hJdu~lscUisoJtuq1Rtu<(--iF{{mXX{q2;;$BxY+ zb3GlNzQ3|CjZ z?U8(`Ib9fcYZrG(63t4l+BaQOY%7Yl{~Xmw|b<5?fbyB?Cdm0yu1KSAq7o7 zy$d?~oXx8AfQxjzV-|opyL5v0OjG#nUT(kxMXsdnSf|?s9r4rl6>*swvca8p5UwzB z2p-$@ypJSHjPD6Vj)0ugBkPc-Jf%2g=P2F37{5zDeMP1L($Y;vi)aGH&fD^mjID-r zid77c51cKBq-_Bke}YX2E|unX;{{xGTyf6_XJ_&bnwyr*JsZ%uYi20^Dbc(_)-!hhCPC2R z^^KLcpdNL{x(Ad^iK@^h_GuSIeG-Mdf}0*DWDE%$u6n}u*EH7+Q>gs|>3TN5dJ=foPYdP7zXT%dB9 z5wHj6ez^#`Jiy;Sf;@!VUhAGVz+)Ep7P;df80;$+KmnG>(+BqoUZI_En;Nq^_e{T# zIGmBhNj|T@w=!HRqpp6@96r?NIicX$tU^!< zI-YrbY<&p)wbWhs&7rkIT_Qd56xB@N*O@Qu*ycc4ha}P(uhWpD$S=q6*K2|oGB@;A z*Tz5W-?U<;z~^H@_=PAbJ@|y8Sni9Eo9}exjDQAKC<_@xTMS1wq?wnGKN!J!+dKmc zvodQ81kI&u2A{b;(2Wj zp%ei@eh|9uhD43pHi^keZFjFD=rwXLWAf?2kC+xu9Jmn zV1UOUL8v|wvE2t4%9&bgNW`&zw!)Jm_r{dWF{r*=M|;@oGy3TfBJTFsv2bTFrOls@*f81E=LLm(F;7MFI73tXakr z@l-||h7+w1si{*1FZHeqEf%jZ{p8S5cVMoDDFuqqse6F7`#n{f2gc)u0L}{9jb2|> z+B3xQ{ zLP}61@0}j@vu?V_FkWfjCg_6xXb5dCt;T1GqoH(dqT-M>bs)T`D4#B_@{Tl;+(Rum z;)e_?Dpin2xyn=mgD9UOSF1++cmNdgE*c~? z=Ho&-+sR_`+U$l-cC1~NB#e7#a`FluQ(Z>YIPXRyR1_u2=lwF9y{ZEqIUqc$b+}s5 zgx?9BpO)tIB96?q6Uu|g4l|VIAAr6`9O0OF;gULODpBt|os=n~;jFLhFfcDnB$E68 zlyxQWRCMp(%-Bhm?E9LmNks@*vnNqPNRc%XmF=o5$xfNbR!PYkMP*mgn{1U7*^{Dj zRYI@wKQnV*+~2>?`*}Z)=lMSCIdkTmxzC*|@n#y@DAx-a?$IgZKMAP@@3=JLUVPnX zWZ0x7K1=bo(14}&e7J7?Yf@V4XugS=ZLd@p%|zzbM2}`&_m_IP`nJ!$X#Xsd zsEa!^Hd|d2Srz?u%UP%GRkhEqv5`K@?bMxoZ$eiV=>6*k=d!tl{l!Zs?0=;^jc31r zcAq|!ksxpRd{^8JSnlDa(~LJ0ALnY`_9C@i(f^S0?7DtgoMx0&s`R;|xv`J)NTL=& zPTf|#L&n}tyhRPoL3gLDf}O7aHe!;ctCFKnO@j@?`aJ_s+PN5zC;UhG8?RUx;&!8pqM4hLa?RN4gN@M}&BYIWdK z_1nxVaJ0k{k*G?j=qI3__x91_%1w_B5LN{1>j`3@QIEigJuZjWVIS20no!CS2Hu;{ zaz>aBIA^N*)9OT^ot_op=o?Hg2rbsG^#mdEvI2koL{-o0To`}31e3RGWfv_CO*tD1 zu|dLBS$(WT35wp&60fYt8GS5?XK=4vvXBNq_p_{IP!mrF>EZ>d>12YWafO;+>!5i& zks9&_C5R%|49${K{*6&!5<1BD4#&+ z59{HRzm7}J;m$c`{LJP0Kc)bSDMB|#aC0}J@5wNL!# zIPw#eM)0_&A$@{!_zGPksO1^RilD5&L(v5F?k8kGP-62?BthL+gzAYj-Tpv9ICXyj z&LxCl2%Jq&g7k1KLEU78DI>1J0@o0{>2=$ zTR77Wv#Lwo7|hV>{PJRpYViW2_&k$IWJbrn+@mDahcs3FIu_45ieS`z!dLsK&yT1meXma^9mxbX0>!kg>KP#yeF3& z+muh%<&PT*D}P?NnS=%{nYNV&Eg7{P4_dNpn+dABK5i>q{&@iz|NCrgPHCx#h4iN4 zABC%=Nk@-(HrJ8oyG{;a_L5$-yX!FKGehC>istdQi;aNi}~ zx-9@vt#EAX^FPC=Zli8f&BBslBX_0vO-o$mPS^NKf0+5@w<||?sV0}HRDFx9y_2!g z)c4-gteB+eDf>~+2R?T`Ww2}+)@#*rAV)c0DkE&8^?kypo zb+vn&UKKZN5LXr69WCx(*N2e50=} zZSopEpg?NL-{|A|`*4eWwN~FK|EorwF>@6L4{q_w6I?Cf{OfKD@!mO`zgT9;wDZ=v z9x3~qyB=2z>`MyV*Jvxy;I*@tOTS0q@tuJFQHfnh*S+i}E9acq7}fo4r#EQs`Dt)K z_Q&f>5iS|>0>MVVD~`Op!JI<_)F<;9pmWgeH19Gm*!Sx7St|W z=UdG!vw!;2j!}}LgQ3d!!*;t8=Jn;}&3y^FJ3hP&JGQQ@Mo3=0;F|A|$$;w<0T)YM z$1hD>aO?dJbL5){b!|NBu=VS>OfOq~AN|02n>QN2%O64lnh%0ZXuW5b$ew{0~A2wWLva5Fwcer}QbLfeToyBsu zyX8lVee9pVr7lNbRI_H6w*M6?{qo7F=%7o+s&2tHDH;=r1=sg`RyH>DuhV-kVrR?} z(Z2ou@$=lLwwl({ZAv7S)_iwJ%@cW$wtb=Hqh0-VbuSf9r-FhT_1TJfj}^P>dk&}e zKc4g2=-gK6x!-WgbCY$@i=KbtiX`uGma1%lo!(VQ@F?=H|IM@0WHyAs zzy7TLQplB7zNhQVM{b`LRPh{DwCwJG;e16FIT|zB+bGK>u)y-yG&H>{dVZ1o=eR-9qT_gO#OAQ$jt?e6 z$FnSE!WSJsoUlM1FaD0}7tJKhv*FE1I_-ZgJraJJiceTilFVAibDYXPG*Pe~l z-B+=^tX{vV%E-`MIh)6j`L(B=+>;|Oa{j5(Jd@pL`bqbNvyt~_((JQ^es@Q`MwI1e zaRB4j_dMO7)HJ%Sy8gV4EDm!_^!97Jf8=I_$-!a!n!S>}B|ER#x=rueLJ~T-PC%tD zo;B7s#(K*hE}3=4&vX+rx4ze<_j*$>I(Q_X-tuEu;7*UJFH$}+tgpYCymb^d+L{t2 zyb-b1@2I#ew(YGiXK?Mw+Vk%%@4O$n>Mt2$V)-Lt3;TrBI>RlO_Q}gV(|vtuYqkW^ zWBZZ}9WfEVF7-JjE_Pc;@Rvt4UrF|Rw>L>=UfU>pyz`!3mUxaouhw5)So_?;$QG~2 z$-ASOy)-$aBiA_{TPxxBJPi9UjjSI_fZvNS$R`boN8Go}XK`AtoK0?3V* zN5H#=n8~`VCHFTqJMVq-%SGt@4cg&kh7BXv)KBkbiePuPi;Nu~@iisu&)vKK^+QLs znzO;LYL>TKADp3cxRUls<$>*#ul$2!B>$_g2kaXUObLJa!BcdqvcYM}>B|qhqUn;! zf}xJz(tEoq{%$XtuV~PpqMt@h>(ROPf}ytG6MKiB{pQ{~;}LE!g_O)(`YkqDWj3X+ z)!;DoxL|&`{@fDtuP1#|FP|N(w|6LBw_qyUC?LZ4qaZx-i!<*6eM4OAgvuPFNIjyV zul;NBL1!Bz8XG3`OXZ_mOIxD0-}itQZHn3-!{1Mh7bI(jU(q(z<_SNrOh?r`QIjtX zcMvy!e_1%3xaE`O;d=z{mJ)1EP{pe7X+qkw1NJ3&yR<+n2)>(9(}86Osf!-GNNg7z zjbST-S7r)p5Y)5&1f}i(I}lWc6P!d)8(rYrbhzQerQwroz;GovgKQxTe>{t9K-nLGqX)k`EK4XD z9D}zI)EO_hi-_3lI4nR=#{%I(Ldp>g#}icEX_&G*n+So;h>g%`De3L5VB1>5h;4+V z(Dl)vkvcpACK2f_pM^yUN<13AOqh8X3mXypOy!EEHdKrrmdi+n8Byg}WF6WagMdTc zM~D_3$p<@ir;D%xp_PyTQ+CijNpLE`JDLjX64dQ<7@U8xGfHL#e2DP)I}>&zD3=`g zAdy!6wf}Uj3t%5Y+H?z(f`fI9a0%RoA6IK8%i%zRa;k#IiF5Qxu@re4kScgPPemGU z#wg5&W+ou~XvGJZwkD+-79bQ#9|8s3TzVb+k)XmF0firBol}={0>R+0(WA}nurz9y zglr-#w6ws9Fb8(NuY7no;{?F`1vA44wXTLG(T*fU28W^F>R`s2`>in8MPngrJ%djX zeyiKzB!V*T0y7o&=BdAakO_or2u24S8`1m}M2_&r{|c5Q(${$ddk}g>@BXu(F$iBH zctazwFF{#;fFlU1YZ5Cl=6&-ttWFfxdj?h^sJtJr5J5G}!yW5!ToMCfMrgceMqCL> zmkpsr{)hwdBVv)~M*InBE+67a@R)@VCxY@4MJPvfFA3x%!5fuEL8L@^ zC3C&m*GdyU`uW>S3io=s-xEvrx|qiEjVZca-GM_^>O*#F-%^z6=$sxeQv zRjyu;O6}7sm*IL>ATi6)`KC*ht)#nxl%Vt|)q?l+i`{l+p{AUotrEKmklgk2)n> zBf0)|JrrGhTM~TE=<|ow=iHtTp(&F-0aX(zPd26qyXtS(2*hUa&Nn|DmqT_(3Dke*mXwOhUMXExrW_9x>?n+>CZ)Z@a` z{^mj!%^Q(^7q+%03PsQ9ifi2Be|=s|{`x@I`sWJt$saB!>J3%COA_C_%Wd<8@-RnP z590*Ay**r6S^E7Zbk7Eha@t4`#KH7=r&dh;ZDJeLyT{F)!7e5-95b{`>R(EQ++qLub$zO0QcS}G`F4& zy_)Gs$cew_{nfayw)34!{L?=M9}P5%Q=_%w;2s&~(s$wOJSJ;o>Hi9v3dAN~OE`Rt z&U0tmyQZ+m+i!(2zw5taxOc2SxZ!?#s&U-U7yo)3KSVM!S?W2)m)d*jw$!1=LD`Bw ztMtc`chNDeS36TFHu?J8+sWK7cV%~d7a!DVYrAYRIyv5*p)#?0ffwIhGtk287O- zv^Ft|JNU744{C;t?dOiuSwG9j#uBF^`mba5dQ+_q=cae=&ZKVFE4&wN+HJh}Ck!9N zN5`5ouqYetVCp^SQ%4)bJV_tCt38^f_L;*C^!l?Txw{tqTbH*SU>{=>sT1O0mm6Jt z$6g1AnlO&(t8MUO-7wboFs4P`niQ?K=b_-&@|G>Xze*@yUR?Kn10Q32cAgq1Xba&q%e`u9lP3qSiVwH7^16W7y~ zBR3;b=8m6>E|l-klb*eLKIIm-qKZuXSoZGIu_yR4)#3*>-^t7(tBT)b^S*w28*`IG zMTe2Cn}UvGcl!7)+c5d>e4B2^ORMCE@3#8`H}mhW<(vM!=~sFgNz6JuVBK!ib?3i{ zDz@M&w~vIpgSwRlln!Y=s`hQO{hDBKw4d|1Z}7Y4ug#1V+BPR|P@J{gm$@aLtI&;w zO`yx)!#6w9VW6@4b4FlGZe`1Sp}^3Ug7Y@5E_J=Whj?dsm1%#}b)RWb%o+ZymD6jz zf7EQmFZocBrp=oRiupREZ$tT~KTl7Dhe;p0n^k_(&E1#By>@XRWN~0o(ckq=Q1N}U zn3&CH2kpYU^GNyonBrhxkg=_n-Vcaf-P#QTSd`b8KzM z;^0#5q3T@UCPUSI+lzzqS#8b-y>GOu;U4Ym9X1l<2@`Q>yHoFz&PVc&eC{35?dIk; zb$hQwy7vvSum^c6QOZ}Nl_zuTsz(=m8(KY*g{lhuCl7A2veL9GmAO|^>Af$>;eo$W z#x3@dgSvkzJr0)DR&lp!AAJ;jvt;a7{q~pF?Tr=N{hr`vFMWmg z`q2hiSG!g5|sBco!&3P9g|tQAhT6BUUhH$cdy^Ds_=@}6 z1?$duWf~QOxdgV5hFOLZu@{BQyj8w>1D+aN>7Ore&H2b#vir)jCx=sp+$|O=u%Zq)Uq7v^KrL0R{*BOyMhtw*oyNv1XQ~XrD~nE z4(K@SRu*b$yhCFy@Z(oKwN}%{kSBVzN-qT*Je+yr`UP~@{YxhVD5*V@BT7q7zD;@b!Q*5saMMGi*k2zs`2vc%>Gd=OG*@b z+2{Y_L`OE~k+;&tdwI`@ik4e6_9TKCRh7YF{ zeCvEr;U?=~-m_HuK>u9O(3kOBeXsITy)SbXdUrIHZubq${;Ijt`|eLsjgCVd3ECZt z)jMORhe|iiTqyr#WL|q=>}#{$ndj?Gx=2GidA|(QPr^$q4IZ;02@ZiR?}oMtRBUa& zZ}#2z*EjP-=L;`+GCBwPT-#~o?t6r#zNLRKb@|Si=B0|DopKuI)WNq;{UUf|yfw;n z9bX-c0p1CwoP{aSlx-<<5Y%{_R*q}{MnjCoo-F1d%j zEOPUeeK&j+`>(qh81#6b(7z`nvFvzk>$-c#Vo7RecbDhOL>E_g*PPqD&~NveR;J+8 zmF|P#5tAEVT;G{UQ*Bgd^xep}H;pl$4Kg!0sq6 z&A{Oi!}FmjY=3Ke{puXPmRX1nD;~O$k|G?D)oQy@M@eYv=MTm2JHNXrdpOw!T>Ltm zak25X@G+9_yP^Il>-39!2iw}XcPQ+B6>;$&Jc4jYrvxY#n7)H&bV5NUNZK!z4JOHOfR5Z`pr#Ba3ymE;rTa#Hw?JF!6_!iVhB_0?&U@c=WJ6A6ACDJ>}$v=n8 zL^f&ZBSlU!=E2Tp3)UmXTn%hXd@adzI!Wa5W-GBJ19Cc}^ZJM_qqidSOcy*yZgEA> zFJwmL(M4<@os7&gTc9WZVAK&^f?Jen8!wRKo0Y|v_LAEf8-C5_Z@HPD60j}A1|a78dIu(g~zHzN_I zwjk0ne{R@h!D-|aSHt=xk(L>{#$@up&7xvUyU4MOB)%n%7EwA<0=ca@Pi)DAe2bAJ zu*BbzM@LE`Pc}P?Eg6zgMiT!LcZ)L}DUsaQJS?_kL9SsW2`&k@4AYU4$@9%RVoUlY zax&vG-x61g4&8DBxvRNRY{`sV&bTbFB-qkOx12JcBb-3 zE61?78!f8D+` zoT{WtKXtckR=DP_>hI3FSj8`gW6AF=a&I;mCQjxyv^M`3ESV3kmim<2zv+?koS~*6 zdNgtJTf+n<!!Qsz8sF=$>kv@a+D^n!~Yw)?)%-&;|B?%de&t5 zn7hYv158uHrj0lg=XZZy1cearYZ5549-_YTdlIOr9{3>#aKuJq^$=y8c&LYL$DVMY z-!TzJDC;AJIB`lJ(ZPv_`iMSGEbAkB|8WFSX9GkQ|LdXwVvG~74G;^QkTOI}aKhgZ zF~x~`Lqr#Im|=t%;S7`ih%_UL_Io451&>L`7;(j8#(pURy={z`;eTO2D}erMOtEad z8`*;!%G!-s;>7fB!~y>ZdgV+1sEr9?EC!NV^G$6U8Y$v*j{m>ltnD7O$rwCu!M?YR z_M0G_;uwDAyHDU-Pa;%!HG7(L>w}`Gf+>QxU7(t#h#)fHgK@djb^V0V`2QqXn1uJt ze-d_d&=e8DGyDrA@bvj~2Z*{7Gj;7-1jx=$!!Un{I4X=VZFmv`2F8F+T!>XBGXTmi%GJ$Rb0U8=PDl=i3 z7#giLNAMpQK?gAt%hz!e9tEPf3EcKB3n1Vu#04R@Bvx&^i035~gAlVoh-y@}<%@9J zLl%evZepD!Fria|o48dfwQ6Fusf31R2bBr995(?vOq6gFgP4g;RXCH&3fY1e>G-!_ zH~)Z7ytTk1E(I#}$cH#G!U_?`k-yT}58HrP!6O(NO)BI-E$V8G2%!U3h$8NZWe@Ol zwE^d*(>F<>dDfIM@rV0G%zzQB8(G34pf z1`pGGzzYJjsEi1=VQ^DCh%#%S|Ic&6>ZCQIgl93nFwmS00yqyUZa}5`qJway)+L9# z!i`+q3ychP6B3h`0)zy+=D%Q))K~a`Wc6{PF2UfT>0@(*7Z2XS21vKOp-4qnr&%K= z@EpKPJ7Wp2aF{n9icJl$C z>mp0&zTN~nB;pTH%w}PtI(fpQvLdt|o%&C-h>6ma2odNqlEQ7d+5_%sRf0Rc74)-+ zgo4?Pm2h=yh>RXMrTQ0s%pW~}vy6NlajwaOI(p9{=@m4$i^Cu(9);ues55cm?* zC3L3`B0RXRw%TQ;bda+p$XSodO}RcQ?ttvUQMWIgHFpLcuCsz}DJoR85t`}%o&#eA zA9es9qRcSH7OaO!1m{{g0&bHf!QB&yFru3+;dQHta?~8#xC=zk2d053mF<%@Yn1-% zgE&_QP{RorRk0%q7wSYAK!?k|>HWaeY0$7?PGw5oo`B{agydGO2ps}e&O4&BhY)e} z;2}!Dp%~ZInczM=gz(`dP`1>bvIRvt48DL%eFvy_!=S`%Rl^zRhIwHOS(M}q)-bFv z-2N=m-VRuXObCW{{%o|6BAF zPORXW&>cr9b0a|2(g*7YI|uMvsO&#JiQ&c2P7=h3?sTQ3x!T+Hzbo_gQ!99OqT8#) z72(A5Yjy?sIY$ukzpj*h$)>}A%XV&!R^oZkG3RrLa159Gy>{;1QEi^5OD+~G=G`k{@0i$gnPy1 zUorXNE7WpE6f~~U%L>9!wtvRlNcfb*Pj)3aOR2 zP*G2W8~4=JP_`!tD9M7mhCP+i&f6juca>fSaOfzN0b)ml8_U zy?7|-#iL&he{|sBPY)1DJ_w&W=gZ~P>aw`IS5-g7M*#j8h@2XK{O$@~a&^*C_4ZMP z*HT5`u~t9yt0(0uT!u*d#6T?UU=k@);TP|(;Dzy#cJ>0533)(pBkLd`^nn-U(nxgV z|M3Py2?HzoR8}}@SMcC|_TSo)8mw|J9C%F!BTwzsv7UnWMhLI@-oUFy6Tuz)kNXGX zT0SATGd^I}>G&Z0c$f}8K=k418c~i9CD}j0UHsU*F#&E>sKPXQzJeFUt#J4PE4w-f zZbc`gk0u9FR)>5{^tNk7B#Qd`QI;DHKOjncNr*r*b!Q+u0b`aMA_W8g~iaMV74=Z>g9=!I?13+rJlZ2@J6D3q!q;&#_dOxp-z+rQm zQbk-|g2@HHtjIag9~; zw6ewrGa5_`0DJA=^3C)slfd4{93i)wr`W^e@5e-L3o9ZnR4$0J zhRx64b`}C|NT7<;Cp5_=0#6D;_;4#(LBPt@WrC}G3bbs4eLEW}2Z1(jEOZ>i5ez_D zFnaAgxYhm#lEeq>-@C7uun8mrCIt1JYk+nI&y70MQ|#eN+lx9hv99DYP+ID}-cg1X zB{|%+<0;^JmWklHuz)?+?qihYJwR&Dk9lCl7i3AjG8D6};2F@xQ`FT>P>-&9Dy$np==5|F)O_a1eYZg zoV~CeVOA*MN-5*q3=Nn89SWu3ox^}6Z_9rY89ZrRrw5a)-$q#S*8;PGKb%sJNI|)Z zRuGRW7$54Q)2S2qln5|21H&n$sN8t@N-Bt5Vcq}MPf2qPUUU>hro9{7S-Tx5MVSc) zLCEQ@0cn8#CcG$S<(`>6Aczwn2SAx6y93q6rax|&6?*s_G4Lqixo^Zx)1oVy(@ zCXRnn@p<48i2EYAs;KY5{Kp7<*m0O+bwVGLclfLi3KR!?P@gup`w;ldKzIXsFoj}& zGLx%N5a4(GzflP4|Kd3IMCryGY*v45g0ljzYNc5qF6KX;%fJ0kNPM zc~Qt_+`wuh+W!s#bc%o;i2zT{uyp~qvI8`#!5txlX!E(X8D?b84q;m`cM!1=)fAWs z$MBMEl@^k96 zzeUjQ0E8RPi^XJn@$3}yA5C?E^85t@rAHN#>O~BtiRuCs99nPEG!qS?-vgqjzP5rB zFsL~C{sO{{#$BLnk#aA9I6RV9M8r1N_xC^qGjPTMW(D=l?O7TDmCFL@?}?+7(>V@U zQOdxEN(@cTftm3MhNq;Ikad8PQhXKxh%A5w@h`^w&t|+x;OmQjLG0ncD|MQpIV+lL zHa@cH%>7d!${B#CzQU98F}wiEUI97_-&{l#@n=X(if8l90bT<<{-8efPZzA<*-?vl z;@6YW$as*|{o5-d36z`;rZx7M*Ge*C;y4KP7bvqK)riQKtl$~Y#41<@SHhp`IV1pk z9OY}|po35v7d2y|(8@I;|3t8hrcFfTaetp%6Vn2KKfEcB%Af0fY9&=1FOl2lfi)U_ z1MwM9;Y}Y<S{qfQ-CO? zoe+WUM&c8acNlkF7sX8~vJ*G6Clzo{y<9QFjJ|&dZ(JSG#JpYeT3~XtG5_yPpYhEa zCEr1?x?#`WaHH~Rz-Y<4HFBRcN(J@=k1%2t=mQn7rYfe;AT^#1+Z2nhW+k2ujOL82 z0iFL2aie=u5FXrV3MT(MzDC}=2(hD0C&7eCegjH}%~E`oTgH$(J`qT8Eij;6KVZu4 z)9DiU&;#3HgaQKg{Xz|rS~c;?_37%?;vXdY%E}pxB_6x0Cz$*)b%oWQfrcdsNkuG z1155TnWBYfRGWdQ;~xdtka*3og3p0C^r;HIxNfaNCm(pSsD&c3c=QSP$9G~IRw*z{ zCRAEJ9RH&ww_1}S6vXj%!&-pQ6=XZU0w=QW*U1GIu@!hTl|^+vG$0eo(!PPr( zjEk+D2$*>D0KbtMFG#^lfFr}=70MmejkU_92jJ(x?n#6SUoJx6wK6F;gYL`KTb)2C z*T8L+diUNffkE*fk4Nujf&osFCUhq_=AH(~f#&}Jx`H^V diff --git a/pom.xml b/pom.xml index e754013..023ab4f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazon.pay amazon-pay-java-sdk jar - 3.5.0 + 3.5.1 commons-codec diff --git a/src/com/amazon/pay/Client.java b/src/com/amazon/pay/Client.java index 5156ebb..cabd8d4 100644 --- a/src/com/amazon/pay/Client.java +++ b/src/com/amazon/pay/Client.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -82,7 +82,7 @@ public interface Client { * Capture operation after you call this operation. An authorization is only * valid for a particular time period, which is specified in the response of * the operation. - * Documentation: https://pay.amazon.com/documentation/apireference/201752010 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/authorize.html * * @param authorizeRequest Container for the necessary * parameters to execute the Authorize service API on @@ -103,7 +103,7 @@ public interface Client { * you must either set the CaptureNow request parameter to true, or call the * Capture operation after you call this operation. An authorization is only valid for * a particular time period, which is specified in the response of the operation. - * Documentation: https://pay.amazon.com/documentation/apireference/201751940 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/authorizeonbillingagreement.html * * @param authorizeOnBillingAgreementRequest Container for the necessary * parameters to execute the AuthorizeOnBillingAgreement service API on @@ -123,7 +123,7 @@ public interface Client { * You can cancel an Order Reference object only if there are no Completed, Closed, or Pending * captures against it. If you cancel an order reference, all authorizations associated with * this order reference are also closed. - * Documentation: https://pay.amazon.com/documentation/apireference/201751990 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/cancelorderreference.html * * @param request Container for the necessary * parameters to execute the CancelOrderReference service API on @@ -143,7 +143,7 @@ public interface Client { * To successfully capture a payment, you must call this operation on an Authorization object * before it expires, as specified by the ExpirationTimestamp returned in response of the Authorize operation call. * You must specify a capture amount, and the amount cannot exceed the original amount that was authorized. - * Documentation: https://pay.amazon.com/documentation/apireference/201752040 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/capture.html * * @param request Container for the necessary * parameters to execute the Capture service API on @@ -178,7 +178,7 @@ public interface Client { /** * Call the CloseAuthorization operation to close an authorization after the * total amount of the authorization has been captured. - * Documentation: https://pay.amazon.com/documentation/apireference/201752070 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/closeauthorization.html * * @param request Container for the necessary * parameters to execute the CloseAuthorization service API on @@ -198,7 +198,7 @@ public interface Client { * indicate that you want to terminate the billing agreement with the buyer and that you * do not expect to create any new order references or authorizations on this billing agreement. * All open authorizations on the billing agreement can still be used to capture funds. - * Documentation: https://pay.amazon.com/documentation/apireference/201751950 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/closebillingagreement.html * * @param closeBillingAgreementRequest Container for the necessary * parameters to execute the CloseBillingAgreement service API on @@ -218,7 +218,7 @@ public interface Client { * has been fulfilled (fully or partially) and that you do not expect to create any new * authorizations on this order reference. You can still capture funds against open * authorizations on the order reference. - * Documentation: https://pay.amazon.com/documentation/apireference/201752000 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/closeorderreference.html * * @param closeOrderReferenceRequest Container for the necessary * parameters to execute the CloseOrderReference service API on @@ -238,7 +238,7 @@ public interface Client { * indicating that all required information has been set on the billing agreement. * On successful completion of the ConfirmBillingAgreement call, the billing agreement * moves to the Open state. - * Documentation: https://pay.amazon.com/documentation/apireference/201751710 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/confirmbillingagreement.html * * @param confirmBillingAgreementRequest Container for the necessary * parameters to execute the ConfirmBillingAgreement service API on @@ -258,7 +258,7 @@ public interface Client { * constraints and all required information has been set on the order reference. * After you call this operation, the order reference is set to the Open state and * you can submit authorizations against the order reference. - * Documentation; https://pay.amazon.com/documentation/apireference/201751980 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/confirmorderreference.html * * @param request Container for the necessary * parameters to execute the ConfirmOrderReference service API on @@ -276,8 +276,7 @@ public interface Client { /** * The CreateOrderReferenceForId operation is used to create an Order Reference object from * the object represented by the Id and IdType request parameters. - * - * Documentation: https://pay.amazon.com/developer/documentation/apireference/201751670 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/createorderreferenceforid.html * * @param createOrderReferenceForIdRequest Container for the necessary * parameters to execute the GetOrderReferenceDetails service API on @@ -299,7 +298,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( * and to retrieve information about the total amount captured on the authorization. * If you received a Pending status when you called the Authorize operation, * you can call this operation to get the current status. - * Documentation: https://pay.amazon.com/documentation/apireference/201752030 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getauthorizationdetails.html * * @param request Container for the necessary * parameters to execute the GetAuthorizationDetails service API on @@ -317,7 +316,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( /** * The GetBillingAgreementDetails operation returns details about the Billing * Agreement object and its current state. - * Documentation: https://pay.amazon.com/documentation/apireference/201751690 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getbillingagreementdetails.html * * @param getBillingAgreementDetailsRequest Container for the necessary * parameters to execute the GetBillingAgreementDetails service API on @@ -337,7 +336,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( * To successfully capture a payment, you must call this operation on an Authorization object * before it expires, as specified by the ExpirationTimestamp returned in response of the Authorize operation call. * You must specify a capture amount, and the amount cannot exceed the original amount that was authorized. - * Documentation: https://pay.amazon.com/documentation/apireference/201752060 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getcapturedetails.html * * @param request Container for the necessary * parameters to execute the GetCaptureDetails service API on @@ -355,7 +354,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( /** * The GetOrderReferenceDetails operation returns details about the * Order Reference object and its current state. - * Documentation: https://pay.amazon.com/documentation/apireference/201751970 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getorderreferencedetails.html * * @param getOrderReferenceDetailsRequest Container for the necessary * parameters to execute the GetOrderReferenceDetails service API on @@ -440,7 +439,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( * Call the GetRefundDetails operation to query the status of a particular refund. * If you received a Pending status when you called the Refund operation, * you can call this operation to get the current status. - * Documentation: https://pay.amazon.com/documentation/apireference/201752100 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getrefunddetails.html * * @param getRefundDetailsRequest Container for the necessary * parameters to execute the GetRefundDetails service API on @@ -458,7 +457,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( /** * The GetServiceStatus operation returns the operational status of the Pay with Amazon API * section of Amazon Marketplace Web Service (Amazon MWS). - * Documentation: https://pay.amazon.com/developer/documentation/apireference/201752110 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getservicestatus.html * * @return The response from the GetServiceStatus service API, as * returned by Amazon Pay @@ -487,7 +486,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( /** * Call the Refund operation to refund a previously captured amount. You call the * GetRefundDetails operation to query the status of a refund. - * Documentation: https://pay.amazon.com/documentation/apireference/201752080 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/refund.html * * @param refundRequest Container for the necessary * parameters to execute the Refund service API on @@ -521,7 +520,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( /** * Call the SetBillingAgreementDetails operation to specify billing agreement * details such as a description of the agreement and other information about the merchant. - * Documentation: https://pay.amazon.com/documentation/apireference/201751700 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/setbillingagreementdetails.html * * @param setBillingAgreementDetailsRequest Container for the necessary * parameters to execute the SetBillingAgreementDetails service API on @@ -540,7 +539,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( * Call the SetOrderReferenceDetails operation to specify order details * such as the amount of the order, * a description of the order, and other order attributes. - * Documentation: https://pay.amazon.com/documentation/apireference/201751960 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/setorderreferencedetails.html * * @param setOrderReferenceDetailsRequest Container for the necessary * parameters to execute the SetOrderReferenceDetails service API on @@ -560,7 +559,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( * Open state (that is, after a successful call to the ConfirmBillingAgreement operation). * This operation validates the status of the billing agreement and the validity of the * payment method associated with the billing agreement. - * Documentation: https://pay.amazon.com/documentation/apireference/201751720 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/validatebillingagreement.html * * @param validateBillingAgreementRequest Container for the necessary * parameters to execute the ValidateBillingAgreement service API on @@ -627,7 +626,7 @@ public ListOrderReferenceByNextTokenResponseData listOrderReferenceByNextToken( /** * The SetOrderAttributes operation is used to set order attributes even after * the order has been confirmed. - * Documentation: https://pay.amazon.com/us/developer/documentation/apireference/22N636REVGXTPNR + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/setorderattributes.html * * @param setOrderAttributesRequest Container for the necessary * parameters to execute the SetOrderAttributes service API on @@ -647,6 +646,7 @@ public SetOrderAttributesResponseData setOrderAttributes( /** * The GetMerchantAccountStatus operation is used to query the status of a particular * merchant account and to retrieve information if the account is active or inactive. + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getmerchantaccountstatus.html * * @param getMerchantAccountStatusRequest Container for the optional * parameters to execute the GetMerchantAccountStatus service API on @@ -666,6 +666,7 @@ public GetMerchantAccountStatusResponseData getMerchantAccountStatus( /** * The GetMerchantAccountStatus operation is used to query the status of a particular * merchant account and to retrieve information if the account is active or inactive. + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getmerchantaccountstatus.html * * @return The response from the GetMerchantAccountStatus service API, as * returned by Amazon Pay. diff --git a/src/com/amazon/pay/impl/PayClient.java b/src/com/amazon/pay/impl/PayClient.java index 70fb7b0..5e0f236 100755 --- a/src/com/amazon/pay/impl/PayClient.java +++ b/src/com/amazon/pay/impl/PayClient.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -118,7 +118,7 @@ public PayClient(Config config) { /** * The GetServiceStatus operation returns the operational status of the Amazon Pay API * section of Amazon Marketplace Web Service (Amazon MWS). - * Documentation: https://pay.amazon.com/developer/documentation/apireference/201752110 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getservicestatus.html * * @return The response from the GetServiceStatus service API, as * returned by Amazon Pay @@ -142,8 +142,7 @@ public GetServiceStatusResponseData getServiceStatus() /** * The CreateOrderReferenceForId operation is used to create an Order Reference object from * the object represented by the Id and IdType request parameters. - * - * Documentation: https://pay.amazon.com/developer/documentation/apireference/201751670 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/createorderreferenceforid.html * * @param createOrderReferenceForIdRequest Container for the necessary * parameters to execute the GetOrderReferenceDetails service API on @@ -173,7 +172,7 @@ public CreateOrderReferenceForIdResponseData createOrderReferenceForId( /** * The GetOrderReferenceDetails operation returns details about the * Order Reference object and its current state. - * Documentation: https://pay.amazon.com/documentation/apireference/201751970 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getorderreferencedetails.html * * @param getOrderReferenceDetailsRequest Container for the necessary * parameters to execute the GetOrderReferenceDetails service API on @@ -280,7 +279,7 @@ public GetPaymentDetails getPaymentDetails( * Call the SetOrderReferenceDetails operation to specify order details * such as the amount of the order, * a description of the order, and other order attributes. - * Documentation: https://pay.amazon.com/documentation/apireference/201751960 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/setorderreferencedetails.html * * @param setOrderReferenceDetailsRequest Container for the necessary * parameters to execute the SetOrderReferenceDetails service API on @@ -311,7 +310,7 @@ public SetOrderReferenceDetailsResponseData setOrderReferenceDetails(SetOrderRef * Capture operation after you call this operation. An authorization is only * valid for a particular time period, which is specified in the response of * the operation. - * Documentation: https://pay.amazon.com/documentation/apireference/201752010 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/authorize.html * * * @param authorizeRequest Container for the necessary @@ -342,7 +341,7 @@ public AuthorizeResponseData authorize(AuthorizeRequest authorizeRequest) throws * and to retrieve information about the total amount captured on the authorization. * If you received a Pending status when you called the Authorize operation, * you can call this operation to get the current status. - * Documentation: https://pay.amazon.com/documentation/apireference/201752030 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getauthorizationdetails.html * * * @param request Container for the necessary @@ -373,7 +372,7 @@ public GetAuthorizationDetailsResponseData getAuthorizationDetails(GetAuthorizat * To successfully capture a payment, you must call this operation on an Authorization object * before it expires, as specified by the ExpirationTimestamp returned in response of the Authorize operation call. * You must specify a capture amount, and the amount cannot exceed the original amount that was authorized. - * Documentation: https://pay.amazon.com/documentation/apireference/201752040 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/capture.html * * * @param request Container for the necessary @@ -404,7 +403,7 @@ public CaptureResponseData capture(CaptureRequest request) throws AmazonServiceE * To successfully capture a payment, you must call this operation on an Authorization object * before it expires, as specified by the ExpirationTimestamp returned in response of the Authorize operation call. * You must specify a capture amount, and the amount cannot exceed the original amount that was authorized. - * Documentation: https://pay.amazon.com/documentation/apireference/201752060 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getcapturedetails.html * * * @param request Container for the necessary @@ -437,7 +436,7 @@ public GetCaptureDetailsResponseData getCaptureDetails(GetCaptureDetailsRequest * constraints and all required information has been set on the order reference. * After you call this operation, the order reference is set to the Open state and * you can submit authorizations against the order reference. - * Documentation; https://pay.amazon.com/documentation/apireference/201751980 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/confirmorderreference.html * * * @param request Container for the necessary @@ -466,7 +465,7 @@ public ConfirmOrderReferenceResponseData confirmOrderReference(ConfirmOrderRefe /** * Call the CloseAuthorization operation to close an authorization after the * total amount of the authorization has been captured. - * Documentation: https://pay.amazon.com/documentation/apireference/201752070 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/closeauthorization.html * * * @param request Container for the necessary @@ -500,7 +499,7 @@ public CloseAuthorizationResponseData closeAuthorization(CloseAuthorizationReque * You can cancel an Order Reference object only if there are no Completed, Closed, or Pending * captures against it. If you cancel an order reference, all authorizations associated with * this order reference are also closed. - * Documentation: https://pay.amazon.com/documentation/apireference/201751990 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/cancelorderreference.html * * * @param request Container for the necessary @@ -531,7 +530,7 @@ public CancelOrderReferenceResponseData cancelOrderReference(CancelOrderReferenc * has been fulfilled (fully or partially) and that you do not expect to create any new * authorizations on this order reference. You can still capture funds against open * authorizations on the order reference. - * Documentation: https://pay.amazon.com/documentation/apireference/201752000 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/closeorderreference.html * * * @param closeOrderReferenceRequest Container for the necessary @@ -562,7 +561,7 @@ public CloseOrderReferenceResponseData closeOrderReference(CloseOrderReferenceRe /** * Call the Refund operation to refund a previously captured amount. You call the * GetRefundDetails operation to query the status of a refund. - * Documentation: https://pay.amazon.com/documentation/apireference/201752080 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/refund.html * * * @param refundRequest Container for the necessary @@ -594,7 +593,7 @@ public RefundResponseData refund(RefundRequest refundRequest) throws AmazonServi * Call the GetRefundDetails operation to query the status of a particular refund. * If you received a Pending status when you called the Refund operation, * you can call this operation to get the current status. - * Documentation: https://pay.amazon.com/documentation/apireference/201752100 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getrefunddetails.html * * * @param getRefundDetailsRequest Container for the necessary @@ -623,7 +622,7 @@ public GetRefundDetailsResponseData getRefundDetails(GetRefundDetailsRequest get /** * The GetBillingAgreementDetails operation returns details about the Billing * Agreement object and its current state. - * Documentation: https://pay.amazon.com/documentation/apireference/201751690 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/getbillingagreementdetails.html * * * @param getBillingAgreementDetailsRequest Container for the necessary @@ -653,7 +652,7 @@ public GetBillingAgreementDetailsResponseData getBillingAgreementDetails(GetBill /** * Call the SetBillingAgreementDetails operation to specify billing agreement * details such as a description of the agreement and other information about the merchant. - * Documentation: https://pay.amazon.com/documentation/apireference/201751700 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/setbillingagreementdetails.html * * * @param setBillingAgreementDetailsRequest Container for the necessary @@ -686,7 +685,7 @@ public SetBillingAgreementDetailsResponseData setBillingAgreementDetails(SetBill * Open state (that is, after a successful call to the ConfirmBillingAgreement operation). * This operation validates the status of the billing agreement and the validity of the * payment method associated with the billing agreement. - * Documentation: https://pay.amazon.com/documentation/apireference/201751720 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/validatebillingagreement.html * * * @param validateBillingAgreementRequest Container for the necessary @@ -718,7 +717,7 @@ public ValidateBillingAgreementResponseData validateBillingAgreement(ValidateBil * indicating that all required information has been set on the billing agreement. * On successful completion of the ConfirmBillingAgreement call, the billing agreement * moves to the Open state. - * Documentation: https://pay.amazon.com/documentation/apireference/201751710 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/confirmbillingagreement.html * * * @param confirmBillingAgreementRequest Container for the necessary @@ -751,7 +750,7 @@ public ConfirmBillingAgreementResponseData confirmBillingAgreement(ConfirmBillin * you must either set the CaptureNow request parameter to true, or call the * Capture operation after you call this operation. An authorization is only valid for * a particular time period, which is specified in the response of the operation. - * Documentation: https://pay.amazon.com/documentation/apireference/201751940 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/authorizeonbillingagreement.html * * * @param authorizeOnBillingAgreementRequest Container for the necessary @@ -782,7 +781,7 @@ public AuthorizeOnBillingAgreementResponseData authorizeOnBillingAgreement(Autho * indicate that you want to terminate the billing agreement with the buyer and that you * do not expect to create any new order references or authorizations on this billing agreement. * All open authorizations on the billing agreement can still be used to capture funds. - * Documentation: https://pay.amazon.com/documentation/apireference/201751950 + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/closebillingagreement.html * * * @param closeBillingAgreementRequest Container for the necessary @@ -1131,7 +1130,7 @@ public ListOrderReferenceByNextTokenResponseData listOrderReferenceByNextToken( /** * The SetOrderAttributes operation is used to set order attributes even after * the order has been confirmed. - * Documentation: https://pay.amazon.com/us/developer/documentation/apireference/22N636REVGXTPNR + * Documentation: https://developer.amazon.com/docs/amazon-pay-api/setorderattributes.html * * @param setOrderAttributesRequest Container for the necessary * parameters to execute the SetOrderAttributes service API on @@ -1219,7 +1218,7 @@ private ResponseData sendRequest(String httpPostRequest) { response = postRequest(httpPostRequest); statusCode = response.getStatusCode(); } - }catch (IOException e) { + } catch (IOException e) { throw new AmazonClientException("Encountered IOException: ", e); } catch (InterruptedException ex) { throw new AmazonClientException("Encountered InterruptedException:", ex); diff --git a/src/com/amazon/pay/impl/PayLogUtil.java b/src/com/amazon/pay/impl/PayLogUtil.java index 2a80f85..8ffe7e7 100644 --- a/src/com/amazon/pay/impl/PayLogUtil.java +++ b/src/com/amazon/pay/impl/PayLogUtil.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -24,7 +24,10 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.*; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; @@ -56,9 +59,9 @@ public void logMessage(String message) { * @return sanitized data not containing SellerNote, SellerAuthorizationNote, SellerCaptureNote, SellerRefundNote, Buyer, PhysicalDestination, * BillingAddress, AuthorizationBillingAddress */ - public String sanitizeString(String responseData) { + public String sanitizeString(final String responseData) { - List restrictedDataList = new ArrayList() {{ + final List restrictedDataList = new ArrayList() {{ add("SellerNote"); add("SellerAuthorizationNote"); add("SellerCaptureNote"); @@ -66,50 +69,60 @@ public String sanitizeString(String responseData) { add("Buyer"); add("PhysicalDestination"); add("BillingAddress"); - add("AuthorizationBillingAddress");}}; + add("AuthorizationBillingAddress"); + }}; - String sanitizedData; - sanitizedData = getSanitizedData(responseData,restrictedDataList); + final String sanitizedData = getSanitizedData(responseData, restrictedDataList); return sanitizedData; } /** - * * @param data - data to be sanitized. * @param removedata - List of strings to be removed from the data object. * @return - an XML not containing 'removedata' lists of strings. * - * @throws TransformerFactoryConfigurationError - Thrown when a problem with configuration with the Transformer Factories exists. This error will typically be thrown when the class of a transformation factory specified in the system properties cannot be found or instantiated. + * @throws AmazonClientException - upon issue sanitizing data */ - public String getSanitizedData(String data, List removedata) throws AmazonClientException{ - - try{ - DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - InputSource is = new InputSource(); + public String getSanitizedData(final String data, final List removedata) throws AmazonClientException { + + try { + final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + + // settings for XXE: External Entity Prevention + // see https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.md + dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + dbf.setFeature("http://xml.org/sax/features/external-general-entities", false); + dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + dbf.setXIncludeAware(false); + dbf.setExpandEntityReferences(false); + + final DocumentBuilder db = dbf.newDocumentBuilder(); + final InputSource is = new InputSource(); is.setCharacterStream(new StringReader(data)); - Document doc = db.parse(is); + final Document doc = db.parse(is); - NodeList list = doc.getElementsByTagName("*"); + final NodeList list = doc.getElementsByTagName("*"); for (int i = 0; i < list.getLength(); i++) { //Get Node - Node node = (Node) list.item(i); + final Node node = (Node) list.item(i); - for(Iterator j = removedata.iterator(); j.hasNext(); ) { - String item = j.next(); + final Iterator j = removedata.iterator(); + while (j.hasNext()) { + final String item = j.next(); if (node.getNodeName().equalsIgnoreCase(item)) { node.setTextContent("*** Removed ***"); } } } - StringWriter sw = new StringWriter(); - Transformer serializer = TransformerFactory.newInstance().newTransformer(); + final StringWriter sw = new StringWriter(); + final Transformer serializer = TransformerFactory.newInstance().newTransformer(); serializer.transform(new DOMSource(list.item(0)), new StreamResult(sw)); - String result = sw.toString(); - + final String result = sw.toString(); return result; } catch (ParserConfigurationException e) { throw new AmazonClientException("Encountered UnsupportedEncodingException:", e); diff --git a/src/com/amazon/pay/impl/Util.java b/src/com/amazon/pay/impl/Util.java index 10ef025..4e5cf6b 100644 --- a/src/com/amazon/pay/impl/Util.java +++ b/src/com/amazon/pay/impl/Util.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -107,6 +107,9 @@ public static ResponseData httpSendRequest(String method, String url, String url URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + con.setConnectTimeout(ServiceConstants.HTTP_CONNECT_TIMEOUT); + con.setReadTimeout(ServiceConstants.HTTP_READ_TIMEOUT); + if (headers != null && !headers.isEmpty()) { for (String key : headers.keySet()) { con.setRequestProperty(key, headers.get(key)); diff --git a/src/com/amazon/pay/response/model/OrderReferenceDetails.java b/src/com/amazon/pay/response/model/OrderReferenceDetails.java index f122121..e1da6f1 100644 --- a/src/com/amazon/pay/response/model/OrderReferenceDetails.java +++ b/src/com/amazon/pay/response/model/OrderReferenceDetails.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -44,7 +44,9 @@ "idList", "orderLanguage", "requestPaymentAuthorization", - "paymentServiceProviderAttributes" + "paymentServiceProviderAttributes", + "paymentReference", + "paymentAuthenticationStatus" }) public class OrderReferenceDetails { @@ -88,6 +90,10 @@ public class OrderReferenceDetails { protected Boolean requestPaymentAuthorization; @XmlElement(name = "PaymentServiceProviderAttributes") protected PaymentServiceProviderAttributes paymentServiceProviderAttributes; + @XmlElement(name = "PaymentReference") + protected PaymentReference paymentReference; + @XmlElement(name = "PaymentAuthenticationStatus") + protected PaymentAuthenticationStatus paymentAuthenticationStatus; public OrderReferenceDetails() { super(); @@ -284,9 +290,24 @@ public PaymentServiceProviderAttributes getPaymentServiceProviderAttributes() { } /** - * String representation of OrderReferenceDetails + * + * @return paymentReference */ + public PaymentReference getPaymentReference() { + return paymentReference; + } + /** + * + * @return paymentAuthenticationStatus + */ + public PaymentAuthenticationStatus getPaymentAuthenticationStatus() { + return paymentAuthenticationStatus; + } + + /** + * String representation of OrderReferenceDetails + */ @Override public String toString() { return "OrderReferenceDetails{" @@ -308,6 +329,9 @@ public String toString() { + ", idList=" + idList + ", orderLanguage=" + orderLanguage + ", requestPaymentAuthorization=" + requestPaymentAuthorization - + ", paymentServiceProviderAttributes=" + paymentServiceProviderAttributes + '}'; + + ", paymentServiceProviderAttributes=" + paymentServiceProviderAttributes + + ", paymentReference=" + paymentReference + + ", paymentAuthenticationStatus=" + paymentAuthenticationStatus + + '}'; } } diff --git a/src/com/amazon/pay/response/model/PaymentAuthenticationStatus.java b/src/com/amazon/pay/response/model/PaymentAuthenticationStatus.java new file mode 100644 index 0000000..1bad2f1 --- /dev/null +++ b/src/com/amazon/pay/response/model/PaymentAuthenticationStatus.java @@ -0,0 +1,50 @@ +/** + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.pay.response.model; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "PaymentAuthenticationStatus", propOrder = { + "state" +}) + +public class PaymentAuthenticationStatus { + @XmlElement(name = "State") + protected String state; + + public PaymentAuthenticationStatus() { + super(); + } + + /** + * @return The Strong Customer Authentication (SCA) payment authentication status flag + */ + @Deprecated + public String getState() { + return state; + } + + @Override + public String toString() { + return "PaymentAuthenticationStatus{" + + "state=" + state + + '}'; + } +} diff --git a/src/com/amazon/pay/response/model/PaymentReference.java b/src/com/amazon/pay/response/model/PaymentReference.java new file mode 100644 index 0000000..e776309 --- /dev/null +++ b/src/com/amazon/pay/response/model/PaymentReference.java @@ -0,0 +1,50 @@ +/** + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.pay.response.model; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "PaymentReference", propOrder = { + "staticToken" +}) + +public class PaymentReference { + @XmlElement(name = "StaticToken") + protected String staticToken; + + public PaymentReference() { + super(); + } + + /** + * @return The unique payment instrument token. + */ + @Deprecated + public String getStaticToken() { + return staticToken; + } + + @Override + public String toString() { + return "PaymentReference{" + + "staticToken=" + staticToken + + '}'; + } +} diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index 074c376..dc963ad 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -149,7 +149,7 @@ public class ServiceConstants { public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.5.0"; + public static final String APPLICATION_LIBRARY_VERSION = "3.5.1"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations @@ -157,6 +157,10 @@ public class ServiceConstants { public static final int SECOND_RETRY_WAIT_TIME = 4000; public static final int THIRD_RETRY_WAIT_TIME = 10000; + // HTTP timeouts (milliseconds) + public static final int HTTP_READ_TIMEOUT = 30000; + public static final int HTTP_CONNECT_TIMEOUT = 30000; + static { Map mwsEndpointMappingsMap = new HashMap(); mwsEndpointMappingsMap.put(Region.UK, "https://mws-eu.amazonservices.com"); diff --git a/tst/com/amazon/pay/TestConstants.java b/tst/com/amazon/pay/TestConstants.java index 6e192bb..c35cc4d 100644 --- a/tst/com/amazon/pay/TestConstants.java +++ b/tst/com/amazon/pay/TestConstants.java @@ -56,7 +56,7 @@ public class TestConstants { public static final String queryIdType = "SellerOrderId"; public static final int pageSize = 5; public static final String nextPageToken = "1eUc0QkJMVnJpcGgrbDNHclpIUT09IiwibWFya2V0cGxhY2VJZCI6IkEzQlhCMFlOM1hIMTdIIn0="; - 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 }}"; + public static final String SUPPLEMENTARY_DATA = "{\"AirlineMetaData\" : {\"version\": 1.0, \"airlineCode\": \"WN\", \"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 }}"; public static final String AUTHORIZE_AMOUNT = "0.01"; public static final String SUCCESS_URL = "https://pay.amazon.com/success.html"; public static final String FAILURE_URL = "https://pay.amazon.com/failure.html"; diff --git a/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java b/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java index a5ed253..695f17d 100644 --- a/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java +++ b/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java @@ -16,6 +16,7 @@ import com.amazon.pay.TestConstants; import com.amazon.pay.exceptions.AmazonServiceException; +import com.amazon.pay.impl.PayLogUtil; import com.amazon.pay.response.model.AccountStatus; import com.amazon.pay.response.model.AuthorizationDetails; import com.amazon.pay.response.model.CaptureDetails; @@ -150,19 +151,32 @@ public void testNoPaymentDescriptor() throws Exception { } @Test - public void testSanitizedData() throws Exception { - final String rawResponse = loadTestFile("SanitizedData.xml"); + public void testGetOrderReferenceDetailsScaResponse() throws Exception { + final String rawResponse = loadTestFile("GetOrderReferenceDetailsScaResponse.xml"); final ResponseData response = new ResponseData(HttpURLConnection.HTTP_OK, rawResponse); - final SetOrderReferenceDetailsResponseData res = Parser.setOrderReferenceDetails(response); + final GetOrderReferenceDetailsResponseData res = Parser.getOrderReferenceDetails(response); + Assert.assertEquals(res.getDetails().getPaymentReference().getStaticToken(), "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx20="); + Assert.assertEquals(res.getDetails().getPaymentAuthenticationStatus().getState(), "REQUIRED"); + Assert.assertEquals(res.toXML(), rawResponse); + } - Assert.assertEquals(res.getDetails().getAmazonOrderReferenceId(), "S01-9821095-0000200"); - Assert.assertEquals(res.getDetails().getOrderReferenceStatus().getState(), "Draft"); - Assert.assertEquals(res.getDetails().getDestination().getDestinationType(), "Physical"); - Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getCountryCode(), null); - Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getStateOrRegion(), null); - Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getCity(), null); - Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getPostalCode(), null); - Assert.assertEquals(res.getDetails().getSellerNote(), "*** Removed ***"); + @Test + public void testSetOrderAttributesScaResponse() throws Exception { + final String rawResponse = loadTestFile("SetOrderAttributesScaResponse.xml"); + final ResponseData response = new ResponseData(HttpURLConnection.HTTP_OK, rawResponse); + final SetOrderAttributesResponseData res = Parser.setOrderAttributes(response); + Assert.assertEquals(res.getOrderReferenceDetails().getPaymentAuthenticationStatus().getState(), "REQUIRED"); + Assert.assertEquals(res.toXML(), rawResponse); + } + + @Test + public void testSanitizedData() throws Exception { + final String rawResponse = loadTestFile("SanitizedDataBefore.xml").trim(); + final String expectedSanitizedResponse = loadTestFile("SanitizedData.xml").trim(); + + final PayLogUtil logUtil = new PayLogUtil(); + final String sanitizedString = logUtil.sanitizeString(rawResponse); + Assert.assertEquals(expectedSanitizedResponse, sanitizedString); } @Test diff --git a/tst/com/amazon/pay/response/xml/GetOrderReferenceDetailsResponse.xml b/tst/com/amazon/pay/response/xml/GetOrderReferenceDetailsResponse.xml index c8e3780..2f66739 100644 --- a/tst/com/amazon/pay/response/xml/GetOrderReferenceDetailsResponse.xml +++ b/tst/com/amazon/pay/response/xml/GetOrderReferenceDetailsResponse.xml @@ -9,7 +9,7 @@ Draft - {"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 }} + {"AirlineMetaData" : {"version": 1.0, "airlineCode": "WN", "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 }} Physical diff --git a/tst/com/amazon/pay/response/xml/GetOrderReferenceDetailsScaResponse.xml b/tst/com/amazon/pay/response/xml/GetOrderReferenceDetailsScaResponse.xml new file mode 100644 index 0000000..ee40b85 --- /dev/null +++ b/tst/com/amazon/pay/response/xml/GetOrderReferenceDetailsScaResponse.xml @@ -0,0 +1,62 @@ + + + + + 2019-04-18T14:44:14.086Z + InvalidPaymentMethod + Suspended + + en-GB + + xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx20= + + + Physical + + IL + Chicago + 800-000-0000 + US + 60602 + Susie Smith + 10 Ditka Ave + Suite 2500 + + + 2019-10-15T14:43:34.847Z + + S02-7295856-8712939-A063411 + + + SDK Sample Store Name + Any custom information + 123456-TestOrder-123456 + + + + PaymentPlanNotSet + The buyer has not been able to select a Payment method for the given Order Reference. + + + + GBP + 19.95 + + + REQUIRED + + + Sandbox Test + test+sandbox@amazon.com + + Sandbox + The Seller Note + S02-7295856-8712939 + 2019-04-18T14:43:34.847Z + false + + + + df57b851-c556-46f0-a561-9e412d3b651d + + diff --git a/tst/com/amazon/pay/response/xml/SanitizedData.xml b/tst/com/amazon/pay/response/xml/SanitizedData.xml index d648b13..e44c19c 100644 --- a/tst/com/amazon/pay/response/xml/SanitizedData.xml +++ b/tst/com/amazon/pay/response/xml/SanitizedData.xml @@ -1,5 +1,4 @@ - - + @@ -29,4 +28,4 @@ eab0140b-e59c-4875-859b-f5012944ba - \ No newline at end of file + diff --git a/tst/com/amazon/pay/response/xml/SanitizedDataBefore.xml b/tst/com/amazon/pay/response/xml/SanitizedDataBefore.xml new file mode 100644 index 0000000..706465f --- /dev/null +++ b/tst/com/amazon/pay/response/xml/SanitizedDataBefore.xml @@ -0,0 +1,37 @@ + + + + + + Draft + + + Physical + + äöüßâêîôûàèùé + 宋 俊华 市区-徐汇区 广东省 + 10101-9876 + US + + + 2016-04-27T20:43:45.183Z + ANDRCTOTP9 + + myTestStore + myCustomInformation + test1234 + + + USD + 500.00 + + Sandbox + This is a note that will get sanitized! + S01-9821095-0000200 + 2015-10-30T20:43:45.183Z + + + + eab0140b-e59c-4875-859b-f5012944ba + + diff --git a/tst/com/amazon/pay/response/xml/SetOrderAttributesScaResponse.xml b/tst/com/amazon/pay/response/xml/SetOrderAttributesScaResponse.xml new file mode 100644 index 0000000..9cdf7b6 --- /dev/null +++ b/tst/com/amazon/pay/response/xml/SetOrderAttributesScaResponse.xml @@ -0,0 +1,49 @@ + + + + + 2019-04-30T23:41:30.926Z + Open + + en-GB + + Physical + + IL + Chicago + 800-000-0000 + US + 60602 + Susie Smith + 10 Ditka Ave + Suite 2500 + + + 2019-10-27T23:24:14.907Z + + SDK Sample Store Name + abcdef + abcdef + + + GBP + 10.00 + + + REQUIRED + + + Sandbox Guillot + guillotb+sandbox@amazon.com + + Sandbox + The Seller Note + S02-4946804-1132193 + 2019-04-30T23:24:14.907Z + false + + + + 68258c6f-9a7b-4cdf-b72b-9e0886f39d9b + + diff --git a/tst/com/amazon/pay/response/xml/SetOrderReferenceDetailsResponse.xml b/tst/com/amazon/pay/response/xml/SetOrderReferenceDetailsResponse.xml index d0cb951..15fb726 100644 --- a/tst/com/amazon/pay/response/xml/SetOrderReferenceDetailsResponse.xml +++ b/tst/com/amazon/pay/response/xml/SetOrderReferenceDetailsResponse.xml @@ -20,7 +20,7 @@ myTestStore myCustomInformation test1234 - {"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 }} + {"AirlineMetaData" : {"version": 1.0, "airlineCode": "WN", "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 }} USD From 2d45448d22065cff9eeb9bcdc6ab9544a87ca38c Mon Sep 17 00:00:00 2001 From: Harshika Agarwal Date: Wed, 21 Aug 2019 22:14:03 +0000 Subject: [PATCH 09/21] Amazon Pay Java SDK 3.6.0 --- CHANGES.txt | 4 + ...zon-pay-3.5.1.jar => amazon-pay-3.6.0.jar} | Bin 236287 -> 237550 bytes pom.xml | 2 +- .../ConfirmBillingAgreementRequest.java | 48 +++++++- .../SetBillingAgreementDetailsRequest.java | 46 ++++++- .../model/BillingAgreementDetails.java | 114 +++++++++++------- .../pay/types/BillingAgreementType.java | 25 ++++ .../amazon/pay/types/ServiceConstants.java | 2 +- .../pay/request/PaymentsAPIRequestTest.java | 96 ++++++++++----- .../pay/response/PaymentsAPIResponseTest.java | 90 +++++++++++++- ...BillingAgreementDetailsWithSCAResponse.xml | 56 +++++++++ ...BillingAgreementDetailsWithSCAResponse.xml | 56 +++++++++ 12 files changed, 457 insertions(+), 82 deletions(-) rename dist/{amazon-pay-3.5.1.jar => amazon-pay-3.6.0.jar} (83%) create mode 100644 src/com/amazon/pay/types/BillingAgreementType.java create mode 100644 tst/com/amazon/pay/response/xml/GetBillingAgreementDetailsWithSCAResponse.xml create mode 100644 tst/com/amazon/pay/response/xml/SetBillingAgreementDetailsWithSCAResponse.xml diff --git a/CHANGES.txt b/CHANGES.txt index 29da71a..fc8424f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +Version 3.6.0 - August 2019 +Added additional attributes (successUrl, failureUrl) to ConfirmBillingAgreement and (subscriptionAmount, billingAgreementType) to SetBillingAgreement Details. +See Amazon Pay Strong Customer Authentication (SCA) Upgrade Integration Guide for more information. + Version 3.5.1 - May 2019 - PaymentAuthenticationStatus getter added for GetOrderReferenceDetails, SetOrderReferenceDetails, and SetOrderAttributes API calls - StaticToken getter added for GetOrderReferenceDetails diff --git a/dist/amazon-pay-3.5.1.jar b/dist/amazon-pay-3.6.0.jar similarity index 83% rename from dist/amazon-pay-3.5.1.jar rename to dist/amazon-pay-3.6.0.jar index b60b1601a3f7478834d8fa01e99073395cb834a0..99288288af3e20636b574457d590ea431647fda5 100644 GIT binary patch delta 22188 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 Q<_Nx85)k}Sg{%<#AGWx6t^fc4 diff --git a/pom.xml b/pom.xml index 023ab4f..3485001 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazon.pay amazon-pay-java-sdk jar - 3.5.1 + 3.6.0 commons-codec diff --git a/src/com/amazon/pay/request/ConfirmBillingAgreementRequest.java b/src/com/amazon/pay/request/ConfirmBillingAgreementRequest.java index 65d8d7a..7263af4 100644 --- a/src/com/amazon/pay/request/ConfirmBillingAgreementRequest.java +++ b/src/com/amazon/pay/request/ConfirmBillingAgreementRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -32,6 +32,10 @@ protected ConfirmBillingAgreementRequest getThis() { //required parameters private String amazonBillingAgreementId; + //optional parameters + private String successUrl; + private String failureUrl; + /** * * @param amazonBillingAgreementId @@ -50,6 +54,46 @@ public String getAmazonBillingAgreementId() { return amazonBillingAgreementId; } + /** + * Sets the URL where AmazonPay need to return after buyer successfully authenticate a transaction. + * @param successUrl After Successful authentication AmazonPay redirects + * to the SuccessUrl provided by the merchant + * + * @return Success Url + */ + public ConfirmBillingAgreementRequest setSuccessUrl(String successUrl) { + this.successUrl = successUrl; + return this; + } + + /** + * Sets the URL where AmazonPay need to return after buyer fails to authenticate a transaction. + * @param failureUrl If the buyer failed to provide correct Authentication AmazonPay redirects + * to FailureUrl provided by the merchant. + * + * @return Failure Url + */ + public ConfirmBillingAgreementRequest setFailureUrl(String failureUrl) { + this.failureUrl = failureUrl; + return this; + } + + /** + * + * @return successUrl + */ + public String getSuccessUrl() { + return successUrl; + } + + /** + * + * @return failureUrl + */ + public String getFailureUrl() { + return failureUrl; + } + /** * Returns a string representation of this object; useful for testing and * debugging. @@ -62,6 +106,8 @@ public String getAmazonBillingAgreementId() { public String toString() { return "ConfirmBillingAgreementRequest{" + "amazonBillingAgreementId=" + amazonBillingAgreementId + + ", successUrl=" + successUrl + + ", failureUrl=" + failureUrl + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } diff --git a/src/com/amazon/pay/request/SetBillingAgreementDetailsRequest.java b/src/com/amazon/pay/request/SetBillingAgreementDetailsRequest.java index 39374c9..5e17928 100644 --- a/src/com/amazon/pay/request/SetBillingAgreementDetailsRequest.java +++ b/src/com/amazon/pay/request/SetBillingAgreementDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ */ package com.amazon.pay.request; +import com.amazon.pay.response.model.Price; +import com.amazon.pay.types.BillingAgreementType; import java.io.Serializable; /** @@ -37,6 +39,8 @@ protected SetBillingAgreementDetailsRequest getThis() { private String sellerBillingAgreementId; private String storeName; private String customInformation; + private BillingAgreementType billingAgreementType; + private Price subscriptionAmount; /** * @@ -108,6 +112,28 @@ public SetBillingAgreementDetailsRequest setCustomInformation(String customInfor return this; } + /** + * Sets attribute to determine whether the BillingAgreement is merchant initiated or customer initiated. + * @param billingAgreementType can be either "CustomerInitiatedTransaction” or “MerchantInitiatedTransaction" + * + * @return BillingAgreementType + */ + public SetBillingAgreementDetailsRequest setBillingAgreementType(BillingAgreementType billingAgreementType) { + this.billingAgreementType = billingAgreementType; + return this; + } + + /** + * Sets the subscription amount for every charge till the subscription period + * @param subscriptionAmount The subscription amount for every charge till the subscription period. + * + * @return Subscription Amount + */ + public SetBillingAgreementDetailsRequest setSubscriptionAmount(Price subscriptionAmount) { + this.subscriptionAmount = subscriptionAmount; + return this; + } + /** * * @return amazonBillingAgreementId @@ -156,6 +182,22 @@ public String getCustomInformation() { return customInformation; } + /** + * + * @return billingAgreementType + */ + public BillingAgreementType getBillingAgreementType() { + return billingAgreementType; + } + + /** + * + * @return subscriptionAmount + */ + public Price getSubscriptionAmount() { + return subscriptionAmount; + } + /** * Returns a string representation of this object; useful for testing and * debugging. @@ -172,6 +214,8 @@ public String toString() { + ", sellerBillingAgreementId=" + sellerBillingAgreementId + ", storeName=" + storeName + ", customInformation=" + customInformation + + ", billingAgreementType=" + billingAgreementType + + ", subscriptionAmount=" + subscriptionAmount + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } diff --git a/src/com/amazon/pay/response/model/BillingAgreementDetails.java b/src/com/amazon/pay/response/model/BillingAgreementDetails.java index c5cd248..b11406d 100644 --- a/src/com/amazon/pay/response/model/BillingAgreementDetails.java +++ b/src/com/amazon/pay/response/model/BillingAgreementDetails.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ */ package com.amazon.pay.response.model; +import com.amazon.pay.types.BillingAgreementType; + import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; @@ -23,21 +25,23 @@ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "BillingAgreementDetails", propOrder = { - "amazonBillingAgreementId", - "billingAgreementLimits", - "buyer", - "sellerNote", - "platformId", - "destination", - "billingAddress", - "releaseEnvironment", - "sellerBillingAgreementAttributes", - "billingAgreementStatus", - "constraints", - "creationTimestamp", - "expirationTimestamp", - "billingAgreementConsent", - "orderLanguage" + "amazonBillingAgreementId", + "billingAgreementLimits", + "buyer", + "sellerNote", + "platformId", + "destination", + "billingAddress", + "releaseEnvironment", + "sellerBillingAgreementAttributes", + "billingAgreementStatus", + "constraints", + "creationTimestamp", + "expirationTimestamp", + "billingAgreementConsent", + "orderLanguage", + "subscriptionAmount", + "billingAgreementType" }) public class BillingAgreementDetails { @@ -73,7 +77,11 @@ public class BillingAgreementDetails { protected Boolean billingAgreementConsent; @XmlElement(name = "OrderLanguage") protected String orderLanguage; - + @XmlElement(name = "SubscriptionAmount") + protected Price subscriptionAmount; + @XmlElement(name = "BillingAgreementType") + protected BillingAgreementType billingAgreementType; + public BillingAgreementDetails() { super(); @@ -81,7 +89,7 @@ public BillingAgreementDetails() { /** * This value is retrieved from the Amazon Button, AddressBook, or Wallet widgets. - * + * * @return amazonBillingAgreementId */ public String getAmazonBillingAgreementId() { @@ -91,7 +99,7 @@ public String getAmazonBillingAgreementId() { /** * Represents the total amount that you can charge a buyer in a given time period. - * + * * @return billingAgreementLimits */ public BillingAgreementLimits getBillingAgreementLimits() { @@ -99,9 +107,9 @@ public BillingAgreementLimits getBillingAgreementLimits() { } /** - * Provides details about the buyer. This information will + * Provides details about the buyer. This information will * only be returned after you confirm the billing agreement. - * + * * @return buyer */ public Buyer getBuyer() { @@ -109,11 +117,11 @@ public Buyer getBuyer() { } /** - * Represents a description of the billing agreement that is displayed + * Represents a description of the billing agreement that is displayed * in emails to the buyer and on the Amazon Pay website. This response - * element is not returned if you have not set it by calling the + * element is not returned if you have not set it by calling the * SetBillingAgreementDetails operation. - * + * * @return sellerNote */ public String getSellerNote() { @@ -122,7 +130,7 @@ public String getSellerNote() { /** * Represents the SellerId of the Solution Provider that developed the platform. - * + * * @return platformId */ public String getPlatformId() { @@ -130,13 +138,13 @@ public String getPlatformId() { } /** - * - * Represents the address selected by the buyer through the AddressBook widget. - * Complete buyer information will only be returned after you have confirmed the - * billing agreement or have specified a valid AddressConsentToken in the + * + * Represents the address selected by the buyer through the AddressBook widget. + * Complete buyer information will only be returned after you have confirmed the + * billing agreement or have specified a valid AddressConsentToken in the * GetBillingAgreementDetails operation. Until then, only the City, StateOrRegion, * PostalCode, and CountryCode elements are returned. - * + * * @return destination */ public Destination getDestination() { @@ -149,7 +157,7 @@ public BillingAddress getBillingAddress() { /** * Indicates if the order is for a Live (Production) or Sandbox environment. - * + * * @return releaseEnvironment */ public Environment getReleaseEnvironment() { @@ -157,10 +165,10 @@ public Environment getReleaseEnvironment() { } /** - * Provides more context about the billing agreement represented by this Billing Agreement object. - * This response element is not returned if you have not set it by calling the + * Provides more context about the billing agreement represented by this Billing Agreement object. + * This response element is not returned if you have not set it by calling the * SetBillingAgreementDetails operation. - * + * * @return sellerBillingAgreementAttributes */ public SellerBillingAgreementAttributes getSellerBillingAgreementAttributes() { @@ -168,10 +176,10 @@ public SellerBillingAgreementAttributes getSellerBillingAgreementAttributes() { } /** - * Indicates the current status of the billing agreement. - * For more information about the State and ReasonCode response elements, + * Indicates the current status of the billing agreement. + * For more information about the State and ReasonCode response elements, * see Billing Agreement States and Reason Codes. - * + * * @return billingAgreementStatus */ public BillingAgreementStatus getBillingAgreementStatus() { @@ -179,10 +187,10 @@ public BillingAgreementStatus getBillingAgreementStatus() { } /** - * A list of constraints that indicates mandatory information that is missing - * or incorrect. The presence of constraints indicates that the billing agreement + * A list of constraints that indicates mandatory information that is missing + * or incorrect. The presence of constraints indicates that the billing agreement * is not ready to be confirmed and cannot be used for payment operations. - * + * * @return constraints */ public Constraints getConstraints() { @@ -191,7 +199,7 @@ public Constraints getConstraints() { /** * The date and time, in UTC, when the billing agreement was created. In ISO 8601 format. - * + * * @return creationTimestamp */ public XMLGregorianCalendar getCreationTimestamp() { @@ -199,7 +207,7 @@ public XMLGregorianCalendar getCreationTimestamp() { } /** - * + * * @return expirationTimestamp */ public XMLGregorianCalendar getExpirationTimestamp() { @@ -215,13 +223,29 @@ public Boolean isBillingAgreementConsent() { } /** - * + * * @return orderLanguage */ public String getOrderLanguage() { return orderLanguage; } + /** + * + * @return subscriptionAmount + */ + public Price getSubscriptionAmount() { + return subscriptionAmount; + } + + /** + * + * @return billingAgreementType + */ + public BillingAgreementType getBillingAgreementType() { + return billingAgreementType; + } + /** * String representation of Billing Agreement */ @@ -242,7 +266,9 @@ public String toString() { + ", creationTimestamp=" + creationTimestamp + ", expirationTimestamp=" + expirationTimestamp + ", billingAgreementConsent=" + billingAgreementConsent - + ", orderLanguage=" + orderLanguage + '}'; + + ", orderLanguage=" + orderLanguage + + ", subscriptionAmount=" + subscriptionAmount + + ", billingAgreementType=" + billingAgreementType + '}'; } diff --git a/src/com/amazon/pay/types/BillingAgreementType.java b/src/com/amazon/pay/types/BillingAgreementType.java new file mode 100644 index 0000000..3fd87c3 --- /dev/null +++ b/src/com/amazon/pay/types/BillingAgreementType.java @@ -0,0 +1,25 @@ +/** + * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.amazon.pay.types; + +/** + * Attribute to determine whether the Billing Agreement is merchant initiated or customer initiated. + */ + +public enum BillingAgreementType { + CustomerInitiatedTransaction, + MerchantInitiatedTransaction +} diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index dc963ad..a434ba8 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -149,7 +149,7 @@ public class ServiceConstants { public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.5.1"; + public static final String APPLICATION_LIBRARY_VERSION = "3.6.0"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations diff --git a/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java b/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java index 5c42fc0..bba6c2c 100644 --- a/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java +++ b/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java @@ -17,6 +17,7 @@ import com.amazon.pay.response.model.Price; import com.amazon.pay.response.model.ProviderCredit; import com.amazon.pay.types.AmazonReferenceIdType; +import com.amazon.pay.types.BillingAgreementType; import com.amazon.pay.types.CurrencyCode; import com.amazon.pay.types.OrderReferenceStatus; import com.amazon.pay.types.SortOrder; @@ -37,7 +38,8 @@ public class PaymentsAPIRequestTest { private final List PCL = Collections.singletonList( - new ProviderCredit("providerId", new Price("1", "USD"))); + new ProviderCredit("providerId", new Price("1", "USD"))); + private final Price subscriptionAmount = new Price("1.25", "EUR"); @Test public void testAuthorizeRequest() { @@ -65,8 +67,8 @@ public void testAuthorizeRequest() { public void testCancelOrderReferenceRequest() { final CancelOrderReferenceRequest request = new CancelOrderReferenceRequest(TestConstants.amazonOrderReferenceId) - .setMWSAuthToken(TestConstants.mwsAuthToken) - .setCancelReason(TestConstants.sampletext); + .setMWSAuthToken(TestConstants.mwsAuthToken) + .setCancelReason(TestConstants.sampletext); Assert.assertEquals(request.getAmazonOrderReferenceId(),TestConstants.amazonOrderReferenceId); Assert.assertEquals(request.getCancelationReason(), TestConstants.sampletext); Assert.assertEquals(request.getMwsAuthToken(), TestConstants.mwsAuthToken); @@ -95,8 +97,8 @@ public void testCapture() { public void testCloseAuthorizationRequest() { final CloseAuthorizationRequest request = new CloseAuthorizationRequest("Auth123") - .setMWSAuthToken(TestConstants.mwsAuthToken) - .setClosureReason(TestConstants.sampletext); + .setMWSAuthToken(TestConstants.mwsAuthToken) + .setClosureReason(TestConstants.sampletext); Assert.assertEquals(request.getAmazonAuthorizationId(), "Auth123"); Assert.assertEquals(request.getClosureReason(), TestConstants.sampletext); @@ -107,8 +109,8 @@ public void testCloseAuthorizationRequest() { public void testCloseOrderReferenceRequest() { final CloseOrderReferenceRequest request = new CloseOrderReferenceRequest(TestConstants.amazonOrderReferenceId) - .setMWSAuthToken(TestConstants.mwsAuthToken) - .setClosureReason(TestConstants.sampletext); + .setMWSAuthToken(TestConstants.mwsAuthToken) + .setClosureReason(TestConstants.sampletext); Assert.assertEquals(request.getAmazonOrderReferenceId(),TestConstants.amazonOrderReferenceId); Assert.assertEquals(request.getClosureReason(), TestConstants.sampletext); @@ -151,11 +153,11 @@ public void testGetCaptureDetailsRequest() { @Test public void testGetOrderReferenceDetailsRequest() { - final GetOrderReferenceDetailsRequest request = + final GetOrderReferenceDetailsRequest request = new GetOrderReferenceDetailsRequest(TestConstants.amazonOrderReferenceId) - .setAddressConsentToken("Atza|IwEBIDcwh13A-nf8EuZahCu") - .setAccessToken("Atza|oVsmstLsCYekhCdyR1Hu6FFveZC") - .setMWSAuthToken(TestConstants.mwsAuthToken); + .setAddressConsentToken("Atza|IwEBIDcwh13A-nf8EuZahCu") + .setAccessToken("Atza|oVsmstLsCYekhCdyR1Hu6FFveZC") + .setMWSAuthToken(TestConstants.mwsAuthToken); Assert.assertEquals(request.getAmazonOrderReferenceId(), TestConstants.amazonOrderReferenceId); Assert.assertEquals(request.getAddressConsentToken(), "Atza|IwEBIDcwh13A-nf8EuZahCu"); @@ -291,6 +293,20 @@ public void testConfirmBillingAgreement() { Assert.assertEquals(request.getMwsAuthToken(), TestConstants.mwsAuthToken); } + @Test + public void testConfirmBillingAgreementWithSCA() { + ConfirmBillingAgreementRequest request = new ConfirmBillingAgreementRequest(TestConstants.billingAgreementId) + .setMWSAuthToken(TestConstants.mwsAuthToken) + .setSuccessUrl(TestConstants.SUCCESS_URL) + .setFailureUrl(TestConstants.FAILURE_URL); + + + Assert.assertEquals(request.getAmazonBillingAgreementId(), TestConstants.billingAgreementId); + Assert.assertEquals(request.getMwsAuthToken(), TestConstants.mwsAuthToken); + Assert.assertEquals(request.getSuccessUrl(), TestConstants.SUCCESS_URL); + Assert.assertEquals(request.getFailureUrl(), TestConstants.FAILURE_URL); + } + @Test public void testGetBillingAgreementDetails() { GetBillingAgreementDetailsRequest request = new GetBillingAgreementDetailsRequest(TestConstants.billingAgreementId) @@ -320,11 +336,35 @@ public void testSetBillingAgreementDetails() { Assert.assertEquals(request.getStoreName(), "store"); } + @Test + public void testSetBillingAgreementDetailsWithSCA() { + final SetBillingAgreementDetailsRequest request = new SetBillingAgreementDetailsRequest(TestConstants.billingAgreementId) + .setMWSAuthToken(TestConstants.mwsAuthToken) + .setCustomInformation("custom") + .setPlatformId("platformId") + .setSellerBillingAgreementId("B12") + .setSellerNote("note12") + .setStoreName("store") + .setBillingAgreementType(BillingAgreementType.CustomerInitiatedTransaction) + .setSubscriptionAmount(subscriptionAmount); + + Assert.assertEquals(request.getAmazonBillingAgreementId(), TestConstants.billingAgreementId); + Assert.assertEquals(request.getMwsAuthToken(), TestConstants.mwsAuthToken); + Assert.assertEquals(request.getCustomInformation(), "custom"); + Assert.assertEquals(request.getPlatformId(), "platformId"); + Assert.assertEquals(request.getSellerBillingAgreementId(), "B12"); + Assert.assertEquals(request.getSellerNote(), "note12"); + Assert.assertEquals(request.getStoreName(), "store"); + Assert.assertEquals(request.getBillingAgreementType(), BillingAgreementType.CustomerInitiatedTransaction); + Assert.assertEquals(request.getSubscriptionAmount().getAmount(), "1.25"); + Assert.assertEquals(request.getSubscriptionAmount().getCurrencyCode(), "EUR"); + } + @Test public void testValidateBillingAgreement() { final ValidateBillingAgreementRequest request = new ValidateBillingAgreementRequest(TestConstants.billingAgreementId) - .setMWSAuthToken(TestConstants.mwsAuthToken); + .setMWSAuthToken(TestConstants.mwsAuthToken); Assert.assertEquals(request.getAmazonBillingAgreementId(), TestConstants.billingAgreementId); Assert.assertEquals(request.getMwsAuthToken(), TestConstants.mwsAuthToken); @@ -334,7 +374,7 @@ public void testValidateBillingAgreement() { public void testGetProviderCreditDetails() { final GetProviderCreditDetailsRequest request = new GetProviderCreditDetailsRequest(TestConstants.providerCreditId, TestConstants.providerSellerId) - .setMWSAuthToken(TestConstants.mwsAuthToken); + .setMWSAuthToken(TestConstants.mwsAuthToken); Assert.assertEquals(request.getAmazonProviderCreditId(), TestConstants.providerCreditId); Assert.assertEquals(request.getSellerId(), TestConstants.providerSellerId); @@ -344,9 +384,9 @@ public void testGetProviderCreditDetails() { @Test public void testGetProviderCreditReversalDetails() { final GetProviderCreditReversalDetailsRequest request = - new GetProviderCreditReversalDetailsRequest( - TestConstants.reversalProviderCreditId, TestConstants.providerSellerId) - .setMWSAuthToken(TestConstants.mwsAuthToken); + new GetProviderCreditReversalDetailsRequest( + TestConstants.reversalProviderCreditId, TestConstants.providerSellerId) + .setMWSAuthToken(TestConstants.mwsAuthToken); Assert.assertEquals(TestConstants.reversalProviderCreditId, request.getAmazonProviderCreditReversalId()); Assert.assertEquals(TestConstants.providerSellerId, request.getSellerId()); @@ -370,7 +410,7 @@ public void testReverseProviderCreditDetails() { Assert.assertEquals(request.getMwsAuthToken(), TestConstants.mwsAuthToken); Assert.assertEquals(request.getCreditReversalAmountCurrencyCode(), CurrencyCode.USD); Assert.assertEquals(request.getCreditReversalNote(), TestConstants.sampletext); - } + } private ChargeRequest testChargeSetup() { return new ChargeRequest() @@ -423,17 +463,17 @@ public void testChargeString() { public void testCreateOrderReferenceForId() { final CreateOrderReferenceForIdRequest request = new CreateOrderReferenceForIdRequest( - TestConstants.billingAgreementId, AmazonReferenceIdType.BILLING_AGREEMENT_ID) - .setInheritShippingAddress(false) - .setConfirmNow(true) - .setOrderTotalCurrencyCode(CurrencyCode.USD) - .setSellerNote("Test Seller Note") - .setSellerOrderId("Test Order ID") - .setStoreName(TestConstants.storeName) - .setSupplementaryData(TestConstants.SUPPLEMENTARY_DATA) - .setCustomInformation("Test Custom Information") - .setOrderTotalAmount("567.89") - .setPlatformId(TestConstants.platformId); + TestConstants.billingAgreementId, AmazonReferenceIdType.BILLING_AGREEMENT_ID) + .setInheritShippingAddress(false) + .setConfirmNow(true) + .setOrderTotalCurrencyCode(CurrencyCode.USD) + .setSellerNote("Test Seller Note") + .setSellerOrderId("Test Order ID") + .setStoreName(TestConstants.storeName) + .setSupplementaryData(TestConstants.SUPPLEMENTARY_DATA) + .setCustomInformation("Test Custom Information") + .setOrderTotalAmount("567.89") + .setPlatformId(TestConstants.platformId); Assert.assertEquals(request.getId(), TestConstants.billingAgreementId); Assert.assertEquals(request.getIdType(), AmazonReferenceIdType.BILLING_AGREEMENT_ID); diff --git a/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java b/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java index 695f17d..7419606 100644 --- a/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java +++ b/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java @@ -1,5 +1,5 @@ /** - * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ import com.amazon.pay.impl.PayLogUtil; import com.amazon.pay.response.model.AccountStatus; import com.amazon.pay.response.model.AuthorizationDetails; +import com.amazon.pay.response.model.BillingAgreementDetails; import com.amazon.pay.response.model.CaptureDetails; import com.amazon.pay.response.model.Environment; import com.amazon.pay.response.model.ErrorResponse; @@ -62,6 +63,7 @@ import com.amazon.pay.exceptions.AmazonClientException; import com.amazon.pay.exceptions.AmazonServiceException; import com.amazon.pay.response.parser.ResponseData; +import com.amazon.pay.types.BillingAgreementType; import java.io.FileInputStream; import java.io.IOException; @@ -401,7 +403,7 @@ public void testCaptureDetailsResponseMulticurrency() throws Exception { Assert.assertEquals(res.toXML(), rawResponse); } - @Test + @Test public void testCancelOrderReferenceResponse() throws Exception { final String rawResponse = loadTestFile("CancelOrderReferenceResponse.xml"); final ResponseData response = new ResponseData(HttpURLConnection.HTTP_OK, rawResponse); @@ -410,7 +412,7 @@ public void testCancelOrderReferenceResponse() throws Exception { Assert.assertEquals(res.toXML(), rawResponse); } - @Test + @Test public void testCloseOrderReferenceResponse() throws Exception { final String rawResponse = loadTestFile("CloseOrderReferenceResponse.xml"); final ResponseData response = new ResponseData(HttpURLConnection.HTTP_OK, rawResponse); @@ -419,7 +421,7 @@ public void testCloseOrderReferenceResponse() throws Exception { Assert.assertEquals(res.toXML(), rawResponse); } - @Test + @Test public void testCloseAuthorizationResponse() throws Exception { final String rawResponse = loadTestFile("CloseAuthorizationResponse.xml"); final ResponseData response = new ResponseData(HttpURLConnection.HTTP_OK, rawResponse); @@ -552,11 +554,53 @@ public void testGetBillingAgreementDetailsResponse() throws Exception { Assert.assertEquals(res.getDetails().getBillingAddress(), null); Assert.assertEquals(res.getDetails().getPlatformId(), null); Assert.assertEquals(res.getDetails().getSellerNote(), null); - Assert.assertEquals(res.getRequestId(), "d69e8d60-3682-43d7-bf5e-e2ef64dc685e"); Assert.assertEquals(res.toXML(), rawResponse); } + @Test + public void testGetBillingAgreementDetailsWithSCAResponse() throws Exception { + final String rawResponse = loadTestFile("GetBillingAgreementDetailsWithSCAResponse.xml"); + final ResponseData response = new ResponseData(HttpURLConnection.HTTP_OK, rawResponse); + final GetBillingAgreementDetailsResponseData res = Parser.getBillingAgreementDetailsData(response); + Assert.assertEquals(res.getDetails().getAmazonBillingAgreementId(), "C02-5533845-8537141"); + Assert.assertEquals(res.getDetails().getBillingAgreementStatus().getLastUpdatedTimestamp(), null); + Assert.assertEquals(res.getDetails().getBillingAgreementStatus().getState(), "Draft"); + Assert.assertEquals(res.getDetails().getDestination().getDestinationType(), "Physical"); + Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getCity(), "Chicago"); + Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getCountryCode(), "US"); + Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getPostalCode(), "60602"); + Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getCounty(), null); + Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getDistrict(), null); + Assert.assertEquals(res.getDetails().getConstraints().getConstraint().get(0).getConstraintID(), "BuyerConsentNotSet"); + Assert.assertEquals(res.getDetails().getConstraints().getConstraint().get(0).getDescription(), "The buyer has not given consent for this billing agreement."); + Assert.assertEquals(res.getDetails().getBillingAgreementType(), BillingAgreementType.MerchantInitiatedTransaction); + Assert.assertEquals(res.getDetails().getReleaseEnvironment().SANDBOX, Environment.SANDBOX); + final XMLGregorianCalendar xgc3 = DatatypeFactory.newInstance().newXMLGregorianCalendar("2019-08-20T22:03:09.297Z"); + Assert.assertEquals(res.getDetails().getCreationTimestamp(), xgc3); + Assert.assertEquals(res.getDetails().getBillingAgreementLimits().getAmountLimitPerTimePeriod().getAmount(), "500"); + Assert.assertEquals(res.getDetails().getBillingAgreementLimits().getAmountLimitPerTimePeriod().getCurrencyCode(), "GBP"); + Assert.assertEquals(res.getDetails().getBillingAgreementLimits().getCurrentRemainingBalance().getAmount(), "500.00"); + Assert.assertEquals(res.getDetails().getBillingAgreementLimits().getCurrentRemainingBalance().getCurrencyCode(), "GBP"); + final XMLGregorianCalendar xgc2 = DatatypeFactory.newInstance().newXMLGregorianCalendar("2019-09-01T00:00:00Z"); + Assert.assertEquals(res.getDetails().getBillingAgreementLimits().getTimePeriodEndDate(), xgc2); + final XMLGregorianCalendar xgc4 = DatatypeFactory.newInstance().newXMLGregorianCalendar("2019-08-01T00:00:00Z"); + Assert.assertEquals(res.getDetails().getBillingAgreementLimits().getTimePeriodStartDate(), xgc4); + Assert.assertEquals(res.getDetails().getOrderLanguage(), "en-GB"); + Assert.assertEquals(res.getDetails().isBillingAgreementConsent(), false); + Assert.assertEquals(res.getDetails().getExpirationTimestamp(), null); + Assert.assertEquals(res.getDetails().getSellerBillingAgreementAttributes().getCustomInformation(), "any custom information"); + Assert.assertEquals(res.getDetails().getSellerBillingAgreementAttributes().getSellerBillingAgreementId(), "5678-example-order"); + Assert.assertEquals(res.getDetails().getSellerBillingAgreementAttributes().getStoreName(), "SDK Sample Store Name"); + Assert.assertEquals(res.getDetails().getBillingAddress(), null); + Assert.assertEquals(res.getDetails().getPlatformId(), null); + Assert.assertEquals(res.getDetails().getSellerNote(), "Testing PHP SDK Recurring Samples"); + Assert.assertEquals(res.getDetails().getSubscriptionAmount().getAmount(), "25.00"); + Assert.assertEquals(res.getDetails().getSubscriptionAmount().getCurrencyCode(), "GBP"); + Assert.assertEquals(res.getRequestId(), "954d87bd-b48f-4eb2-b84b-a0200da333cf"); + Assert.assertEquals(res.toXML(), rawResponse); + } + @Test public void testSetBillingAgreementDetailsResponse() throws Exception { final String rawResponse = loadTestFile("SetBillingAgreementDetailsResponse.xml"); @@ -588,6 +632,40 @@ public void testSetBillingAgreementDetailsResponse() throws Exception { Assert.assertEquals(res.toXML(), rawResponse); } + @Test + public void testSetBillingAgreementDetailsWithSCAResponse() throws Exception { + final String rawResponse = loadTestFile("SetBillingAgreementDetailsWithSCAResponse.xml"); + final ResponseData response = new ResponseData(HttpURLConnection.HTTP_OK, rawResponse); + final SetBillingAgreementDetailsResponseData res = Parser.getSetBillingAgreementDetailsResponse(response); + Assert.assertEquals(res.getDetails().getAmazonBillingAgreementId(), "C02-5533845-8537141"); + Assert.assertEquals(res.getDetails().getBillingAgreementStatus().getLastUpdatedTimestamp(), null); + Assert.assertEquals(res.getDetails().getBillingAgreementStatus().getState(), "Draft"); + Assert.assertEquals(res.getDetails().getBillingAgreementStatus().getReasonCode(), null); + Assert.assertEquals(res.getDetails().getBillingAgreementStatus().getReasonDescription(), null); + Assert.assertEquals(res.getDetails().getDestination().getDestinationType(), "Physical"); + Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getCity(), "Chicago"); + Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getCountryCode(), "US"); + Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getPostalCode(), "60602"); + Assert.assertEquals(res.getDetails().getConstraints().getConstraint().get(0).getConstraintID(), "BuyerConsentNotSet"); + Assert.assertEquals(res.getDetails().getConstraints().getConstraint().get(0).getDescription(), "The buyer has not given consent for this billing agreement."); + Assert.assertEquals(res.getDetails().getReleaseEnvironment().SANDBOX, Environment.SANDBOX); + final XMLGregorianCalendar xgc3 = DatatypeFactory.newInstance().newXMLGregorianCalendar("2019-08-20T22:03:09.297Z"); + Assert.assertEquals(res.getDetails().getCreationTimestamp(), xgc3); + Assert.assertEquals(res.getDetails().getBillingAgreementLimits().getAmountLimitPerTimePeriod().getAmount(), "500"); + Assert.assertEquals(res.getDetails().getBillingAgreementLimits().getAmountLimitPerTimePeriod().getCurrencyCode(), "GBP"); + Assert.assertEquals(res.getDetails().getBillingAgreementLimits().getCurrentRemainingBalance().getAmount(), "500.00"); + Assert.assertEquals(res.getDetails().getBillingAgreementLimits().getCurrentRemainingBalance().getCurrencyCode(), "GBP"); + final XMLGregorianCalendar xgc2 = DatatypeFactory.newInstance().newXMLGregorianCalendar("2019-09-01T00:00:00Z"); + Assert.assertEquals(res.getDetails().getBillingAgreementLimits().getTimePeriodEndDate(), xgc2); + final XMLGregorianCalendar xgc4 = DatatypeFactory.newInstance().newXMLGregorianCalendar("2019-08-01T00:00:00Z"); + Assert.assertEquals(res.getDetails().getBillingAgreementLimits().getTimePeriodStartDate(), xgc4); + Assert.assertEquals(res.getDetails().getBillingAgreementType(), BillingAgreementType.MerchantInitiatedTransaction); + Assert.assertEquals(res.getDetails().getSubscriptionAmount().getAmount(), "25.00"); + Assert.assertEquals(res.getDetails().getSubscriptionAmount().getCurrencyCode(), "GBP"); + Assert.assertEquals(res.getRequestId(), "2dee6992-29f6-4d3e-bc86-2cf339241c58"); + Assert.assertEquals(res.toXML(), rawResponse); + } + @Test public void testConfirmBillingAgreementDetailsResponse() throws Exception { final String rawResponse = loadTestFile("ConfirmBillingAgreementResponse.xml"); @@ -718,7 +796,7 @@ public void testGetRefundDetailsResponseMulticurrency() throws Exception { final XMLGregorianCalendar xgc2 = DatatypeFactory.newInstance().newXMLGregorianCalendar("2017-06-28T18:14:34.752Z"); Assert.assertEquals(res.getDetails().getCreationTimestamp(), xgc2); Assert.assertEquals(res.getDetails().getProviderCreditReversalSummaryList(), null); - Assert.assertEquals(res.getDetails().getSoftDescriptor(), "AMZ*Matt's Test Stor"); + Assert.assertEquals(res.getDetails().getSoftDescriptor(), "AMZ*Matt's Test Stor"); // The three new multi-currency specific fields Assert.assertEquals(res.getDetails().getConvertedAmount().getAmount(), "0.03"); diff --git a/tst/com/amazon/pay/response/xml/GetBillingAgreementDetailsWithSCAResponse.xml b/tst/com/amazon/pay/response/xml/GetBillingAgreementDetailsWithSCAResponse.xml new file mode 100644 index 0000000..77c23dd --- /dev/null +++ b/tst/com/amazon/pay/response/xml/GetBillingAgreementDetailsWithSCAResponse.xml @@ -0,0 +1,56 @@ + + + + + C02-5533845-8537141 + + Draft + + en-GB + false + + Physical + + IL + Chicago + US + 60602 + + + + + BuyerConsentNotSet + The buyer has not given consent for this billing agreement. + + + MerchantInitiatedTransaction + + SDK Sample Store Name + any custom information + 5678-example-order + + Sandbox + Testing PHP SDK Recurring Samples + + GBP + 25.00 + + 2019-08-20T22:03:09.297Z + + 2019-08-01T00:00:00Z + + GBP + 500.00 + + + GBP + 500 + + 2019-09-01T00:00:00Z + + + + + 954d87bd-b48f-4eb2-b84b-a0200da333cf + + diff --git a/tst/com/amazon/pay/response/xml/SetBillingAgreementDetailsWithSCAResponse.xml b/tst/com/amazon/pay/response/xml/SetBillingAgreementDetailsWithSCAResponse.xml new file mode 100644 index 0000000..f802c90 --- /dev/null +++ b/tst/com/amazon/pay/response/xml/SetBillingAgreementDetailsWithSCAResponse.xml @@ -0,0 +1,56 @@ + + + + + C02-5533845-8537141 + + Draft + + en-GB + false + + Physical + + IL + Chicago + US + 60602 + + + + + BuyerConsentNotSet + The buyer has not given consent for this billing agreement. + + + MerchantInitiatedTransaction + + SDK Sample Store Name + any custom information + 5678-example-order + + Sandbox + Testing PHP SDK Recurring Samples + + GBP + 25.00 + + 2019-08-20T22:03:09.297Z + + 2019-08-01T00:00:00Z + + GBP + 500.00 + + + GBP + 500 + + 2019-09-01T00:00:00Z + + + + + 2dee6992-29f6-4d3e-bc86-2cf339241c58 + + \ No newline at end of file From 2f23c4f30cf410b05dbcb72937e81b8b2601cf11 Mon Sep 17 00:00:00 2001 From: Harshika Agarwal Date: Fri, 23 Aug 2019 22:28:16 +0000 Subject: [PATCH 10/21] Amazon Pay Java SDK 3.6.1 --- CHANGES.txt | 3 +++ ...amazon-pay-3.6.0.jar => amazon-pay-3.6.1.jar} | Bin src/com/amazon/pay/impl/PayClient.java | 1 + src/com/amazon/pay/request/RequestHelper.java | 15 +++++++++++++++ src/com/amazon/pay/types/ServiceConstants.java | 3 +++ 5 files changed, 22 insertions(+) rename dist/{amazon-pay-3.6.0.jar => amazon-pay-3.6.1.jar} (100%) diff --git a/CHANGES.txt b/CHANGES.txt index fc8424f..d76f9bb 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +Version 3.6.1 - August 2019 +Strong Customer Authentication (SCA) implementation bug fix. + Version 3.6.0 - August 2019 Added additional attributes (successUrl, failureUrl) to ConfirmBillingAgreement and (subscriptionAmount, billingAgreementType) to SetBillingAgreement Details. See Amazon Pay Strong Customer Authentication (SCA) Upgrade Integration Guide for more information. diff --git a/dist/amazon-pay-3.6.0.jar b/dist/amazon-pay-3.6.1.jar similarity index 100% rename from dist/amazon-pay-3.6.0.jar rename to dist/amazon-pay-3.6.1.jar diff --git a/src/com/amazon/pay/impl/PayClient.java b/src/com/amazon/pay/impl/PayClient.java index 5e0f236..7b4e2fe 100755 --- a/src/com/amazon/pay/impl/PayClient.java +++ b/src/com/amazon/pay/impl/PayClient.java @@ -1196,6 +1196,7 @@ public GetMerchantAccountStatusResponseData getMerchantAccountStatus() } private ResponseData sendRequest(String httpPostRequest) { + System.out.println("Request" + httpPostRequest); ResponseData response = null; try { diff --git a/src/com/amazon/pay/request/RequestHelper.java b/src/com/amazon/pay/request/RequestHelper.java index a47edca..4c66b5a 100644 --- a/src/com/amazon/pay/request/RequestHelper.java +++ b/src/com/amazon/pay/request/RequestHelper.java @@ -89,12 +89,16 @@ private String constructSignature(Map params) { final String stringToSign = postHeader + Util.convertParameterMapToString(sortedParams); signature = Util.urlEncode(Util.getSignature(stringToSign, payConfig.getSecretKey())); } catch (UnsupportedEncodingException ex) { + ex.printStackTrace(); throw new AmazonClientException("Encountered UnsupportedEncodingException:", ex); } catch (IllegalStateException ex) { + ex.printStackTrace(); throw new AmazonClientException("Encountered IllegalStateException:", ex); } catch (NoSuchAlgorithmException ex) { + ex.printStackTrace(); throw new AmazonClientException("Encountered NoSuchAlgorithmException:", ex); } catch (InvalidKeyException ex) { + ex.printStackTrace(); throw new AmazonClientException("Encountered InvalidKeyException:", ex); } return signature; @@ -417,7 +421,14 @@ public String getPostURL(SetBillingAgreementDetailsRequest request) { parameters.put(ServiceConstants.BILLING_AGREEMENT_SELLER_STORE_NAME, request.getStoreName()); if (request.getCustomInformation() != null) parameters.put(ServiceConstants.BILLING_AGREEMENT_SELLER_CUSTOM_INFORMATION, request.getCustomInformation()); + if (request.getBillingAgreementType() != null) + parameters.put(ServiceConstants.BILLING_AGREEMENT_TYPE, request.getBillingAgreementType().toString()); + if (request.getSubscriptionAmount() != null) + parameters.put(ServiceConstants.BILLING_AGREEMENT_SUBSCRIPTION_AMOUNT_CURRENCY_CODE, request.getSubscriptionAmount().getCurrencyCode()); + if (request.getSubscriptionAmount() != null) + parameters.put(ServiceConstants.BILLING_AGREEMENT_SUBSCRIPTION_AMOUNT_AMOUNT, request.getSubscriptionAmount().getAmount()); addClientParameters(parameters, request); + return Util.convertParameterMapToString(parameters); } @@ -426,6 +437,10 @@ public String getPostURL(ConfirmBillingAgreementRequest request) { parameters.put(ServiceConstants.ACTION, ServiceConstants.CONFIRM_BILLING_AGREEMENT_DETAILS); if (request.getAmazonBillingAgreementId() != null) parameters.put(ServiceConstants.AMAZON_BILLING_AGREEMENT_ID, request.getAmazonBillingAgreementId()); + if (request.getSuccessUrl() != null) + parameters.put(ServiceConstants.SUCCESS_URL, request.getSuccessUrl()); + if (request.getFailureUrl() != null) + parameters.put(ServiceConstants.FAILURE_URL, request.getFailureUrl()); addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index a434ba8..78b49b2 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -50,6 +50,9 @@ public class ServiceConstants { public static final String BILLING_AGREEMENT_SELLER_CUSTOM_INFORMATION = "BillingAgreementAttributes.SellerBillingAgreementAttributes.CustomInformation"; public static final String BILLING_AGREEMENT_SELLER_NOTE = "BillingAgreementAttributes.SellerNote"; public static final String BILLING_AGREEMENT_SELLER_STORE_NAME = "BillingAgreementAttributes.SellerBillingAgreementAttributes.StoreName"; + public static final String BILLING_AGREEMENT_TYPE = "BillingAgreementAttributes.BillingAgreementType"; + public static final String BILLING_AGREEMENT_SUBSCRIPTION_AMOUNT_CURRENCY_CODE = "BillingAgreementAttributes.SubscriptionAmount.CurrencyCode"; + public static final String BILLING_AGREEMENT_SUBSCRIPTION_AMOUNT_AMOUNT = "BillingAgreementAttributes.SubscriptionAmount.Amount"; public static final String CANCELATION_REASON = "CancelationReason"; public static final String CAPTURE_AMOUNT = "CaptureAmount.Amount"; public static final String CAPTURE_CURRENCEYCODE = "CaptureAmount.CurrencyCode"; From cab777c70cdbc83ee5bfff4e681158a1e2046c0f Mon Sep 17 00:00:00 2001 From: harshi22 Date: Fri, 23 Aug 2019 15:49:29 -0700 Subject: [PATCH 11/21] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3485001..bfc5b6e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazon.pay amazon-pay-java-sdk jar - 3.6.0 + 3.6.1 commons-codec From e3c3ba19627a8a740b3146b8c24f0ce78fd674a1 Mon Sep 17 00:00:00 2001 From: harshi22 Date: Fri, 23 Aug 2019 15:55:39 -0700 Subject: [PATCH 12/21] Update ServiceConstants.java --- src/com/amazon/pay/types/ServiceConstants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index 78b49b2..24ca49f 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -152,7 +152,7 @@ public class ServiceConstants { public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.6.0"; + public static final String APPLICATION_LIBRARY_VERSION = "3.6.1"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations From a68fafc6e5b3ffc6380ad71d926b05a5e6fa16ce Mon Sep 17 00:00:00 2001 From: Harshika Agarwal Date: Fri, 23 Aug 2019 23:44:42 +0000 Subject: [PATCH 13/21] Amazon Pay Java SDK 3.6.1 --- dist/amazon-pay-3.6.1.jar | Bin 237550 -> 237800 bytes src/com/amazon/pay/impl/PayClient.java | 1 - src/com/amazon/pay/request/RequestHelper.java | 8 ++------ 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/dist/amazon-pay-3.6.1.jar b/dist/amazon-pay-3.6.1.jar index 99288288af3e20636b574457d590ea431647fda5..3fc1fef1b349de6517232ca3d654816f80c52947 100644 GIT binary patch delta 25761 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 delta 25468 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 TSf1K@Pog$yc!4*xoznjSjO7P( diff --git a/src/com/amazon/pay/impl/PayClient.java b/src/com/amazon/pay/impl/PayClient.java index 7b4e2fe..5e0f236 100755 --- a/src/com/amazon/pay/impl/PayClient.java +++ b/src/com/amazon/pay/impl/PayClient.java @@ -1196,7 +1196,6 @@ public GetMerchantAccountStatusResponseData getMerchantAccountStatus() } private ResponseData sendRequest(String httpPostRequest) { - System.out.println("Request" + httpPostRequest); ResponseData response = null; try { diff --git a/src/com/amazon/pay/request/RequestHelper.java b/src/com/amazon/pay/request/RequestHelper.java index 4c66b5a..f805856 100644 --- a/src/com/amazon/pay/request/RequestHelper.java +++ b/src/com/amazon/pay/request/RequestHelper.java @@ -89,16 +89,12 @@ private String constructSignature(Map params) { final String stringToSign = postHeader + Util.convertParameterMapToString(sortedParams); signature = Util.urlEncode(Util.getSignature(stringToSign, payConfig.getSecretKey())); } catch (UnsupportedEncodingException ex) { - ex.printStackTrace(); throw new AmazonClientException("Encountered UnsupportedEncodingException:", ex); } catch (IllegalStateException ex) { - ex.printStackTrace(); throw new AmazonClientException("Encountered IllegalStateException:", ex); } catch (NoSuchAlgorithmException ex) { - ex.printStackTrace(); throw new AmazonClientException("Encountered NoSuchAlgorithmException:", ex); } catch (InvalidKeyException ex) { - ex.printStackTrace(); throw new AmazonClientException("Encountered InvalidKeyException:", ex); } return signature; @@ -423,9 +419,9 @@ public String getPostURL(SetBillingAgreementDetailsRequest request) { parameters.put(ServiceConstants.BILLING_AGREEMENT_SELLER_CUSTOM_INFORMATION, request.getCustomInformation()); if (request.getBillingAgreementType() != null) parameters.put(ServiceConstants.BILLING_AGREEMENT_TYPE, request.getBillingAgreementType().toString()); - if (request.getSubscriptionAmount() != null) + if (request.getSubscriptionAmount().getCurrencyCode() != null) parameters.put(ServiceConstants.BILLING_AGREEMENT_SUBSCRIPTION_AMOUNT_CURRENCY_CODE, request.getSubscriptionAmount().getCurrencyCode()); - if (request.getSubscriptionAmount() != null) + if (request.getSubscriptionAmount().getAmount() != null) parameters.put(ServiceConstants.BILLING_AGREEMENT_SUBSCRIPTION_AMOUNT_AMOUNT, request.getSubscriptionAmount().getAmount()); addClientParameters(parameters, request); From 9b0bf0ff293dd24585aabf8e25b01d016e6620d8 Mon Sep 17 00:00:00 2001 From: Harshika Agarwal Date: Wed, 16 Oct 2019 15:26:43 -0700 Subject: [PATCH 14/21] Amazon Pay Java SDK 3.6.2 --- CHANGES.txt | 3 +++ ...zon-pay-3.6.1.jar => amazon-pay-3.6.2.jar} | Bin 237800 -> 237803 bytes pom.xml | 2 +- src/com/amazon/pay/request/RequestHelper.java | 10 ++++++---- .../amazon/pay/types/ServiceConstants.java | 2 +- 5 files changed, 11 insertions(+), 6 deletions(-) rename dist/{amazon-pay-3.6.1.jar => amazon-pay-3.6.2.jar} (83%) diff --git a/CHANGES.txt b/CHANGES.txt index d76f9bb..828fbff 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +Version 3.6.2 - August 2019 +Fix SetBillingAgreementDetails NPE for US and JP regions. + Version 3.6.1 - August 2019 Strong Customer Authentication (SCA) implementation bug fix. diff --git a/dist/amazon-pay-3.6.1.jar b/dist/amazon-pay-3.6.2.jar similarity index 83% rename from dist/amazon-pay-3.6.1.jar rename to dist/amazon-pay-3.6.2.jar index 3fc1fef1b349de6517232ca3d654816f80c52947..9bac0d0390288b694eb0e9aa54e8858a0730f714 100644 GIT binary patch delta 21121 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 PxcoXKLmZEP@ksPPGpNY) delta 21089 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.amazon.pay amazon-pay-java-sdk jar - 3.6.1 + 3.6.2 commons-codec diff --git a/src/com/amazon/pay/request/RequestHelper.java b/src/com/amazon/pay/request/RequestHelper.java index f805856..4744753 100644 --- a/src/com/amazon/pay/request/RequestHelper.java +++ b/src/com/amazon/pay/request/RequestHelper.java @@ -419,10 +419,12 @@ public String getPostURL(SetBillingAgreementDetailsRequest request) { parameters.put(ServiceConstants.BILLING_AGREEMENT_SELLER_CUSTOM_INFORMATION, request.getCustomInformation()); if (request.getBillingAgreementType() != null) parameters.put(ServiceConstants.BILLING_AGREEMENT_TYPE, request.getBillingAgreementType().toString()); - if (request.getSubscriptionAmount().getCurrencyCode() != null) - parameters.put(ServiceConstants.BILLING_AGREEMENT_SUBSCRIPTION_AMOUNT_CURRENCY_CODE, request.getSubscriptionAmount().getCurrencyCode()); - if (request.getSubscriptionAmount().getAmount() != null) - parameters.put(ServiceConstants.BILLING_AGREEMENT_SUBSCRIPTION_AMOUNT_AMOUNT, request.getSubscriptionAmount().getAmount()); + if (request.getSubscriptionAmount() != null) { + if (request.getSubscriptionAmount().getCurrencyCode() != null) + parameters.put(ServiceConstants.BILLING_AGREEMENT_SUBSCRIPTION_AMOUNT_CURRENCY_CODE, request.getSubscriptionAmount().getCurrencyCode()); + if (request.getSubscriptionAmount().getAmount() != null) + parameters.put(ServiceConstants.BILLING_AGREEMENT_SUBSCRIPTION_AMOUNT_AMOUNT, request.getSubscriptionAmount().getAmount()); + } addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index 24ca49f..bacedc7 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -152,7 +152,7 @@ public class ServiceConstants { public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.6.1"; + public static final String APPLICATION_LIBRARY_VERSION = "3.6.2"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations From 804980dee58636c3f460072b180e7f854cebeaea Mon Sep 17 00:00:00 2001 From: BJ Guillot Date: Wed, 12 Feb 2020 16:38:23 +0000 Subject: [PATCH 15/21] Amazon Pay Java SDK 3.6.3 --- CHANGES.txt | 12 +++++--- ...zon-pay-3.6.2.jar => amazon-pay-3.6.3.jar} | Bin 237803 -> 238140 bytes pom.xml | 2 +- .../AuthorizeOnBillingAgreementRequest.java | 28 ++++++++++++++++-- src/com/amazon/pay/request/RequestHelper.java | 27 +++++++++++++++-- .../amazon/pay/types/ServiceConstants.java | 4 +-- 6 files changed, 61 insertions(+), 12 deletions(-) rename dist/{amazon-pay-3.6.2.jar => amazon-pay-3.6.3.jar} (81%) diff --git a/CHANGES.txt b/CHANGES.txt index 828fbff..2ccc5cf 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,12 +1,16 @@ +Version 3.6.3 - February 2020 +- Fix Refund operation so that the ProviderCreditList is handled properly +- Add ProviderCreditList support to the AuthorizeOnBillingAgreement operation + Version 3.6.2 - August 2019 -Fix SetBillingAgreementDetails NPE for US and JP regions. +- Fix SetBillingAgreementDetails NPE for US and JP regions Version 3.6.1 - August 2019 -Strong Customer Authentication (SCA) implementation bug fix. +- Strong Customer Authentication (SCA) implementation bug fix Version 3.6.0 - August 2019 -Added additional attributes (successUrl, failureUrl) to ConfirmBillingAgreement and (subscriptionAmount, billingAgreementType) to SetBillingAgreement Details. -See Amazon Pay Strong Customer Authentication (SCA) Upgrade Integration Guide for more information. +- Added additional attributes (successUrl, failureUrl) to ConfirmBillingAgreement and (subscriptionAmount, billingAgreementType) to SetBillingAgreement Details + See Amazon Pay Strong Customer Authentication (SCA) Upgrade Integration Guide for more information Version 3.5.1 - May 2019 - PaymentAuthenticationStatus getter added for GetOrderReferenceDetails, SetOrderReferenceDetails, and SetOrderAttributes API calls diff --git a/dist/amazon-pay-3.6.2.jar b/dist/amazon-pay-3.6.3.jar similarity index 81% rename from dist/amazon-pay-3.6.2.jar rename to dist/amazon-pay-3.6.3.jar index 9bac0d0390288b694eb0e9aa54e8858a0730f714..d408eea0352820ed5311300092d7d357b4886011 100644 GIT binary patch delta 28700 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 X8F<_Ud{i{UpQ*%Zlk2@ep6dSqo9j-1 delta 28356 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 diff --git a/pom.xml b/pom.xml index fafc0bf..ce42b1d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazon.pay amazon-pay-java-sdk jar - 3.6.2 + 3.6.3 commons-codec diff --git a/src/com/amazon/pay/request/AuthorizeOnBillingAgreementRequest.java b/src/com/amazon/pay/request/AuthorizeOnBillingAgreementRequest.java index 7a8e197..65c196f 100644 --- a/src/com/amazon/pay/request/AuthorizeOnBillingAgreementRequest.java +++ b/src/com/amazon/pay/request/AuthorizeOnBillingAgreementRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -14,8 +14,10 @@ */ package com.amazon.pay.request; +import com.amazon.pay.response.model.ProviderCredit; import com.amazon.pay.types.CurrencyCode; import java.io.Serializable; +import java.util.List; /** * For more information documentation, see @@ -42,11 +44,11 @@ protected AuthorizeOnBillingAgreementRequest getThis() { private String platformId; private String sellerNote; private Boolean inheritShippingAddress; - private String sellerOrderId; private String storeName; private String supplementaryData; private String customInformation; + private List providerCredit; /** * Constructs request for AuthorizeOnBillingAgreement operation @@ -373,6 +375,27 @@ public String getCustomInformation() { return customInformation; } + /** + * Applicable for third-party solution providers only. + * + * @return ProviderCredit associated with this operation + */ + public List getProviderCredit() { + return providerCredit; + } + + /** + * Applicable for third-party solution providers only. + * + * @param providerCreditList associated with this operation + * + * @return Returns a reference to this object so that methods can be chained together. + */ + public AuthorizeOnBillingAgreementRequest setProviderCredit(List providerCreditList) { + this.providerCredit = providerCreditList; + return this; + } + /** * Returns a string representation of this object; useful for testing and * debugging. @@ -399,6 +422,7 @@ public String toString() { + ", storeName=" + storeName + ", supplementaryData=" + supplementaryData + ", customInformation=" + customInformation + + ", providerCredit=" + providerCredit + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } diff --git a/src/com/amazon/pay/request/RequestHelper.java b/src/com/amazon/pay/request/RequestHelper.java index 4744753..3083a1e 100644 --- a/src/com/amazon/pay/request/RequestHelper.java +++ b/src/com/amazon/pay/request/RequestHelper.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -336,7 +336,7 @@ public String getPostURL(RefundRequest request) { parameters.put(ServiceConstants.SOFT_DESCRIPTOR, request.getSoftDescriptor()); } if (request.getProviderCredit() != null) { - addProviderCreditToParamMap(request.getProviderCredit(), parameters); + addProviderCreditReversalToParamMap(request.getProviderCredit(), parameters); } addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); @@ -489,6 +489,8 @@ public String getPostURL(AuthorizeOnBillingAgreementRequest request) { parameters.put(ServiceConstants.BA_CUSTOM_INFORMATION, request.getCustomInformation()); if (request.getInheritShippingAddress() != null) parameters.put(ServiceConstants.INHERIT_SHIPPING_ADDRESS, Boolean.toString(request.getInheritShippingAddress())); + if (request.getProviderCredit() != null) + addProviderCreditToParamMap(request.getProviderCredit(), parameters); addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -662,7 +664,7 @@ private void addProviderCreditToParamMap(List providerCreditList if (member.getProviderId() != null) { parameters.put("ProviderCreditList" + "." + "member" + "." + memberListIndex + "." + "ProviderId", member.getProviderId()); } - Price creditAmount = member.getCreditAmount(); + final Price creditAmount = member.getCreditAmount(); if (creditAmount != null) { parameters.put("ProviderCreditList" + "." + "member" + "." + memberListIndex + "." + "CreditAmount" + "." + "Amount", creditAmount.getAmount()); parameters.put("ProviderCreditList" + "." + "member" + "." + memberListIndex + "." + "CreditAmount" + "." + "CurrencyCode", creditAmount.getCurrencyCode()); @@ -673,4 +675,23 @@ private void addProviderCreditToParamMap(List providerCreditList } } + private void addProviderCreditReversalToParamMap(List providerCreditList, Map parameters) { + if (providerCreditList != null) { + int memberListIndex = 1; + for (ProviderCredit member : providerCreditList) { + if (member != null) { + if (member.getProviderId() != null) { + parameters.put("ProviderCreditReversalList" + "." + "member" + "." + memberListIndex + "." + "ProviderId", member.getProviderId()); + } + final Price creditAmount = member.getCreditAmount(); + if (creditAmount != null) { + parameters.put("ProviderCreditReversalList" + "." + "member" + "." + memberListIndex + "." + "CreditReversalAmount" + "." + "Amount", creditAmount.getAmount()); + parameters.put("ProviderCreditReversalList" + "." + "member" + "." + memberListIndex + "." + "CreditReversalAmount" + "." + "CurrencyCode", creditAmount.getCurrencyCode()); + } + memberListIndex++; + } + } + } + } + } diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index bacedc7..0f9780b 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -152,7 +152,7 @@ public class ServiceConstants { public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.6.2"; + public static final String APPLICATION_LIBRARY_VERSION = "3.6.3"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations From 12ab080d4846ac0d1542e84da351488b759a3fc1 Mon Sep 17 00:00:00 2001 From: BJ Guillot Date: Tue, 29 Sep 2020 20:32:31 +0000 Subject: [PATCH 16/21] Amazon Pay Java SDK 3.6.4 --- CHANGES.txt | 4 ++ ...zon-pay-3.6.3.jar => amazon-pay-3.6.4.jar} | Bin 238140 -> 238283 bytes pom.xml | 6 +- src/com/amazon/pay/impl/PayClient.java | 66 +++++++++--------- src/com/amazon/pay/impl/PayLogUtil.java | 12 +++- .../GetOrderReferenceDetailsResponse.java | 9 ++- .../GetOrderReferenceDetailsResponseData.java | 17 ++--- .../amazon/pay/types/ServiceConstants.java | 2 +- 8 files changed, 63 insertions(+), 53 deletions(-) rename dist/{amazon-pay-3.6.3.jar => amazon-pay-3.6.4.jar} (79%) diff --git a/CHANGES.txt b/CHANGES.txt index 2ccc5cf..6b6b5ae 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +Version 3.6.4 - September 2020 +- getPaymentDetails was throwing NPE instead of AmazonServiceException in certain situations +- Remediate weakly configured XML processor in PayLogUtil class + Version 3.6.3 - February 2020 - Fix Refund operation so that the ProviderCreditList is handled properly - Add ProviderCreditList support to the AuthorizeOnBillingAgreement operation diff --git a/dist/amazon-pay-3.6.3.jar b/dist/amazon-pay-3.6.4.jar similarity index 79% rename from dist/amazon-pay-3.6.3.jar rename to dist/amazon-pay-3.6.4.jar index d408eea0352820ed5311300092d7d357b4886011..bdbad152ebff223e701e894bbb3e562708da9adc 100644 GIT binary patch delta 32378 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 R1%WR)k1S&E-2n8l{11uPlpO#7 diff --git a/pom.xml b/pom.xml index ce42b1d..170bcb5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazon.pay amazon-pay-java-sdk jar - 3.6.3 + 3.6.4 commons-codec @@ -42,11 +42,11 @@ ossrh - https://oss.sonatype.org/content/repositories/snapshots + https://aws.oss.sonatype.org/content/repositories/snapshots ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ + https://aws.oss.sonatype.org/service/local/staging/deploy/maven2/ diff --git a/src/com/amazon/pay/impl/PayClient.java b/src/com/amazon/pay/impl/PayClient.java index 5e0f236..17d6f14 100755 --- a/src/com/amazon/pay/impl/PayClient.java +++ b/src/com/amazon/pay/impl/PayClient.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -235,40 +235,42 @@ public GetPaymentDetails getPaymentDetails( throws AmazonServiceException { GetPaymentDetails paymentDetails = new GetPaymentDetails(); - GetOrderReferenceDetailsRequest getOrderReferenceDetailsRequest = - new GetOrderReferenceDetailsRequest(orderReferenceID) - .setMWSAuthToken(MWSAuthToken); - OrderReferenceDetails orderReferenceResponse = getOrderReferenceDetails(getOrderReferenceDetailsRequest).getDetails(); + final GetOrderReferenceDetailsRequest getOrderReferenceDetailsRequest = + new GetOrderReferenceDetailsRequest(orderReferenceID).setMWSAuthToken(MWSAuthToken); + final OrderReferenceDetails orderReferenceResponse = getOrderReferenceDetails(getOrderReferenceDetailsRequest).getDetails(); paymentDetails.putOrderReferenceDetails(orderReferenceID, orderReferenceResponse); - List amazon_authorization_id = orderReferenceResponse.getIdList().getMember(); - - for (String authorizeID : amazon_authorization_id) { - GetAuthorizationDetailsRequest getAuthDetailsRequest = - new GetAuthorizationDetailsRequest(authorizeID) - .setMWSAuthToken(MWSAuthToken); - AuthorizationDetails responseAuthorize = getAuthorizationDetails(getAuthDetailsRequest).getDetails(); - paymentDetails.putAuthorizationDetails(authorizeID, responseAuthorize); - - List amazon_capture_id = responseAuthorize.getIdList().getMember(); - - for (String captureID : amazon_capture_id) { - GetCaptureDetailsRequest getCaptureDetailsRequest = - new GetCaptureDetailsRequest(captureID) - .setMWSAuthToken(MWSAuthToken); - CaptureDetails responseCapture = getCaptureDetails(getCaptureDetailsRequest).getDetails(); - paymentDetails.putCaptureDetails(captureID, responseCapture); - - List amazon_refund_id = responseCapture.getIdList().getMember(); - - for (String refundID : amazon_refund_id) { - GetRefundDetailsRequest getRefundDetailsRequest = - new GetRefundDetailsRequest(refundID) - .setMWSAuthToken(MWSAuthToken); - RefundDetails responseRefund = getRefundDetails(getRefundDetailsRequest).getDetails(); - paymentDetails.putRefundDetails(refundID, responseRefund); + if (orderReferenceResponse.getIdList() != null) { + final List amazonAuthorizations = orderReferenceResponse.getIdList().getMember(); + + for (String authorizeId : amazonAuthorizations) { + final GetAuthorizationDetailsRequest getAuthDetailsRequest = + new GetAuthorizationDetailsRequest(authorizeId).setMWSAuthToken(MWSAuthToken); + final AuthorizationDetails responseAuthorize = getAuthorizationDetails(getAuthDetailsRequest).getDetails(); + paymentDetails.putAuthorizationDetails(authorizeId, responseAuthorize); + + if (responseAuthorize.getIdList() != null) { + final List amazonCaptures = responseAuthorize.getIdList().getMember(); + + for (String captureId : amazonCaptures) { + final GetCaptureDetailsRequest getCaptureDetailsRequest = + new GetCaptureDetailsRequest(captureId).setMWSAuthToken(MWSAuthToken); + final CaptureDetails responseCapture = getCaptureDetails(getCaptureDetailsRequest).getDetails(); + paymentDetails.putCaptureDetails(captureId, responseCapture); + + if (responseCapture.getIdList() != null) { + final List amazonRefunds = responseCapture.getIdList().getMember(); + + for (String refundId : amazonRefunds) { + final GetRefundDetailsRequest getRefundDetailsRequest = + new GetRefundDetailsRequest(refundId).setMWSAuthToken(MWSAuthToken); + final RefundDetails responseRefund = getRefundDetails(getRefundDetailsRequest).getDetails(); + paymentDetails.putRefundDetails(refundId, responseRefund); + } } - } + } + } + } } return paymentDetails; diff --git a/src/com/amazon/pay/impl/PayLogUtil.java b/src/com/amazon/pay/impl/PayLogUtil.java index 8ffe7e7..9c20fcd 100644 --- a/src/com/amazon/pay/impl/PayLogUtil.java +++ b/src/com/amazon/pay/impl/PayLogUtil.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -118,8 +118,16 @@ public String getSanitizedData(final String data, final List removedata) } } + final TransformerFactory tf = TransformerFactory.newInstance(); + + // settings for XXE: External Entity Prevention + // XMLConstants we need were introduced in Java 7, but we need to maintain backward compatibility + // with Java 6 in this SDK, so we reference them as their native strings + tf.setAttribute("http://javax.xml.XMLConstants/property/accessExternalDTD", ""); // XMLConstants.ACCESS_EXTERNAL_DTD + tf.setAttribute("http://javax.xml.XMLConstants/property/accessExternalStylesheet", ""); // XMLConstants.ACCESS_EXTERNAL_STYLESHEET + + final Transformer serializer = tf.newTransformer(); final StringWriter sw = new StringWriter(); - final Transformer serializer = TransformerFactory.newInstance().newTransformer(); serializer.transform(new DOMSource(list.item(0)), new StreamResult(sw)); final String result = sw.toString(); diff --git a/src/com/amazon/pay/response/model/GetOrderReferenceDetailsResponse.java b/src/com/amazon/pay/response/model/GetOrderReferenceDetailsResponse.java index 7984495..96617ec 100644 --- a/src/com/amazon/pay/response/model/GetOrderReferenceDetailsResponse.java +++ b/src/com/amazon/pay/response/model/GetOrderReferenceDetailsResponse.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -37,7 +37,7 @@ public class GetOrderReferenceDetailsResponse { public GetOrderReferenceDetailsResponse() { super(); } - + public GetOrderReferenceDetailsResult getGetOrderReferenceDetailsResult() { return getOrderReferenceDetailsResult; } @@ -45,8 +45,7 @@ public GetOrderReferenceDetailsResult getGetOrderReferenceDetailsResult() { public ResponseMetadata getResponseMetadata() { return responseMetadata; } - - + @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "orderReferenceDetails" @@ -65,4 +64,4 @@ public OrderReferenceDetails getOrderReferenceDetails() { return orderReferenceDetails; } } -} \ No newline at end of file +} diff --git a/src/com/amazon/pay/response/parser/GetOrderReferenceDetailsResponseData.java b/src/com/amazon/pay/response/parser/GetOrderReferenceDetailsResponseData.java index cbf5f15..d5cb337 100644 --- a/src/com/amazon/pay/response/parser/GetOrderReferenceDetailsResponseData.java +++ b/src/com/amazon/pay/response/parser/GetOrderReferenceDetailsResponseData.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -21,16 +21,16 @@ /** * Response from GetOrderReferenceDetails service API, as returned by Amazon Pay */ -public final class GetOrderReferenceDetailsResponseData extends ResponseData implements Serializable{ - +public final class GetOrderReferenceDetailsResponseData extends ResponseData implements Serializable { + private String requestId; private OrderReferenceDetails orderReferenceDetails; - + public GetOrderReferenceDetailsResponseData(GetOrderReferenceDetailsResponse response , ResponseData rawResponse) { super(rawResponse); - if(response != null) { + if (response != null) { this.requestId = response.getResponseMetadata().getRequestId(); - if(response.getGetOrderReferenceDetailsResult() != null) { + if (response.getGetOrderReferenceDetailsResult() != null) { orderReferenceDetails = response.getGetOrderReferenceDetailsResult().getOrderReferenceDetails(); } } @@ -39,7 +39,7 @@ public GetOrderReferenceDetailsResponseData(GetOrderReferenceDetailsResponse res /** * The requestID that uniquely identifies the service request * the caller made. - * + * * @return The requestID that uniquely identifies the service request * the caller made. */ @@ -63,8 +63,5 @@ public OrderReferenceDetails getDetails() { public String toString() { return "GetOrderReferenceDetailsResponseData{" + "requestId=" + requestId + ", orderReferenceDetails=" + orderReferenceDetails.toString() + '}'; } - - - } diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index 0f9780b..019b01b 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -152,7 +152,7 @@ public class ServiceConstants { public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.6.3"; + public static final String APPLICATION_LIBRARY_VERSION = "3.6.4"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations From f5f1838e84347093fba1c86129e5d2dd5955204f Mon Sep 17 00:00:00 2001 From: Shangamesh T Date: Fri, 29 Jan 2021 19:52:32 +0530 Subject: [PATCH 17/21] Amazon Pay Java SDK 3.6.5 --- CHANGES.txt | 3 ++ ...zon-pay-3.6.4.jar => amazon-pay-3.6.5.jar} | Bin 238283 -> 238475 bytes pom.xml | 2 +- .../request/ConfirmOrderReferenceRequest.java | 26 +++++++++++++++++- src/com/amazon/pay/request/RequestHelper.java | 4 ++- .../amazon/pay/types/ServiceConstants.java | 3 +- .../pay/request/PaymentsAPIRequestTest.java | 4 ++- 7 files changed, 37 insertions(+), 5 deletions(-) rename dist/{amazon-pay-3.6.4.jar => amazon-pay-3.6.5.jar} (82%) diff --git a/CHANGES.txt b/CHANGES.txt index 6b6b5ae..1bbe5bf 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +Version 3.6.5 - January 2021 +- Added additional attribute (expectImmediateAuthorization) to ConfirmOrderReference. This value can be set to true or false (Boolean). See Amazon Pay Strong Customer Authentication (SCA) Upgrade Integration Guide for more information. + Version 3.6.4 - September 2020 - getPaymentDetails was throwing NPE instead of AmazonServiceException in certain situations - Remediate weakly configured XML processor in PayLogUtil class diff --git a/dist/amazon-pay-3.6.4.jar b/dist/amazon-pay-3.6.5.jar similarity index 82% rename from dist/amazon-pay-3.6.4.jar rename to dist/amazon-pay-3.6.5.jar index bdbad152ebff223e701e894bbb3e562708da9adc..49fdd22d575f5d362dd534c08bc7f23e71ed422e 100644 GIT binary patch delta 25305 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

mp@3J{P#9T;w}g;A%By}o9(F26yjV~eY*+W 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 IL7&b40Z$>+fB*mh delta 25206 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 diff --git a/pom.xml b/pom.xml index 170bcb5..75d6951 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazon.pay amazon-pay-java-sdk jar - 3.6.4 + 3.6.5 commons-codec diff --git a/src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java b/src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java index 1550b2d..6dfb20c 100644 --- a/src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java +++ b/src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java @@ -38,6 +38,7 @@ protected ConfirmOrderReferenceRequest getThis() { private String failureUrl; private String authorizationAmount; private CurrencyCode authorizationCurrencyCode; + private Boolean expectImmediateAuthorization; /** * Constructor requires an order reference identifier. @@ -147,6 +148,28 @@ public ConfirmOrderReferenceRequest setFailureUrl(final String failureUrl) { public String getFailureUrl() { return failureUrl; } + + /** + * The ExpectImmediateAuthorization set in the request + * + * @return Boolean + */ + public Boolean isExpectImmediateAuthorization() { + return expectImmediateAuthorization; + } + + /** + * Sets the ExpectImmediateAuthorization in ConfirmOrderReference + * + * @param expectImmediateAuthorization Sets the expectImmediateAuthorization in ConfirmOrderReference + * + * @return ConfirmOrderReferenceRequest + * Container holding Confirm Order Reference operation parameters + */ + public ConfirmOrderReferenceRequest setExpectImmediateAuthorization(Boolean expectImmediateAuthorization) { + this.expectImmediateAuthorization = expectImmediateAuthorization; + return this; + } /** * Returns a string representation of this object; useful for testing and @@ -164,7 +187,8 @@ public String toString() { + ", authorizationCurrencyCode=" + authorizationCurrencyCode + ", successUrl=" + successUrl + ", failureUrl=" + failureUrl - + ", mwsAuthToken=" + getMwsAuthToken() + '}'; + + ", mwsAuthToken=" + getMwsAuthToken() + + ", expectImmediateAuthorize=" + isExpectImmediateAuthorization() +'}'; } } diff --git a/src/com/amazon/pay/request/RequestHelper.java b/src/com/amazon/pay/request/RequestHelper.java index 3083a1e..644599b 100644 --- a/src/com/amazon/pay/request/RequestHelper.java +++ b/src/com/amazon/pay/request/RequestHelper.java @@ -267,7 +267,9 @@ public String getPostURL(ConfirmOrderReferenceRequest request) { } parameters.put(ServiceConstants.AUTHORIZATION_CURRENCEYCODE, request.getAuthorizationCurrencyCode().toString()); } - + if (request.isExpectImmediateAuthorization() != null) { + parameters.put(ServiceConstants.EXPECT_IMMEDIATE_AUTHORIZATION, request.isExpectImmediateAuthorization().toString()); + } addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index 019b01b..133e3a4 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -98,6 +98,7 @@ public class ServiceConstants { public static final String ORDER_ATTRIBUTES_SUPPLEMENTARY_DATA = "OrderAttributes.SellerOrderAttributes.SupplementaryData"; public static final String SUCCESS_URL = "SuccessUrl"; public static final String FAILURE_URL = "FailureUrl"; + public static final String EXPECT_IMMEDIATE_AUTHORIZATION = "ExpectImmediateAuthorization"; // API Request Parameters - (Mostly) Required Parameters public static final String ACTION = "Action"; @@ -152,7 +153,7 @@ public class ServiceConstants { public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.6.4"; + public static final String APPLICATION_LIBRARY_VERSION = "3.6.5"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations diff --git a/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java b/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java index bba6c2c..ebfdf12 100644 --- a/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java +++ b/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java @@ -124,7 +124,8 @@ public void testConfirmOrderReferenceRequest() { .setAuthorizationAmount(TestConstants.AUTHORIZE_AMOUNT) .setAuthorizationCurrencyCode(CurrencyCode.EUR) .setSuccessUrl(TestConstants.SUCCESS_URL) - .setFailureUrl(TestConstants.FAILURE_URL); + .setFailureUrl(TestConstants.FAILURE_URL) + .setExpectImmediateAuthorization(true); Assert.assertEquals(request.getAmazonOrderReferenceId(),TestConstants.amazonOrderReferenceId); Assert.assertEquals(request.getMwsAuthToken(), TestConstants.mwsAuthToken); @@ -132,6 +133,7 @@ public void testConfirmOrderReferenceRequest() { Assert.assertEquals(request.getAuthorizationCurrencyCode(), CurrencyCode.EUR); Assert.assertEquals(request.getSuccessUrl(), TestConstants.SUCCESS_URL); Assert.assertEquals(request.getFailureUrl(), TestConstants.FAILURE_URL); + Assert.assertEquals(request.isExpectImmediateAuthorization(), true); } @Test From 9b2234ec74e830df9208ffe73070a44fde4da5fc Mon Sep 17 00:00:00 2001 From: Shangamesh T Date: Tue, 23 Mar 2021 21:35:27 +0530 Subject: [PATCH 18/21] Amazon Pay Java SDK 3.7.0 --- CHANGES.txt | 6 ++++ README.md | 2 +- ...zon-pay-3.6.5.jar => amazon-pay-3.7.0.jar} | Bin 238475 -> 239132 bytes pom.xml | 2 +- src/com/amazon/pay/Config.java | 9 ++++- .../pay/exceptions/AmazonClientException.java | 2 +- .../exceptions/AmazonServiceException.java | 2 +- src/com/amazon/pay/impl/PayClient.java | 16 ++++----- src/com/amazon/pay/impl/PayConfig.java | 34 +++++++++++++----- src/com/amazon/pay/impl/Util.java | 18 +++++++--- .../pay/impl/ipn/NotificationFactory.java | 2 +- .../impl/ipn/NotificationVerification.java | 2 +- .../amazon/pay/request/AuthorizeRequest.java | 2 +- .../request/CancelOrderReferenceRequest.java | 2 +- .../amazon/pay/request/CaptureRequest.java | 2 +- src/com/amazon/pay/request/ChargeRequest.java | 2 +- .../request/CloseAuthorizationRequest.java | 2 +- .../request/CloseBillingAgreementRequest.java | 2 +- .../request/CloseOrderReferenceRequest.java | 2 +- .../CreateOrderReferenceForIdRequest.java | 2 +- .../GetAuthorizationDetailsRequest.java | 2 +- .../GetBillingAgreementDetailsRequest.java | 2 +- .../pay/request/GetCaptureDetailsRequest.java | 2 +- .../GetOrderReferenceDetailsRequest.java | 2 +- .../GetProviderCreditDetailsRequest.java | 2 +- ...tProviderCreditReversalDetailsRequest.java | 2 +- .../pay/request/GetRefundDetailsRequest.java | 2 +- .../request/ListOrderReferenceRequest.java | 2 +- src/com/amazon/pay/request/RefundRequest.java | 2 +- .../request/ReverseProviderCreditRequest.java | 2 +- .../SetOrderReferenceDetailsRequest.java | 2 +- .../ValidateBillingAgreementRequest.java | 2 +- .../pay/response/model/AccountStatus.java | 2 +- .../pay/response/model/ErrorResponse.java | 2 +- .../GetMerchantAccountStatusResponse.java | 2 +- .../model/GetMerchantAccountStatusResult.java | 2 +- .../amazon/pay/response/parser/Parser.java | 2 +- .../amazon/pay/types/ServiceConstants.java | 11 +++++- tst/com/amazon/pay/TestConstants.java | 4 +-- .../amazon/pay/impl/LoginUserInfoTest.java | 17 +++++---- .../amazon/pay/impl/PaymentsConfigTest.java | 2 +- 41 files changed, 115 insertions(+), 64 deletions(-) rename dist/{amazon-pay-3.6.5.jar => amazon-pay-3.7.0.jar} (74%) diff --git a/CHANGES.txt b/CHANGES.txt index 1bbe5bf..1af8cf4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,9 @@ +Version 3.7.0 - March 2021 +- Fixed following two security risks : +1. Deprecated setSecretKey(String) method & enabled setSecretKey(char[]) in Config & PayConfig +2. Buyer Access token is passed as HTTP header instead of query parameter in URL for GetUserInfo API +- Note: Consumers of previous SDK versions strongly recommended to update data type of secret key from string to char[] as of this SDK Version 3.7.0. Please check the link : https://www.techiedelight.com/why-character-array-preferred-over-string-storing-passwords/ to know why char array is preferred over string for string. + Version 3.6.5 - January 2021 - Added additional attribute (expectImmediateAuthorization) to ConfirmOrderReference. This value can be set to true or false (Boolean). See Amazon Pay Strong Customer Authentication (SCA) Upgrade Integration Guide for more information. diff --git a/README.md b/README.md index 4933795..8fe975e 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ import com.amazon.pay.impl.PayConfig; ```java String merchantId = "YOUR_MERCHANT_ID"; String accessKey = "YOUR_ACCESS_KEY"; -String secretKey = "YOUR_SECRET_Key"; +char[] secretKey = getSecretKey() // Replace with your implementation Config config = new PayConfig() .withSellerId(merchantId) diff --git a/dist/amazon-pay-3.6.5.jar b/dist/amazon-pay-3.7.0.jar similarity index 74% rename from dist/amazon-pay-3.6.5.jar rename to dist/amazon-pay-3.7.0.jar index 49fdd22d575f5d362dd534c08bc7f23e71ed422e..33ce7dc5632f39c83344231505117f39c26a8032 100644 GIT binary patch delta 43891 zcmY&<19T=$&~9wowryK)Y&#p}3;2>~CufDyzPrh@-6u3)%;PCG7 z>HztFX8!h{v`!5E58kQ%K?)@(-G8VG%K0BggEIezU7+l!|3>rA!v7)c6jE@E6qXFA z6g)7v|E)!mfg%VBo1*-`83th7{|Pd{1pmWTFy8+V9h~n!R0e1Hhs`12bP!1Y`v0x0 z$}0^90>TBE5)Y0Abab$^wqi1~GjVnOH%BhW|FQi~;~&MTZMdL`qFhLVL6JqV4(-Ny z$?7jP;4w3M7b(k6q$(SG$>ej%LsPd*DYJt|7yJ$(-j&vQL_*gg(N={lfBnO|xagm5 z)C+uv2=w<#3D>gry6BU`cBh0})4{F17KA<(Am;Y&pGW~qusqV+sk61f-XJqBWLp1+YRCA?O2wa2a>j=jVq zXJK?j=<_#lJEm5=2GigB9Kv>Iz8ebw#G@UHk;RhyFN*A*<@_<5(A79XDTXoI)MJ3B z@fdOr;d)e6Q3mYF&hrnWU>j{=K@#?@nQrpb8qiJQh~lZ7XI;Y>ghsgE<|P=V-9KMq zFmxlnIXEjsR8-R3UizVxa#<8IO^Pv&iA`HJo_|VXs1)R8!xjr1ze{7y!_JG`a4h-Z z+0ez6=*9Q}!y0*(DB>?5(bqVb_(p-ZV_m~N61s@0vtq7&oaZJvv>te-VXlSK3#s5a zjcG~(7}v?Zs&Pm&RbC~KRah3;ZVBY#_tcfhDsn6RSQDi1*A?D8NPkp?%E}3I8=VY^ zkJ%Yn6G3~dRA%iouGv=@rNt91EaeX(er%7&J}kN-xJ`gUqoMdm%lhDx!ioUf%~>s2 z5w#GR#7B%*Zt1b=MQ3)aYFBrE_Pe*6I1S!V;+x7jHo zV3CK`Q=1G!b;5?5!oYUodmk^Q6Etj*;q(mV@&3>iadDTCX$u zLo_}xruSfUhy4M%%+TU2;r-l}uIDnmXX;SNfo6dF`PS<52*CXb`8CnoeKgX$x8dLi zy)!-fbba;mjQmb*w5@exMEALYIM}|;(!34r@Qxz9??c>qgYKs{3{=`u9)X;g0xRga zaeYU|ey+#w-32rHSr`njo(UP>anlY$N0Jzd861k4OdD27Q09`Qn&rZpHkz7K=~u>4 z2A6p@sBTmSmqlkcIxrK=}!FEb(7%W5k z1TAJ0WrSP5Xa-Sy*i?hTIjYoQZKnRLV}MPAqkY)LS(nI<3aHsGS*$H9NTPXjdh4d}4IzMZw;5Vpbhq4fHpjx@0x}r7@9bCQpt5SxGbtc1-&o)4UXR${SYO8eQv6 z=f!(_NG1HU3y{>vaeJWKvA@Kl^2F+H9W+%Jr-x8dlX;T54_9s`(k-lC75Dir zYlMQZ%t@}Fy-?C9RPA16?*2PA7O!kCk;JaD*bfV1;NC$#iY4+Vbz`4^;Qqr)r3I76 z5-^}pJg+9r(=ze<8w~Z{ewEUBT_lX;P_A7^7z1zJZE&Of?32Td=393V;&NP4B69;N zy#?A!!!k5_-}&zw8F`a9r*K4L<|vlLdvefqu<7wQE>b}8uVoTTf78g{SEnQT@ZNYp zcQ9hpT{v83FLlh!mMOHQld!S@d(?tnA7CZ3Lt4xBii{pj=_qv>>UJw!<2gS13|%0L zP{?ys?iww3mZNr%kfmTXg7sX%P~IZeuS|yXC5|SS7vr(E!N~xcWgfHJq3EP3YKz2Q z@#JrEjf03J@tPqQF!G-%O?K_T7{s#fw0Tp*RA z=7ydbx~5JtY+f>7xTVSmShhko*Rro(oQ;6JYwRaq*i)640%k(>K1qCIhgjVsF+X^`1@I?#5){c6kczktZH>r%&>}_6{v>ObLAQ);D z!wj|{D4{lF&^_H#I!V!Md&D$ZJkpC5EfdpP@EZ4Fld(hj*kwBtFAyx5KG60>LXG)$ zO!0j!4|J31s9O19Syzvr)DT###AQ~|2eKy@qYjj->4SNjWKf(-nj>$d>Q8&VFG1}& zw1}F`Zjcbh3~@POvAW`$V*yjeIv5Rm>$B1a$0--XT*~>E#&v;KP*H`sDNb499SUTs zcIMNymC^j8QZ0`fKlyqsm3`Yo%(JkSaSz3D&=RQe!78JTvUrOCwJQ%etMSre;JJxX z6JF#~CqXp?IyV@}>k!st^qp`9Ik4;%f=ilZ?E^DGT72Uua^BL^7{JZ_;?pLs67IK? zHbx(sKM$jMTMwrM0qZ{voZoP9C`Zn+LgTq7|KvwITvk(HO*^#Bwkkg94SBaQ6Dq%M z_52`PV1dE4FQUeh=SI+6(>M{Mu+Zao##x(4^~NblLm(|!cg7r7#?~g5$Xx6u92tAm z6x5%#^ZKgc#L&OGI|tr@PuGeP`zH7~s-+Mi>1{~XQ5}c`K4nDbJd_zXZwr*)U9C%P z$p5XluRMFLpP)k|}nIAyZ%Hz6a*63DvelZB6kzECmaz z4X40>D*#lju;M5$*8WT$Npr=KIkE}UZ8ULiTJNx~ZlKwj5iP7~wPbywKf)3Q3vJWt zXWXm(`BPcKi4(6qFCGyqnYW!ysd1A^7k}MTUuZEH4P}bQA20JLKOA7hliW4uW_ZI4 zpv`MZ`lSIlQ2{Dd(KxdbdV=Rdis7VBI9)zkytYOzTXc4Qw=9nqoZ|_S55BdqwuoyR zoFbA{*dpBU%0nk@YpP=$Xg%B9ilZ&<>_Xq{urc*4k52CB%!6bj5A_k0&?JsbL_VI! z!RNCkhuGjVxXD98P$dg>6FDUh{Xs^?FmC69;tlEydtrMH|_yAw!cY zoSd0p4WwS?u{Q@YTkmV_uZAW_R(a{5_oCK++i%Tj0R)+BRXS2Q3-XRNFe)-VcpRPoOhr>IgP6M|Y`i(em(w}qa)={fE+ke%Y2r{V+ zZ%q9r1a#4Fv&T=2c-k8&4Yr(U4DV!33Uk~j-3UD`^l}JjyysLRbKDd@M^+|q-b6j8 zR?c$VbUY)gEo~V^GH3CXnS}5tra}OUFcf3~bZilo`hcp1VfB2fEw%z$Kni3NvYJ1q z4v;1$lWxU4>d&Y;5P*~jo`qK;n?NwNgaSZH8_dM38%J$QtxUqZO#HiVE25e_q$!iK zb%`a2VVU5{Zo1VO8?$DCCNo##t=43!$S#|3&SuEK%&wt;PuFniqO0cQ6;)h1r07yi zNjZ|u7SK_gKUD9EH%*Ig@J!#(f(R~g2eP@oRl|-{CKB8EoY9PA;0V;$ zUG{^M+L+aH(srvQV8&|599&V9Lr|Hz&&AbU)#jVtI>FLlX^?S=TizvdGE9=OwVj}v z_zC247hYv+y2vIGJdf>|wS`zvF%|ZNWOhwT46X9YAzFv};M=t&Vs8ky8u+vhHiD$g z>dnFQTGJ27a@Gy~pWDird)C3$z{m5_6_f>YLHrT69u6mJh4V|zhVb(S*|bUPx$#As zuH{3xUlkK++4{qNuD`>&&dF!q*&Ui~Zr!k4S_H&XY%}>%Dw{L;aw=Uj`7$c+GIixK z>P9(`7(ciQ!a++g>lWrFf==!ou9B@6R%#DAqhf3ud4-xTCAKZHwlO57uU0jF;Sxc|?3ACwmV4Vgg55O6 zuTz*;GpD%XNNp>Z5py^UJdAhd8aQ+y2u(H`If5~35*R!l=?UF|k-NHF+ z$#+mPFE?NvSKi9$hTs~PI&)O-t$i4l?j;;9D_kr%6>Lr~apFlGwJ7*Y4oV-oTT|b< zffj|&nsie2%9-gHGJn=g;B&lidXqEK*atJ;BHw{SA)_^Q{8(fLF4-@gag!n_5vP;J zD(o7om4q_@y~W89x9cYzOJJ)Iw9-+eIBNKf9HVg}E~8j;HQXe0H7(FD5Xf9Vkt9Q+ zWcfI*+`1~rA-j`|BhwiTW?jT8{>brRi%DV+IEHoz?${RcQok``9q+brIp5JN+gmmZ zilrQD&%g?iS_ozUQ}w69o}W`!p{g|*05ju~C(`F2IVB^9&(s~=>G<4lwQU@e-}9*u zJNeZ`E3Ra1>f>fStRV&GDL3wSO9f>XT2#mv-VBlfbb7!}PBtB*9TxAS(5WG{COtq7 zfJN!)9KQmWAM2&1o21@a_NJeMbGk?L)onzy)?V>fSj+{`8Iu5QT#Mb zt&U509(oh4l}r8VOA46F32Ve0Z`SHj%-bUTeYkh|^fkb0VG4_d2#qk7 z*HPt^7B|glER0Zw(Lp$9$-TSZp0&MO=~R}DfDwhwCL=jdU&4oS*15%Cl_rY$oUIu8 z7xxd2$qG53OTHJWb#f{@N85Qcg^Pt??uYqrx2>2$)ZRn(+;B*CA@`iTpEs;N7)4WfX^! zTM7iNDt6yZtUZ2>*LDk;vXxOX|1qR$jMMdNuu~fqGH4z3Pt&Z-u2GA!zo$8odFCYO z`)P=^!zJi#$gLV}Z+?}LTVq#s{na1^$f)hAk%k@TvO)BmVdTQxTzG@C%(ywPvElL_ z_1HiHj%18v&G{M~)VSv6naxdkk8r)_%e-1nFkgPia8AZr9y>9c*)+ygkrSYYnb|yg zjAa;rxr)!;MiP$LX8(LF*t?hO%4gN#1$d@8Vn5^9YntU|j${L&jre~2xtxEN?kt2;Ic5S>tWdnK|yq7TM z$d~^*WS-UGuW%HX=~%r`YaPp1zM5S;nLrd1W^Ux4aR#?S_W=RMG0YeUncL-b2jPn4 z`$Jy(D`BWhBfOKpr|o&b3yb7&22+|+@VkS4yZ75aY_Di8Fxg!y*UfR`jM|W^VzMX! zO{c(y6jiN5=gri(iR_=qps5Ny`zBUeWmN06Tbj)CGtpRyp7`W)RrA4CW3RfhweJq3F+NgUl^&;1d0P_fwQ;>iE&a`5g|co{cEJZ zm+sl{ff1uU-gi;N-YFtpQ9XjEFk~x0dMj0G>OKbs{pC za6g>`O{0=1wNNkS-l-aGDa^^(XbYtBg#8-60mSfZf6)4!wWNCXRcYFz@kp;HVbTcx zS(S zCtQoRQS=l1Mvvi2T1dT}P~_q8t4lBU0M1B(1uV57{v>U$5i%ouQ~SH`vDNe(1X%pUdi;W1edMaJ{3Nbpjr(}o%ZJa^Q=Ax z)aoJ$iyF)eLlaHzYrMatfpIa>tt1}zYiyLCqANS%MMIX&)&0h8BUdv-u(!`qcWpEcTp1LfR8r@ z1J;G9hO}Q^3Gw^vot%&SXV|5F+Sad?DYwHd*rOZc)cQ6=+tIJyfW>2T(hPi|S|Uw&Nb#$n-& zSAI}01J$u9EhNXIj*c)jn>cV%WbX!ma&twWO5gE}JzNJ@Afi!W z{ggXbp6b^h5LKU-bbm1*OxshHJR0KVhC2&zVyxu>@kSo{)forY8TG)Kw}z!-$2rz7 z;D)~F=c5|wpZN_D2+t6hMsiAwwg6HQ8JvT1Mvp8Kz&1cc6X=T&s@g22e{K3F#6QY4 zD2x)V0j_ZjR=&9bF1azE#8B9^k8T7_x+Y+4XCPbjp}j}fFi7QO5wwpH;o7CVO!Z(& zgCGz*CA*3kiA`t1V5mtLM3EoDfAvqqfJMajZ-C(dnz~pqpe#SeGR+YYCEQ2RTrX95 z)j$e*7^okv7ldn^F9y`|p^po4Fm$2RLj|-6%RucllA1Wmy2-b=a})%<1Luo~y&*RV zeuV0A`lmz5LJl}`+f5Ckj8Vcc^kU!zWyID2u$4L)4sLhQN%*A$CyRPmxZtr@l@ik*mAy;FGv zWxJojXa}M_pEA*K*l%}>L+5Sv_r;9?P7>7vq641$p zmc}Wo6Ty`=h(jOSrPc)>NOeGywc1xA^Fud5JKQ&?d!Rccih$fzy`jKV;`+=h+E>Rc zujDZp#`~_R4+*I#jPGb!;U#yxFszf#MPyY4>WBR{hnJa~;ci!UQvh`4!7mUXmaQW`I*Y6OwA z@#l{t-GvtWnYkc5sb=X$)LLa!HYcx0iL}Cs!plgPN zwFtn*X~lHaBQen8i`mup()1ICYY*Aa(V@R?iRUX2k+IGa76N z8<>Xj;6Gxm=Dav5vblN&uyRv?kIwRY3uwYBz^ zsnXj)Txiz8?=>(Ayg_DkM{Ij(a{VD*b=BjVuq`w1dEa(71zEg^bFGBx1z`+LB<9sE zcZIYwZeLM2=E;gXs76!NYJggVp$}-9*p569_@}iAtGLJ5jz#jR18Pc0M1fd_x)P+y z1Ogzn7bu62Qa8UtP|z@16Zj$aI5oHSVKj<&)=jmkGCmrPoQ_awDoYAl@q{H!Htbp6 zQS1^{H$^4s&4!tIaw%rQoSl*SW(*TY%$<_@cZ={cMwc4{wLw2B;DL^y8rx8kw|XoJ z+ek;ZNSWkUp&GYuPIX=QelEy=lArn*Z=szs-bn?>uOfsehzG4)h>;S7`&Dj9b7_c2 zmTy7oGN2LFzLkpju*hsm_P2vI?_;>T2z-0mbD;lw;gp)IOAhHxr-7}eQRlYJm7h$g zS58a?@7zU%OWnkH1@3?`?>*cr4nGXNK)vIIy%8+f4ox!v$+I@i2Pu}Bjd8+ysRKYM z-T0wQFdbEI&fOSs-;J0MyHYXDlfOuc-=Vhc5Cf@Y;L=?|S5h8~y6lMcRWZZlM|b3} z=+AYW(A=BZN`;U1e_yIBIGCZlL}iI{tW`P-BA^zj&lfY|^8A!sonrP=_DkqK<$ zEphxmJ z)%zE8+j}lY?syKtU;BZaoAJp#c(7O89Gxz>26a^`CqC`~#TU}GmNFaRKbG=cWrQA* zd+RiQ!yE(Wz@qDAyq0I51UW2!`nWN1CvfafJnWuELI)BeZppoKw>K#ahq4Vum1n9g zhqwWIw>M3U9>TBOa;IohQTFG@IyQ#3&DgG@G_^E(Nr!A7vE6K(?dTMsMFh2V^Oe0@`h*lSgF? zqB1=WxVK^_5;$nv%`U-f89+csV|ijPaX34PBb`KHD&NnVyE&nuL6(Gwn_@!nF14>6 zP_szCwAU~9voGPKJ3nx_!yIMWFEF)3Ba>D?`1G;fez+H|nxv~f-4`ai#4AyePeQW$ z4XzgabGk=1qCJHd9^R}gUWYXRm1EPj%iRf}j4 z%$wjXi4~zRNLV!>)*`ykIeG{-Iv75cphnH*#&0;+%QH}F^3ueMnz_fiUjU?6-i&pp zA#3gAVbm@u7<&>+W%LTSxD8}>urqdEFWB}P_$F~ALOC5Tkq8zVQ^_cRaAcNb<` z{7U~CL?BxDyQgycMU( z#qZ&l;9|588nnS+rNptyui_nSFg6&-z$q0d@jNz&bb4`<7B++#jqs4VSdd;-I1>vB zyK*-EG`4mXT<|t}v%LTd0)diL@lI7xCHk~$`BJ!m>ez_YG#fAZERZi{s(}dg-{=-- z1Zq?%H~FF9X|z1@Sq?a-zm|GO85Z4e1qs=we>pGaVscNP{sp_N-!KHSwtHwmwrLjv z5%fujrp%2!CbltH_55ikjGR41WwoiqHWiSbK)q8TKGKR8)Xz2Az}GxXkq;r-Kvld7 zS|wMQ??ipjgy0qa&*;=O!rI#PRA%-h3UwB#Ghd~+h{GY&-PONiYWv}M^{l4C*WVKWi$>&qgK0sT-W$4JK z+~w2vZ3N3NANnQ3LSvw02l|hI>lIKhU*_C3qj6TE9af?@7081d!2?zxH1Wxh|J6pI zOe#UF&;?|K9@>P=d$n?+m_^SU0gEORRr_6v+CIN=*(qT6O+*IMN$^pGTuaWu-6b38@CXfc);C$S{^ykNu&HM`%maYYuS zLO5*r9enXS{B?(k7fb=`sMzWk=>MPSAa2v?kKI9e{b04M2(76FTD6R;NhCMI(ottGPoErLf3V!h9}PvBWa z&XJh7|Mm45pK#T|ySl1mxCI2+WvSwgEnbT-@mr8CR>DOd%QVh3e~CSEO=s5bG0!rk zZ6q+~1rE7n9?_@Q>%=z@q}{~DUQxti*BS-4w&^~f@8giAI|HRW1n znayhlm}gnhHmhs9VSz8AJ*xW3D_~r?z1iNd?Zh}YKJk(ImOEbHLw-bPR@#o@z{ec zE3!wFVrFtpe(5Q5D&%-_2SLhb{!~TP0|r%@>R2J9$YG?~wA55a1K9avw-@8#^+kAH4W3^DNT6 zvi!+`ctBu}tn}F5*mYeJAFY6k*&NaFI&|llBXc~^dYAg-XWCgzp}-&&KjzdHKuDY*tXVEQ?7Qe`}gi|ecWLOj2tS24G3 ze(S%cl;1yEva^s@yfAo3V{Qcg|3?z2Hr&fDF_faC^)31IAEy#^~Q;Qv25AM+02k7JPL-%N#j%3+Ym4- z0kloawF{>9AKDj>Ag|z{g61uF09zqwe;I%rh zb%EGiolbG^^=3D^*sbji%VGALHl8M9VXK|jP}Fsm z@e;*NRofH^{!bFHYJTmoTGa+s-6X8VA~#C9D8!=njYCGm{l!C!#n8RPVk?YO0Ng z(s9RAK_7XURj_3KmYZjlOhTW(;X0GhHt$x~n($t zlgqK?#V?9%%2ZQ&jzy#4r}|o0NHfqqJ-K1PuF{VeYU^XC8{x|jE!d)zEi>baIGxaR z6E=o!a&rCD(0nD+)2Xf}$Bi3;CXC4WwuZv~ov32*kh6|sQX0=v?~OWH9(qVc?i<_u<2$g&yz7)> zzHll5X-SDM6L8xg+i_!Ch9g{BsbOwY@yx+Y-{QG&r(c?l!NAOFo&16@R{g@0jI)`& zxm-z@5%z%3+&9j;oGD>)29Pe=;3KC!An}IP*a#JHjWWQQ%97%o)wes?hegMg<~+#c zY5NHNtq8k3DqTVWUWGMqx(;+^mA9pynLVD=UDg#^ETP=#FL(4O9ldR&x3P&RZRh9K zogGL;9h7u+D=Zeu6}FPx52MImU|iv>t%?ahVw^nwdY=leU}+}FAyj*_ zXM!7$)(R`QUyE~^>!E6J)vn*diPvZwwjXS4O15om%2h6@cn+u2R0lE?e6MIX6BWS4 zUCI+G`}VfyL&>Y#u7*>{pbII>YpQk~~inRC=p zfqB@h;4V>UrD!dvQc|akufTwKqNU{)7J5oW5I>}sy2m=>P-vjSo3@hDMW41RwT$k5 zo==eyt&dITR^wp`y$tMEry!q7h##A`-zy~Ye#=BlfrckSx`@6Jt;S797f_n1m*LC> zoE6$COlo5ChWzlgkN+@k63kn2bp7e)lVT>P-Xk<}U45IRKZ8TDhUh7CZSd?18vs{M zi36$=EJ`KL!eBzZ$t;TCkYS8Jl($A{!aYQ(uLL1QN-CNhQ3lMkvnmRt6V2{mrQ$a( zhv>}2hyE2soZJAds8*J_{s99HnE^=_O^_(9c6t*olEHusg>h@6Kq}=L$wiTOD3$74 zJkmpb54t4?Dn=MNV)g@!e4E~c`BCKu#UJW9o9wC!MgicJ{b+;-UkJ?G|7 z;_zdN&EPg!Ct{#=5VUbG#8X3$UXtGnkHFqg?PjFhHKf;CRLCaDGc*Z#Kk3@}5Gibg zvqUg?V%jbby?6fjqC)-=C~Lk;XXpkG0drprTJBy?h6%G+G3~y~jDd|=43+&N3zoNY zIIP=_L$NOd^?pzlEA^L zh(#rk%)qa%!y;7o9&b;fmjVF}td)~m=UC>7Od;w1iC$L4EecEVmL zT~X%T98Tco>qd1JA*+;hHL3FbND=CGxX8_56h%*XAZ<=kgGcb3j5$RH9@tB&?$V)M z6{Dt(qI7BNJd+aXNTmRP_$Rd(VZGcU!i@X2I5U!1-+3r<0&G zRm(Oz8ULrTs)jrLw=#>K(#Vn&dverLNfokGlnkK06JpHnANx}q$BUjYrsw!;kw_v9 z%{J1wm`YMbf!71I4M_s7v>jJ@yE@S5cNvKb1v(cRraKpopJb$0a`=Edc*Q4VfS&rQ zJhqQpX!JhcfNHr}B{_q;u0uWhCoIZJ;#2upZfm5Rj(_VGKm^3&dhZX>LiBrOfzPmK zWD2lVi2*h0{AzY!`RAHy(s0cEPk0^Yg^Y{MihHBjVZ1_KTGVbZQ&mt9Xf!tKZ4|AmGzV=lpNLF!hP0PTHGG&VcXQ` zmpD-_PcP39+#izc1q<;9whY{|*I#{o#0>25TYtE>MJTl5L7TGaG4GF#m~Y`f27qd;wd}MjZ39&^ovMkI`6WOwo0q zXU06yYLC|3tGX}h2TY6R0`{pMmH?cW488}o3bH@wN+9^kfOJ&Kz34UTGmpPcKQ#j6 zxiv*XttDiCskG>(!sd@0_@90ykl)k3;h)-5pO6BM75wuHQ#zCe46=DW2Z_Xe&9=La z`m-A*Kk1)S3(xt)Gt?F_ z1-_|rNlb*tr1IWPI~vE;+wTxJzt|)5&+ihNrC1SyDQJdM zsC+#zzl6={JDl=|5pqPu$>3#S)`JS)M$rs#&H8v0&%UdQ+u@138A#|W)~wK{tk@>8 za9saBLFWu!V!t)K`rtHA`sNN@2E2JT!4u>9SV|v6bvVEw`JDdDf^br+@z$mnvze zd^!Q~g$^{-;<}JFci{Z>T3%|^FWz#YQ1wl*uLiN_mvlcc8p4$izX#S8m1tx&ssqOQ zYUZ2|;V#3%q@NYWd~g3qY5rZ0qfbOhFp%Zr^^{wt7vs7ZtRfm*?m#35dspCNyKK+T z(C=PPrnmaEjj28L2h-F*5klS6%?!hmMFZ1n7X>h+88JQGX!8)}l~AXhBczC=){zeW zb+V~}0=$<=CIoOK3iQTGx7_6ftREu0%KC~!&79e1?6_mazZvLgKf(|oy&8-fdt>3T zJBeI*LVsK`=%)uo+_zGnJeiwFLS4>pV2T1Iv6yE2kh&QmKUA?aEsbRywV*!IMvXPF z>VRVdX}H?;^3}ngRSf!RK`lNT`1iiePVP`l{Gh9LJfHyl_yL=p7M*WpmzFztWKb2B zJMI!q4UaTGawqz#sGy~pxQpGJa05nFzVWBM7_-_Fhgx{y85NPKGwaTRLy9AahT(+k zqK5FA;xnK*Yg3^)waN6C4|}Xpt9vPw>;YjL!SgZr_pDiwMu!}DXfFe?hw`qYpJ}@2 zgrMqUl=^0esrNGWnV#d;z^@{GcMTe`x3LSvBHFQShx~bzHWS?UK@p<;+ZFt%&v^N$v->&w=g;vxp+JnCx%g3bWpVBX{Li2>U+6BeP2q)< zVuS$2O?vgZ^g;e1|AhG16gf{}zXBfYm83t=LmkeT&R-I_&>K;2q|TUY(wo&ovg(!I zd(uN1s{V&73$mEo@&v@9%v&XK*Fd~3#dD@X*Xvn|oRJ6?PxYw9FLpNQoj_m^u#|jK zDa0pJV=n-iK=Jv;7sYiziLQ#y#@4nQzUyA={DJES-`>u4*d&keI|p#QONvn_yZF5~ z!gW2Q^n)gpts$%6!m2P>n3{N=uWprZ{RPPUI)=~DFBjl^8tk5JOe)Oa4iwc!U%K8n z%zcFVnFN8;1_J>f_AZrh{pQh5dWVSpYz_W-C#?sGrJJK~l8 zoU3YL?2f0*ApN-+t5;%_WhV5{+CT9&t49B~w(nmV6R2mis9g8|)GdK3x`X{!x8$v? z2=`wlAE%Q{O(+HkNIg9W2vLfX9Cpf;E)wwH-9P##`A6M4uzx>SEDIk~W<9Zaqu|IG zE1O64nd62_q7IsZL%>?HqxS_e5>hdbi?FfJCwI-A>gk6 z?P_6JI`iO=Jr0j(SbV3;J-zP^RquJ{{m%FDEzvThA0N_7jkY@l-+lW}*-O)b-)S4p zCdG#)cXt}|T*ohfycaN!gORW8XJz9e1~|pF|OxrE8F%Ae@TbT@1GFnXN6mI$r>Oas8`!et9|d$JGb{&HdbC3woRHngKbn+f37OP&*W3j$F@# z3%!eoZf!X4Ox(RWJ7(9lP&<~_zKA_ryZi_}YBF6)$4?paqMw0%+myw~XYZuk22>H< zvBC`O#H`Q7P(WZ!D#vGgAR*I%(lvGIODabJ)6wj;72;=Zf5GYtd=cBpjf2TsWWO}x zXHmb=g17cDDwU@I#}dK$R(kY3`?Mp{C=^&>&|IN5M_`zUImtHhw^@-IlkD})rS*3H zwYBZJ`MF;!{fE}u`0K=Q_Yp!N=i53w$&8u>d>YSs&I)HO?xD<~Wb}g2D412x7va$=4Gv+ z$mv$kfJKdjn9%1(4;9JgNxKV`-DS8FH7hOS;x;5#&WYq&m;L>J7~LsOOHyE2k0?eG z1jy`x*gmKUe?Qt)_U$#W1dtqG|VQKkTXgZ=Yc+ms|VIRv51DKU$;BJ^`c zTYWCAj0I`EEA^>V_2xU~#bpB%E<}hzB^aCV1FmE>C5Dljpvp8XJ#K_KgC9k*CfVGc zU&vLWQ@6-l@*EIvW~IvQmy(4UW2NCqXVia z7!n&0(%zQ_b)Y6K@Zr=Sj)hh;XO_id=uPjY$f+3(H{Q1cKEAPlOMCkK+fg)-+4?#l1r_P&1T;N)ml zu&Eg$?ex|^e4AklDHTTzzL&ra)MXAvm7^q0MB%J@c+iPr6k4sfw>Agdwmy_QQQ<4K47g;IXT@ey zJdgZ|Q_x6>Ei@)YL6$T&tZO$DJG$X$;>bq}lKD;jOjQ%1%6jt-53f-FA-pyL^l5*2 z%gX)~521A%fup^z8Tyo26Qi?_^%ylnh5d&8M)m3lXUzgze~~8Pt9ncnxcUH%SNujE zrR@fCsgYSjUwF+j?XSV6V4;bHsdi!eJ;ud81ye~oavcq$i!el`vaMA*8TD{C{2NEQ z>Wx5_W703dK4pGcxU3V+UFBv)AXqN71-1X0_fePZvr#pP6*7SgUnc6G+eCcZ!H*fv ze!^Hps)3c?kr=F{st3%N`czw@o@|VC6=2ZxGl4F=*}<7|t?mww^(!y7R6CPTr|<45 zz5Szro`O+PQ+S)l-Sluws{^Qyz;WbT?xdSrxM%ZCIPh9mVwipT;|PUMAeOM*ZQBb! zA8_^X>gK5*Q`q#j_#He2I3~>YGWw1)aT67>`a(@5%p|XN2k(C33iI{O$oP4ANtq|# zYF9~&Q=vqKI`uoZOB=gNi3H02e6!+C3Gj*gwRvcC%?$X&{K5-6R7?R5_Hv#Y+&g@G zrT9fu*Z92@dIkLv(Y}0D0JIrBJ@hJvx{)eAG0fg9UKPAcnhi7*?NnM zkyMylWtvo~FL{>P_e4K2^Pljlp!K0^u)%6Af(iC$NJz!Rb(&yI%5I}cB@&k6Yi+Hj_%pgI|4)6@89H3-c^MjAz%3yQCPM|vIP||>Z*=Ba;A6`VjHm@i6&_0^g)hEkoU<`U`oqI*B24s3 z=+d-&$zk~+ziErL-v2@f;AV=vGWu-N)#YFy3TCWJKO`Ci@Ufmat>g}Mxf5%cxRyEL zttEhVQ*^z^_;wC>E5MHH4e1rNtW_)<0*;MphIzk44f%frW#}hmwn;HoJIkjgfy;+< z9}tW0ghcQ!9$3z#@6lE0w8q=B$2HL@%njCPr|ZHeB*S{8dgWpmnKz~^B>=#% zw>e@IK{}#8sy>tC$~?RW#U^;hTg$A3$GHUheVh|#5}2I_kw1L3wNUXgGg9+|_n3*F zjdDMzPX2+6AN85j0n>;wC3r}b9K3jQy0|N)#vsWssjM1l622xxMS^sz4Zy#LF}4s2 zB0@a|d@-i_?kmP>n^Po6i!`;EX>NJ|q1PE+suGC_oeMVT9gb@zGQUR>MpV~~8D2UM z)QzywzfjKt0^II6?$--rbfHeZ!Q#77!Ml!$U!CDzwjY9CE}y>&lC^-I2+=y zqL2imQ`n8-a(Y+a1D)dlNYNjtM1$YE>zVOdT7zCgOK~(==j=T+7y? zxn-U2AKc*RW2~Nn&J{--hvG6{y1rz!h!1T4P%d`aZkJQ&lQW^fkj)<&A0|&zmGifX zs`@Rm;XE-2yqo~ z{nQZgG&D*}WL1Q4N3UX~tM}7gVJdz5q?2FAZAbspY%7_~dWgds!1>tl5_w}(mX%?&Ohg|!Kd`e!a#VY-9 z!~mY=ENmp(5KpYyc2e+{M&wR>%G#bxF&o1&Pk_@6&)<4h(8A>P762)->ACx}^0|P` zQOnyt4T@=7Q&LjmtikrPN1sn%2|AZ8Ms+*0PP);wHn;8-ksIo~khOrf6=@uGdS5;@ zx(MaIxmIWi4wD(A=M??c<^)!LwpIA6U(~60qZ+m|AN9xQ4k;UKzGT2E;>`(1*iKp@ zE1xM&DrCJ3xTE|T%ODB=1Gdt96Le>cKTVb>WqpR&3v{D?$|tx8UGlxO(UWb= zsc8Cm?zpI`>h!*utW!dF>OFN9$+$67ah1y$mxzr$YCeo}VQocd3`B*Wi>j_-W+?wM zUq9thv0=cjw4jyiWwg0R#_(>7HGexwbpE=(VaQyYPC4UuQ(#iyRqu= zFvh7O$_ep&W*QsPTl%g?kQc>uQ~01#B_J22chk=W9=lHRj51pG4jPwi-8!dL99~Xh zwmK|z@Q@9)JVMYTOQq3BJ@hw6@3SD+6LC$*R!<0WEU;ib2`zai60i8yLO0)S zeCVk^n9|iSS;C-40Ph+2&=%9dz|ljyPt+i7;-b40`0aE+N;S{X6K2x&7+7z=iBh%? z%P+PbK>rK*l(f(uw2tgj85Q$uJMYY}3gDYG<#ymzopn}}@!7}=c9EoS)NIyG=N03~!T?3AgqRp*R_p~817IHQRnpJp&+M1DF<0Fj5*4m~$%lK1sDm8ysSCj0cy1u@@d%tGI?)6f1v z+Nv>At#I@D)l-Ld(bO@j!=aF9m}AhlUjxP4m-hDgk>9h3ZznfvIk*H?AOm!IL3Pbb*=k@soazMXE&U9;;; z-d^6jkh)DTG^cfRQS*$S(M`of0{4qgM28rQ4|!i{c!hD!lOWV_f6@gR4JrlEsxtQJ!GH`Z$}dOt35;;s;{I>G(Li$y!o9*^J_Rsgf_H%XeJU!&p)z zg6f;8_V4pLOW#AtrJv>Bc_0q*=S9;UALb`^pvsxK$8X=cdCvba{GcnJqpj}z4V4Qq zw|QO~O}$>>E7zimrrWm=wOsrH(Sd!HDD()@PF@pMl55zg(Le?bAtH0pZc?zr2W~XP zN7C!`LF|hYkHIt+m4*fV!E*k97iCxC*9ZwTPWMi)3jhxk(dYKCGCJjuEf^8+2Yfxa z(5AM6N;rb62#vpD7yR%<9+|_!@?2#c1yf%0t}*ilf}AywR;_XmffeR!ensC`)e9jq#S)iZYrN@AaKl*lHBXr6?EY zk7+I-%=Ix{g~s!`Z@-h2NFgHG6!R-EpJ>=&)Zyl~1Vk6A!}U@zSH0E2=Lk>81n$bU zZ`tR5%*fDqgqw9IW?x~|sqbBSFsd}~hPe^;@@DWyPuYnw4r~1;{)^CFLaEcBmgCai zpCsH6p!$(%Vr20H#}!Iu30tQhZ4)LUpsXF)U zi9LGnZ=OQB3%=7zyc=^Za5_Tj4>fhm8nlEmOVkCjadlPp1?BgT)L{ZT-EPzI-l<#k zzsm`A6!w}?YaboNxbus45!wl2SDi(#jGR2yrghUk7U<#%f8KM(a9@~a)6WX0wWAR! z$$MQYO>jrpiP|0IFSSEm#&*vZ!v#6XuL}i4&|%PBRd7A6L{IZg$gD^n^yj&B>`~6S zdDv+@D@^dJb;<@H&_>g!XLKOVY6iACV^|%R))W+PdJ+2>&P;(Q9x1ErM2+mw;+sgNc>H!N73EGuIG7=+r=D zapkbJf(fJ01yfYW9qhkMi0OWa|G>8bbm*dLRxvIVG?igM!Dyu#=wDPQ^ofITW>^>) zT@;ADArS91N*a8vT#W-%QfGr2+&@XU?OM=696Q^gfVo=)D(P!q6_i3X7zPbAr6i8K zAOM1au|a@Tll&72SGzLo|BpS-U>x-Jzra;ncPm}#uN4Y}0FD6o{{?4*_4*FtG{a(&_HZgVRCxwA7EgN?I6rq(9$5@x*)87PHo0^ z(ADAp82&rPc-;)K#c%D+M80z40;Q<{K}z`_$N?f~eds_~DIpPM^lPbT2Zv^4H@sBi zK88i)uhnE4bi`yDvx|bQzJJ!9pJpc*4$s<`+K2Szy99j^SkKnR+kAY?)}kk#T>px~ zFzL2!7|JewvRwi*AFD?B?7|qm+^u$X7#dg|(`NYmiuUPw5$)`pTLQm3<~{5zdV$Y) zRx}qpJpPpNTwZJ7@~3Rv*SUIqiFB6Og)B$VwL!xKYhnmsoEM#D}-^Ty;#81qFkpCE5e4&6kXr48>?UG@hjo$X2 zWrEdG&YbX9aCYUa%Zx`-f9p|OXusFt6I0afw1<6$`B7U;;O)+{%Uae$kE?*+gFg>x zQ2A9CYG#jfxCV)^s7t1zkDwKji-6i*53x5_2Ob#j&>QyVy{kaP!xRsx=(AQvOkRi7 z-d0Ig_Ek7|R&n|s166?iLpP-TUeT6x%Is+#JrM${=I&j2I@h`yFHU$m{XMTkiQYX?c4QE;osZ4t`Md2u;R4-M z0^vFmJ=u!q%Hw(_WVl4S9vuB|CH){Ov*6;Pyz?ZVCGvX(&s{u6B z7r_@3-WRODDX9i*FJ_gOrDW%t0mu-S^n&Q%QfHy$m&XJclA zvwhqE-qIf4IXOjx~7o@IJ%6J*e z;Vv(EluYVlI4Ldr<&g}qU+2U*^}ZbBwla9`=N3_-&WJI-u8E}|$$GEtoD#ydo2%bj zA*a`mzZI|tY$C7LyJiM(Zvezm*m}p&TKG|Fu%a?{%5pHcxLn&-j!+f8Ou8w7v4Y?k z4Zo{wmVITGO56Fm62Hs&6GvyQ){VWUuUfoSVad08}KeBiSN9!7+c9@1+l9h~?2Wz?*yOCRX=vS_r$w5Dh;>BEz{;eM* ztbJ6DX+X+e`I~sQ`>DAWj6W)~A2FlbwdAWdqr2b)S>LH}l6QQQVW&to92Z+RP?tog z-H*E#zEt`oxnvbV7>J0-OtW@%pRqQR?aj4eJ1O&?Ai}{IT21EyV((8gXVDG75lIB4kP-|IN~837K2Mr4Vq(}>iJkMbcb(>>T>81V$C4a3 zIx^NZ=6IPyUob7^l(ltR;h3i`^Hgc&cCHlfrDBD$%bpeAT*=-9%f&you^%Q{kV=P^ ztg1WZ@;M$pF3wm994p5g|BD1IjIvesKQ(8nA^Jp~e}I%qVX?~^ zdr{6TLBot}Nn-~th%~FQ zw38`iERuTpibd^`<cy@|2sncx5L36SD344na!CVSry?ww3+5Bq zm3}=N)8VddF46B5U(Y=zbFH}9E-VwZ8y4Qd3~n1TdQrIwRjwN93XCKIPS}O|?2F9a`_~^Du8^!|EFw5IFEE3Sj=vFHcDz-Esv(? zaZeb9O&OzexsIxc?}(_S4>onV&|*Xb%#e&kr0Hr7X!HW zB^k`}g)=FAz?3LgOO8Vfam6rSO&b`e90vc74U`1MW9Aw?|HkYwS*Gvf!@ZK}(slxw!U zrWV2(NxuL@TXN7KdhNb4FROwawsUP_DixShEI8RVjC+=tdY1we9^n;I{DFcy7L7== z#{1qdlX3rgJ9OrLauk5TAYi)*cW0sr5+@X2GK$e10N?>*r8>b_C z1RdFO|Bf<5qGJ3jUHd6jE^}c4TYx}kNITs_W4pfx?yEymrBC+0He*d6Uez$A>2VtOut$GFb&9_O0NCv*MaEthGs zvcT;e{M!x6`*#{YYP%cf(P=GhLS@#$PJF8HrBA0kY??g8G>zk!%lU%5 zsj^00SW_0x9-<|?HB+uW=q-oh7OfLH*UKYXUPOQ@7m=X2`^X=%NXD!hOF5ndPNs2e zBUd1Mb4#bExmSvmG&jE)0>W|%vdRzp(WfDA!`2(Ff`0X5hi4o{eke?pWUf~_ge%3Y zuBb>QZFm2A(W;PAp)21S7lz%jlw9F`pbcgb(I(3Mv;+6FSq!VGCp)QF%6nQMk!4iv z=yOBKo>vKB%yg8=2vCs?@FWgj;&;rD$I|?bO8#K9`jO_ossARt3*1IIQ11?N z;6WR%?I~5)bA%UoDVl?2{@kph8_c`)!8w<73gRuVYa3?WTkoFK9fcgu$v~iUGcwAT zX>rjMP4&%!AhqHj?cUsu z${$POquA_5zuy?-;%JXm@dZOz&XDj(u;_{l^0OWAAgFpR9D5B`ph{B0B?H|Yit+ALVGnwF1f(ts5iBvtTZ%d-77SkhY+M}Z}w_I7M850}aoR*e~SQA8> z22R?ah%Xo}if5z-tBgeQ ztYM-SW4HTlktzmbKGP*tnnOXxJ$6(RS9C=!4kviymsmV#@RtFYA^_(vy0B}Dmv);m zu2$No{o_Sr2NXM>j%NEv9jUqAGL*~DDi5r^)|YK;p9+mr?336pTu&}fQa$x_BYBUX zFm)2^FVHcOE{b9ND$ELIwT>gmUxk!Y{keUu_ z!#IoH9PKBCZ*gJZa3`fsGwck4Fkv;}cav?jUhdhY!nIXzi)kn^i_0XR@E`GLR12dEFYpq~Ynd4G6zwwPJ?`n?NO9-yIFBn)Q z6f@oKy&m#Gubskp+E>>=7#?vUsJ8|+RnFamSJ%ie3r~O@Rkm+4zKtrn zw8QtU!n5MNcZRW&nEn0^zE{~+SG;i3T33H|pXaQdF_N+OXq81+9JOZx zI~?x0aQGV+!GW2Z=XX}aQ+WuzX$8S-A5}n#frk*3~m!s7jp~SasOkR*V1+U1Q^wbdlsW(Xu*i1u& zG3+q7uTZ^qy^vurbv<>{ZOW|+7FH%%^6ulQ# zpO@49!4B4*d5Xf(p5?&^FCIv38hl2iR|+)gT#B}tGu79nQx^y;*^&Tve*-Hn%ti!9 z)+s=Q0^om;{?RdRNcQT^AR-83(j1WRUQ|jMR>HX1+_z7X*F%?hPu0GJG!$IXv}aua zP&eWLbIwBu=y=#{KX#g|j=Yo7uOnHzjO@`6i2zrap;=$NGaLzvH9gItZy!msIkRp3 zX6+dl9^tY$?tgc;xDrawEPpNkTkhr$0;huNel?ys6{B5wE$g8D(i=n8X0e5}cpJL7 zUmNxIbjFdFSZF7N43(9LVJl@f;Q@?GJD>S5V!isfTg8{}tA(zM2lqm8bLDmao)GjH z2YG>A>N`J${CPU!XONyR)O<7k0J*N6N zRzWspPT%{mIsMro+ji@Szt$hPEYEJg@A(a8+EUo?6&V5GwI`yG`7n)5SOBZ_r-}#Na8iNTY%gX>OJqCz;ALUIW;>^uPe9E z^Rv3^XrpRXPfz?&sR@+8j9U>r zvKuV>sMIQ_Lz5UQMw6%^qMZ0(#Aicn>~4H2e~RLui)w62KO#yIbjq$F2Uwc`V=j1e zy@2-&fz%G%2{QaqejH((i!{5!!3L-&TJ%>GL7$adR>r-{6`ZOwD$IOm^1Y@kzae&gccgwKCoRJMW*t9A z=|+mO zPeKfM$M`lKwD)-ulPe;_PYFpSYm6h;e}(KM`dF;D;Ps!#@rMHhMX=QVmmvMPNos_4 z+8ot_H1C4dZQ2oeE^qQ*LoQfIVpng4y#u*vj+ySW-vw0?@}7|8n>=#bz~%gqC**wx z28eQ|mi%BnUr)I^EB~6Lm=RSwVYK(zW7B6l;7-dXrJaw_N96%S10^^c--L(Jhea4k zlfqFIL8VD0JWb|%_y~BY$1lBs3GJORUL0ps0tnUSS9Xugpr5*h8XAh&%yuB!+ZMvD z5wu$7U0k7dHQ$DzRFx^?Z&_DL;yh|KW5wnDQY_5Ez2A+A$xyq6W<@1Ju)ju9(|L7a zCxus651w6rBBx)to~=P2)sniLP;(knxtvgGatbdaliDaWi5>yVX2~ld>{4CFI_>KQ zU{|Va?qcLSTz#|y2qQHrZAMc_ZA2$EiNjK_8i(_SkOk{Z!{}X3Lol%eOm4d!rN7l+ zj=@xus5b$of4lDkh>T#;5k!A~z=tm~+~mdCvc#&SDhfm%7mLpb&YS3}b7$aLHIob1 zF(lH3Y5W=!Owd! zVzuI_<3-?~EN*9M`7$V|J>7(-)!#mIxm{)3?<#@smcnM2IIU98VpreY{K1a|x%AKD6mapqvyOT0f7dVebRel0?x?Ol{Rd~`dqi31+t1qs_`yG8deiyHLt zwMdCo_{WP*kVQYmVIRNip#HW>Hy5rb7z?szh)KEx(%F}D3ju+h~QgPz(1 zmeXJHw6($elp|k*|IlHpT`tIGl#^41zjqtxMV|Dt_rvXqX%Xf18@^jy13&Ot7rNMgG3%aD&(is3t8VrbDZy@o|4#O8i+7tfuukdTxDVF#q~>{tZ37 z#A*SLOd$T+xx{T9!AWWztbma>pJa? z2C=5~d*m^-`o2?MJSj-a_iS|C1Tke*W>0``k;}ITp0J1qESww8?Jc;5FvsLkSUV*Z zBfv~{M164LD8M=yU|x+{ol;=5dj}RcM zh@3r6OkyRjX5$^JT#8IghER>^=Q==SR!w0)#{E`~NqWAG*GWPqK4{36?{yHqu9+e7|6FU*NvPQP1;pDsS3R zyqdwc=`_R|_%l@QYuo^AyCRt7oV9`jdzfnV49bnlXZL&4q zoWk-oZN%D@!bzHBBX(araB7aF2QTI6&F*)<(5>fbb-XUekiPQhhSF6@Bs~v0!Dv@X zCM|sU;vpHS-O-0M%#1stb3%8fK^IC9;Dna*hohr7p_=bD=WlK1*P?3HZ zBuPLU%0a_Q5M!>n?&Zif21iTwrTay6UE%ip`|uKgPO(v%RGEJ(^!Tj=0o-`tRtfMO z%#D9$1Owa}s(X^e%XhEyDv4^J-$1I| zT$=JOJ=N7c)zzDQ6uewk-Jp^OW4SrV2f4Y%dOr1aJC8n8S#T!f$t7Q zX|iku%o|VhfHAK6o0Ab4M0RWk&X>alTp4)=O)Nt9lz*IUazA1|Re}@wU@zH|gmsms#yN%ilR_GmV*#}p zJ2h2=xjOi{I=s0$v^f{SQcJ>Y&T@&%Kvb(*AL-LHB zz%eG*5MHTz;Pse2KRKzD= z>`ChFqZW>lfJT#|8pdwCgi|TPl|MfkxHN((i)PjQ^(v*?r}Fhe633`RNvDJn`&2gk zF#=2${P=mZgZ#CH-#f0q-WvWUHl4lRp3gp>!UtfVf-!I33nSgeZ(o`R$L42UfIk9lKfwZi3rnHr%#R2i#-u%r$5?lfKEumDCeFX#a+5@K z7=jid<==h!`hQd{vHf{lX86}g;Saq|*GuHf%{!fej>b74XX)qP65gJS_k?9Je+0r2 zy$m?_zpQ^SGu3({?A+*XP~$UNCF9dcJ@HsEu41^+!0U(5yEpjbW` zQ?CkkyI`XIGr@sQ`CFfv5yKK#iRNFVrSs3B^oPl~43Vtz8`locX$MFP9J+taY;ndh zD#5Iw-Sx-|o!Y#?tlc;EW>mW1$5)nmMdNm3K(1v$3?p5p0m$q{yP#$(`67K;{8z}Q0p;|wUeR&6tw@=|;{~Cf? zI8bEzb?nd%=O^{;X7i(BW-5a-Hk5aQ;8c$VZFVfIguSQRJwg0TLoPH*&mZ>BGo z#QR;&wg%u@dP>)QN^KJk#nadCuvSt{sjKIOExL$cWdgbiKF&Z_lphK@U9nx$BW^+l zVqbzVQo{Cw!p1RkOsl~RJ04NGLj{p|LP(@=@9rG-N0DE*@Vf>UDeMy> z+LVt0yTX|&hFq2NB#*-@+9pM=HjM92$Z4ltu1sh~>cl_89a&i+^LOe*-_W!7)`*n1 zIyI7*QQdrC>P1z()2Hm<^#AJJKoH}Dpf=b+SwrfNw6vb@z~v7n=MdU}PrVa{4Ouh{ zp0I?8Xh@GpP^K0Yp@VcRo|<@|G;~u1gfO`W?Zn8A)e20RRR^G>?5ATIi;6ORpk?n3 zNvY!~sD20L{P0rwb09BNP6#ap!Q%;mYP*jqSh3%M+TY|38wH}GHCEKkBk*?o_lyxM zW1#gtN>lhmuR{v>4ces>*H7Bthyp|c+s^oVk~JLO3^VuMN&R?IItsmXkL1_pXtk2) zJTR~E0gnBiygzr7^i;?qY0JEkr-U2BVi7~pnf$(x%1Y!=cuz+x@T;Vh=}k|OwVByM zC0MwyKl2Nr*P$jpWBaD%NNCTekXQ_TX5E9fNw!r4VA^Lk@EwKPim}=XCQ5k$Q!;7j z=}}$tsnkx(d*y8NFNSZ!wb??%7zqP=BKvETXbpmA2NRFpCzF&Uli)BA)F>lyE@OW| z@kipGzpitHT~_sq<#y+Lz3kE@r^Ljscb8)sAQjFQ!A+Ag7WI)e`$*}8Ke2Xi91)^%IvNc*DWJY+cP29{BY|7v(K`o^lAdJkw?)o^=>s5#k7(T- z`Z2Pjgx^x?&$$fXCoXT!Dc500&$l*oe1T8BoGe|6;4i4Ym`DAJX6^UX<${7ZkdzrM z>h<2zy8|0;!NBJGrSj-3tY}&dB%eiR7kdAjP?bM?cAz&zVeozqx^rbsrIMW9!u{&D zUv#xu4H6vHt(^yLJ}1HDh?;#JJI=IxxkqlXIR41m(k~()-n@!UX7L-Xk9dEozPg+022o%Ug%fFh>tHb4yXtc+ zbsd&ajy>|e@{<(hWb^i?w+{LmY3OA(eqB+g%xJ&1n69HyIM&;)C_ta6VtnPuN6=KK+*C%^i; z0Z8_~J~^u@u=f6DUuR{5#P|L2E@xSKEB5Y>1;?2zq-P`KM^3xP6*6x;FJzxUHewY* z)E|u(WIsP(r#O$9pOu;$t?vVDUxHA#;o*&1`qy|7klFvd*#Eq!a>d&LJ>6~yS|#M^ z*d(a;6GX=07dXytnh~0QBHYnn8@9DbSec@7%T_)W%R3gyTaA)vhL3V$BsAqDG({sc zUH?m($HcdcaeeXs558Ad^}Z11)k#bf`Tv~6;2LES0Yd-0#2TaD0)TJ+Ig_~`X;jC( zdZ>}&KpZ!Lc#!J10K~=)Ou*_Vxss)B}Em2$_Qr zAm1GTxDW+L5F%u<1PI%x=nN2rGItK$Y&-*CVC4Q^%tGz}L`aqe2)FUb6+i?n644!y z07coJfK@00`v9ci|MT5z91a4MLzVOh1FS%i<~P73l#eC`5C%o{v49!CzZ{YAfE8#z zS*8H~0RK54YQG^UzkAh%?9~i}A7F!A|VQ2T0b zh=U^G^H;0o&bJOH1Ps}zTMv#0|dH4s|gPW zgt~M#79#-Dfr$V4gg*Y5eIkT(6ac7`P=PoQhZq1_V=6L`4Ju{oEifF4^w5EgP=tpC z{NDhy#|3IaB@Yn*m!O7MKmtsG(u661VgEd88%Jq?W6-?m^gthIDls##4%*O7EO@@h zuO_z#im$T6fmDZp&>_5mAk0P_HXss|CA??rlh|utq{9BQ%HNtmR7h$dh^*0x185AD zyubx?hkCjCDmf&IzcPD4GTmQ?yJgVpxP|ZmO`v?w0zg|RvK0niL6M0VkP@oZH%Z_< zv>st{Kt(8RSrNzsMR=;fd}wNiCXf(HTloy!hf3+!1ExXI7ek;9bOdiDFW6JO>LT_! zg83niVnD{mzs5jiXsy~7^WvpmH!WsI`&aSrwy*8q77lvbm}m+#gU$snRzQ2GOb1&a z3ltUD11F$bxVZocp(w!}SO`t!_X0*j(TET5f7XNH2b6_sYY+$=f+E^bASo2dM*tI{ zId;AQ|7X7pF~CqLttl2L0!7d9z*s1XO#%u*tI#g}^DOwaeoAj3=nsGo5Tw}G#wJJs z{%F8{w&=^wxWsJpab7IqiX>!`km z|E~}d$j@saJme%ELl#G(w+jM zf#zdf2Qopq%{GBKP=vG#w1pzi1E4PyJs$sG^Xi@hxuA^-xdt*r(a0T;7>W*`fMaO? z=8+Z@(Els}0Ucxnm12Vha)Y8>T#y|UX%d1QplJ9V$P$V;$U%Bgl=K1gzh4MRpFsb+ z^-$4(T%f60^dJ&wxj&gft^aFXHc$u<>%aNN_hcg`1`P&=i4F#a76v=s@OAe8nftn% z_kZzF|0Di){KxR$QIQJoPBidiz)f71PgyNbOeVK{_jPx^BpcZu*ejC1r82{JTR|Ub z-f+i$!o*BPgO^srEaG+aOkYdaKUQ0DjLBI04;qXdwRb|={^|pEQOW3hJhGl+?@mU? z|2s}ayq|8-1pDzbb8U~cNBLPq@Ny4pWqmf@i7E9F%`qsBYGvh z?(j(shUcBtH#udzMK-0wi^N1fZxV!?fAo#-WuMA+bIwcK>Jt7}ZIt*T_IheJLtR?E6?io6e0aKeLjXEbfm0OJuq~DjS zM_SI?idnJJ}u4#q-4&>?{joH>M!Y(7C+d}b%V>{f1Ezt)S`H`9rJy+vYYvZ(07~iw>vATGruA7)s@j7x=_mFkA2@Rd*x6-qxwOVg+8R?$$N!`o43G)aXbm)dn^S-*V>~i0 zRWBF$zUF^ArZt#NA1A@_$C&IA=>My|e91{{6E%*_0^uyG1)nx$ia(t5#d3;2o<#je zo82vIn5K&)Y;?xXam}9^3%}i9EDZUHb?0^ID&Ac9F)w1-H2LhzgJb;>ybZ5mn-2Dj%OOde8*o%5~>pOWbzPOW9 zSR9Mj(^7?=IU}o-^t6ql31FmZG(K1I?8M%a9?1j~0Jk_F0^Nrj5qCz5V->0NUrgD; zJJZ3nBrRzAxIsXA;t!BBG-h6r00|os>7Ly30}I6^@)%Z;L2( zJ$sIa=&)seV6nF_XRrHiFP3426+D0Ji)9YhtfP8(A(BBd&(8T~WbwxG*=)Rlfz8Hw z*j~7y!74Vv-I{lOd1r7%%yYMmR!E`e&B2KUe&Sqy@dvxt9cUJZr^+!U`xFbRTQ_Xk zw9d9|!Xd(#ogj5euF##5wsiHYT->G_w;Z`4Ntd%><{Y{3<~AbRlJ_mvEKR{}lB?C= zHfiL6&71%vLR%2pCl)KL7DYhjLCrB2Wh@zqrCtNP4%=8K{`??GpSi+Yi!Z*hc=6}JV6r_+dGn|TQ?-h*LsJ%>% zTbMK1zhu@`&gCR>H{8DVRuQL(E|nGqyF7AHCTm1Ttcn>3QfB#8kR4awNS8Z+R?^22 z`+m|;m&!)EpS zVg>9^z73Z23Em&8%{j-ns#7{I^U8Z>)sm>v+b*c7_Mdow3lQ1giRu*$t=J<-yxaSs zq-eE|92U67jcU+qbFDD*jEU)?qEL$XgXA5G4}seo&RU)ME86Nwg*eib;ntEf^Jh(? zoCBHKWa%es-$B&~TvCWQAZFkfIFL7NbZc`nI-;n*T~4a>eJYiA6!6^Drj~gQeodyVIXf0_o6L8pVP%R=rBdp?{8{zr{E7IiFT)R!j{vomg!4+}~7Mk7Z{N>^9M4 z^ra7n9wWUTefHKksS?I)CU^RQWuG=R?6sCD;_&`e3jZu9!wascj2bY=R8Ok%T6T{vGBl8{AP=qJ9-7u zc6Mm};l*crc|)Z6w{EDB+i~yFMXtMPKPK9?$db&0>;U}=Qw$#c#Z$RlTA%a`1HvC7 zMyFk*rdd1tzasPWk1j^bV5H1q_BPFeo*8j)n?DDm^HcwdwSQwR?dtsf{qZ46kX|rj zM=QT)ft{jG-W$NP@@+`pV+#cB!l+#3ipbBgmIJ=_*AsmEQ|J?76Vo2o+;aU7d`hM- zbD`}X3w+k~MnSo0e~Tf1lmF&J{w4@cjesdVZ7JKAT@H2x@jj>VfGskD&^q^bI=4Fy zO#^M-GtBtcXw%;fGqLLqcv)vxAlMhbZ~%Y&MqcF6J~2(})6ywv+kL~&vb!5i^O2>Q z1F1Xo6M^Vmjrg6@y@x5$SD`E9_|c2_c{Y6=>+KYRmD0JOB=xV~hN+RydQ30bfVx*D z24CezT+J(u@y1gWa=-92q_WfK zgUIHZ{-+Mwh(T?E) znf7B8uTJ#6uifsyaHB`P9>J}4IFU&w4^+I-dR+Q$-vcf@$4bBnvzOr!dQQAs)z($g zpMwQ;a3`H;8WK5Vkz{wPbSS%=U?VDJiEWJt@64TXcgOd==a(;u=l{=t&be)7?py|iHMcvD+g}=E+Ol-X zNM+Z0?I%5#8q{KyzOM8-mv!oSYRRLe`NvLrm-G~^^0283T2uY7U7;)go%Xc*Yi!1C z8#&4IuUo&NH=$~_z-d73zTdg)Zslxf;Z#P0umvd_`oR6*Feb~7> zHb~ENUuDFu*Tv2@w=B0Go*MEhdDSJyuO}{V^hn~%uX6j zsvmjgX$BEm-Y7XlG_t%t2f?0-qE%uQpZ0ydRW9Y)#^Wu@`@6V z%9V|=K?}Y-9%8Zfuft*v|E_Do^_VSJ9WRXf9=qVsX@}VLkNw0> z^Ddu}UByTBPu6@J8{s^8gm;A6w!d|h+ZM}zpW@K)WUtNmNs~3Nym#_GWb{u?_M}Ho zhIF>>QG53q9S*NAN}R1W$iGoxmr(FgMPpv2T}SV}AnSWZ8;%U_);O=J{N*?PlNiF7OzAjmHH?@<*jFpX4jnP z%qS^4u6Ne=f8oz)yxy;^b-W zUUN+bWv<@lA(1vKtsSNgOZI5}e(bpw_}|nV9I5sM=;M8r7zg z$hT`7S^Z7E8-AWqyjbKQP~D)ao}wUb*uqPfHyp$(6s>N3&wb7+;^uC6DbNVtB(hA* z5{;W{mSmckwp@L;$?ieX^3l~!gP#apB8c6loXF2 z33y6Z3Pd5TxoUlu;spX8{H$V|e_FSBlBzhgri=sB6cHgX9KiDyM~F-XJmr+_q6MvW zYJJw?l>(k>AE(VOt;$<`x3yBO&q};RU?|5g5jhE;5AU@Ro#pc7dP8cS6Z|rfs*pFl zcYxSOz*p+yww0yvC-KGYtzl|?X5u*lzH*;(+w-)3fv7C4KTA}$u|G}JE#yxTR|@&l z#c@KuuNeO7FE$kRPZpO6`=^P+g#A;+&xQSdVxF*ninvPHKV8fh_WO#zwDQL89CIdh zWlg3qL}16UGru&TY5H7_otbstZ}GZqp`!Sjk;0MON)Er$yh$$f>Ql#ahT}aFhb6kT zDYtso=vQm|Bx)S5(!I1vG+X3YgErWiCFzReYvyb?tI@)4nUbiT=+x%6#aX-m_l;%t zr>+@!K6v&bM0Hfk*+VC^dFWg=(L1%bFLj%^*BP z<6>8Y_9vT^Eqt4|kv^jHyON6jEpl}K^3mo4k9TWb_oBPsyKXn{`KI81DtJ}UGjUV% z*@Hdj55%4Bf7aR3p5Wg(xcO<~9=AQ;8g8_AUFo~gUV4Syf3h*TWXEdc`hINi#ICbykVAGT@#a%y}tQk;jmUYQOsbT&YumBACUjNvTc~zRDb?+ zKjZVF31=N95z*Acf7xULv57~A5|Hy$VjSL*R~#tk9|RBhi%`l`!XcL27{Cww^uJ)Y zjQ*p>>h!z=|Gyw^nO%S{o1;l6uvoAi^RtKI4+q#q==AKMJtCGxtc#2N*%2B068dZ{ zx%6#mYcz%Gbj8;tzlA?S~uf;1Uo9h+4UICThW@Ff(Df6hjSk7JFr39Je|(6gG4-tf-piC-da&TNPdDg0onOM zN32A?euNcn!#4ploPA&?%@KA*^(BE>tbM8Fa;yTO+)$(#NQ+j3D`%_%Y5`x|sEYnz zkXM9G9E!aC2@7nDC5>lPucUj3 z>Hs4at7#RBWy+vB48ha_+aZc5#*a|Kbn+Kwxq)gng9#-p;<+~2)q=}nx#+Q2^zT-}Qu|V`m5}st*k5TD`1>57{7>&U zK=*^_BA1iMyn_^S>vv;}VC8V*vaCbU+{N&!)rpbb$|IPLRA$rVjh_u7>BlIMPe)Cq zBGM0kuvpFvk(QH`NYiY>hRSgch^#wDiTr)WOezxB^?5(}hH^X%GJ3z1uJPd&vPlcv zFKgiz!8#8~9qVcg?5rA&MupO)y37Tj<0|fi<#UNKxXR_61_NKH(iOBF7zx_n#1f^~ z4Wts>Adq-@8v_BiWKxuVjRewU$i&{m?8ZB0QkiB_M(+X61inWy7fS^u z)RmypUITK#f^FVI!q49|;vo)WX6+jTj|` z%fktCobhcE2^)ivq6j)f@xMm<*O4#X;Ksm((ZCLlQjM4hVmQ{wivSIMS1AG~8H~~N zjdUsONPy3{OJS7-gc7oIV-La!Qcbkpzm$AY-wn$TvkOLf{p5HolF-9pYf0TJJ`9*z z4c(mzxdqTfe$Ye{82QiemC~!Gu#Kb{{Jtf1S{P)oM+xd?_yqa=@KHno3t{}<_Tea_ zekcN`p|TLtu$al+QAG&3l#^!dwfZs#Vi8O;}Fb2<%?*~ zhotp>_zzD7w%R9tkI0LqLN6K5vp6q)|8f! zuJ@$A1H8aN8l7(?GAh+-iByv;w8+!hl$IFl`H$}#b9 ztI#j^^Mv4KFr74|4K7>^qQi11{QF{hLFUD}E9gQ|qo61cMv|gDiW-y)3qf5p-8VYf zqwhw+1#3I_FsJ+a0tsImeanYcUwIkb*F8%hbYLNc!>Jb|swmd^ZE5=uEhK|hYpsG;8dY(-ok zjz29H-bFu*B`nBuHPjNP-wwNKP;Wc5ktd^#nh(i{!O_IbhSQFtOecIE zM+Qe%%vob=JVIC`M#E{BTJPe>qRX?*v}!&U~6v@ay> z^+N~#yDxRjX^L-mhOLLniU@e!A4jO;_-&2zK1M_Qa&Tl;dgH9b$rSek=07_5(YO`( zpCMl+zx=#}4{!RO51ecnnSHoOImN~k3TS9NJsa%fp-8JM5@;Ci zrySCHNJv@9<3tFK6Up==dnMo#u1auwoN)dc`%}qKTmiI-9V2%3b&6WKlAr?AkpfF@ zQC2v2L|Ls@ft7!cvbH{e<5#h(2wj{}1_^1^$w2qubAT9XBcX&pC6I=6ym_n!D83#& zTtk?WN0O#thdR>A{YzrS2bCx-k2L^YX&@mtBz(*nh&hk1m_xIKnkB~il$C$b@sTu{Icm%YHKh6jHjpmxnIvMWP9helj!!R7D~1Pr_yRGOLB}&^Z?h&z zb;BiiZUA2g9juC$o4^Fw2-V{xXQ)ToCqh^4gu5!{B|KMO!dF3S1$4mPBSxQWp%=cw zg_e0AxWq_?ADBvCyq2dzXu07MNFQH(aOj;)#UZ~!?o*(B92p~Jo3(_mf=tqgA-D?H zG?0q4lYySuaFmek9=iJ~Nc_cU2|f@7*mD$7R~n6fC-I#QC~ynhdchGqYIkh@MzH?v zL|Ng~9rX-;o3xg=P*ynsVS+QT7Jya9ow6<#5XRV=Lt3wTP*xir9HR=#ra~5N0%VLA ziI^bXCVGZ%(6>5v9qJwfea39^5tB%&Eh_is3_`bN(Ki?;EDCqzLl;>q|NK}zV+zG* z-tQW0hNymi6cn?W7=l~dw=!nuLx>s=QJGVyJdmV1BEtZP+PIl+t#_nK^Dh)s_YdsL zH7%sq?x1vl1VI#ZIGql#CN1iIA_Pc*?(}4IXT^My>V^!r(1Yk@(df$-KwSk@O=M8B z!bs{&oN=@FwqxW<_yL9+b34H*l4RK;IBY0~zJe<52bHam)|Q15XfV3)<6&(r3F$^t zL!)dN)CngMb#au)BgyS5kjn|kh1na|mP+_sWROAM9{!R2Ht`W;wHLA)#mL<;PQq80 z-ViLxx&AaBv~R+;F7w*HWQBx32sOmP6Q*ti-R0Mgy=}Yz0Wx5g*)xK;t)ZOkGU-S0 zz)UD@-a5*flS$vdx9`;WO&_Xq{;$p;k}0Yvld!`LaN)D<`+6uy50YfwmgVy$R2`I% zMNrQRxmghKX(|PIY~YwnhC5)R@Fy`^KqHIdCuMLfrB^i990+|VM*8V$}haDLo3!1TI@L} zH4mnFXfBLNmpsA}mmxht`tz(SE~cc&Go|QU9zBL@^B|YZ5(zW{t1SDsF@-!LIv9on zbKkF{oT9GGr>|By`5-W3A7#A@+Bi+ytm3(J36;Mi_BQ&q-dyntTFGPZ-B z!(|z~>>}*hN^lX0mkDL??rOL~s#I|drKE^LAZ@xTLntygaL^$D={ey&l|C54R5iuTH4R?Um`H94;fWmjs`(iO(s?A*JzlpGRF~`TLXEOX} za3mNPq+qDu(G3OF!XTN#D9FB9hF{vqkx7`p6XNe`mBEEO>88yt^ZYU%;@^a~V$3@P z>sK=Toi8|=((Rsk#h~|~T?Ti1BOC7_iF>@4!H>M<*hw2OU>D%kT{5_Br|eLuB5{*{ zqwq#ZuE(NK>IwWL_-jx#Lu*yunwl8@W{1c?%#pvK+Ln&&y9x+@RHS6?C zw;tdRhp5Z}k!MKp{~ZR$!X;6a%OPs72?hC<6OK4)w$dD4DX0X%3}aq$=bNL7a>5<6 zhCcf`)*e{la2;db3eO)wvb5193s|N`RnY4KuL5FqjiewyEBHwuogdq63zSZVKZM5m z1QXMMQRX5$bi9JTM{FepHjkkM-q?e-9!@J)Rw{*t|f-k^)* HYRvi%w$9sc delta 43446 zcmY&<18`+c)NP#H*ydzn+qP}nHg9Z9CblM-;KsIX+qN^&Wd51&y;raPeX48q?!CLZ zPoLdg-E~&yOd`jQAR{TuK|;ZUfx&@+>16RIAyIQ^XYs2}vSqgGgMoor|4o>G9|Z|@ z5e6AWNhSpmMHxv6HFZV>NpLXK|LlKV!1R-B#Tep{JdzQSu-HFh(UaX&v2q?_;qPP7 z<$_?W?_KX)!NLB2OTvF!S|Ne_2d|X>Ao&Y8?SH5Q&hZ~cf;0VxZQyMG;SD(J|J6y8 znIQqm3J~!B>ADbH|6vM*z<;<1!Sf%YLh}BH3XshIuptPN77F=qMwKT{A{!P03~T}_ zxfPZII05yq`(R-IivCIbcLTKrVay1nTGc{r)bbFLpnH>w`LY&$79t`(*5(CxoXw#} z)Pb)ZnOhDVpX^K@;GfhZ4I2{83?7#fc|1RFI;gC6KHh#GP=R#@uUNp1-;Rft;4Z0P z7N(HY-WpHUkQjvxFiVSJ!wOKKW0L@VYb!K-@+eix(5D3>@O+gCobrmkL7}9T?-0TT z)6-^kDvb;9a_sA%TJCvGhw#%wXdF^QYDt<^9Qsd0MDNmzmGX0EaKfkXSfPi;@!RZ< zqDXDHL;cb0Jo$b}mu^9oa!-d7AT_rag30yaJ296ljX6o*B3#8dY*|>PQzHaKUu_eJ zgQ9hd#ZoJ!iNTK7SNfXk$FAHND~svyd=|SaTVg$&pQM*yq5SZZyewZ8?!F!MFb?(5 z9Pa%SXkKulek2YbPjez9I!kpLzKMJ2j_67s@qK5$yGN7?)+cq~IS$DlF+F*U^asHp zj7GzE>Q}4vnx3;~)NtvyRWTNz{1^T+;>7CL_3q-ITtZ6oHeDM=mv_NYw+2O4npruy zR4!sa71E-&B!TlK`T>YnGdQ^AJ}CSdkiR$R=eVFK!1fg;d?r{oS@nY?24b$5bhaZZ z_Ufy&b`$n0s%~_vMW$|vH@Wm%Hf#OCP>@La%mx%TcIr1Hs3Mdcx*$8KBmA1TTl`_V zO}3^39N(Gjf2*!EzJd#!6x_l7zi@>E`xl@h@N@qK5*9)wB>cZXV){%Ao`FgiK7_za zb^=F87Dj+c7gUABZh%L*g8I+(4MPIrznJ?(3bHUF{X54zk`=HSfN&oFg&NquqJPq* z5Aer)dIH}3$~I4%g8J^vXw~aX5gbGn`YzA6rBA<@MzC@k_c=h7a4rd)JL$&(3?7 zPtVTHlpxUWF=+&B*W0Iopu0C+-M@{%KcS}Vg^!E+h1TdJuY6@w{C8hGa8T&(C_mFT zx4eh>Nh|OzBF3q`5SGnn0xA53OR#fFY1`#s=guJTIgj8^@J+`ZI!!7Kj@nj+D_iPF%CNei+E(UypE|f&xI7li zQgXSW{F7w`idsPC`AAA+`KLURu`Q`uXa@e|B5G+&CjR&$b7_KEMOgWse7v#kSGD2{ z{3)P%xm-${L>uk_4B7B~VNo_N)v#Bn*U+6m4;jkGK2$fq3KqszExwU!v`j_DB@B^K zQE0|Kda8fkIW|?ajU$Ue4k!lCpJjo<(&cHbBI5wv&A>E|AnVqNk!1%7atK00y=_pG z%l=R=R^OB*y~;Bhzgn*{hQiS$MtdD8AqvRbqD`5mh7zUrTH8;dcwj~M>dZ?rtvrqLEg6#9oMZ z(R#M;6}09d)31xTK$18f4tTxZ3JCh=qj0hO%+_#;CCD?;$YarH)4&pP9x&0|W8UGR z4;+o$&<@$id_yC--W^D6`%v24R|I}cQUs1KyW{9BY{_4lo)eb_4lmARwx^fBtGo0N zY@1fT>VJeF9i`iwpp@J-EXFy1j|#za+^*2rDDMgO*^ zNOUL9zl)(oF56ep_>jd)B(v5C4kFIF`V}$Yi%aH}d+jtY21ky)0!u*G84uj9>Jyeo z_L7s3-kAkOl4HqDJwOz1s)so~I(stL4!2;NNV`%PnI-p_%7DO9rv=7vZY4^|A4yX6 zmucDF)S)aqYel3^>sE1Q?Xn28E($HSmjc_>8o9M^p7PI;USHPR%f**p`_FoR3ksl` z-1^E*cO$RDLEAk^=Mt}>7ZY$L3!I`nT$W>hBb+j2e#k`zihx`=$;YaT4P$q)Hu(WbYCZJq1gAh@HkIJZM zGq0UL9>DK2RL)CYB2 z!NWhVs!g6_3Arlq<&omIbkMP|m}_yo+=8_yN0iPl+@e?htqi-bN(VL4yJCp?WCt*b z75)urIwAO7z3Qzz`wu`Z`sbl4*X9Yt>R-97H6cfBO@gRLc+zrojQ|up*TMf-Iqw&E&vzJj!lRGy9OCHiZnO zyXrY^mg3XHnT0CQv8iROY`De&d12=VoDmkR##~X%2#u}Q5C&#e<^GC!Om4vFSRZY0U5)_vG zrYEJcuf(FC3<=Ox%U;&3vHWPmq|Y-Iqp{ZK&H_gA)CTw{R*ye*##dCVySk*HT+|cK z?xMw22+2BkNoNjiX2pGO4x^(}iAI-4>JwPTklcu|)@*#d$V7%L4p;iX&|GK5Sxr%H zYTA*E+Tb53Gz7-B65%dD25Mu^y-4Ki zxR~epX!O`PcxGdkjay;^5ILpcehGO^q^S?Ar73z@I1$V{K` zZPckMf9A}r46SP-vlmy+8t61*C9P7XqI9j(xv$fMQXN9n;2-0|x#%ox3On(74wZ~% zG(;Y)ahl*zV9t$lWH=a-y2z{w9;%^Zn3Ov;M!Xf&ueQn`TV8=Vemo)bgH)Uo~hX1lv}AW z6V??)YT_YmY;wp|?AvI3M63iLG1#Rqqc5y_iq{*_-oN)J9Y&Wv!~tDo&p`2$z-n93 zL|;{j=-9JX{9Ss~{sQ%ghUUf7Y;w)?E9=NC2U<_j11Ltoc>0f2j&0-xUJ4cuFZ(?Y z%dpMy^JBP;3OBEnk`%{Zvd$Y7(ObE+vd7n+*rRc%6;G%-0i>dWIZ|f!r$6FR?JpWf zym*7Y=E1mxjGMVJOjj%O;Q`n}Z{?VL9K30S;tY z)qdF@0evwQ>o3!s8t8A9G0_`ATF_s7sTVgf=Lpu*F6tQ3ZFEJEXVG=A{M75x7p-l( zq!PYq#Z+wtD%q+H{d(W>=sQ;K5}X-%XWcp&gD}%UL`sOZ8ZG%TWiz|02jrGDm54X(@D)ZL3SfQf{LI)rJnTy!ASZ zqkCe#(BQvUMT+JlUs+qX0>LUzucpvDe?|kNereo6iAwO{ymNs1bT#~Y?LW(-QHFZr zs_N^m^i~#TV=Fc8oR064C_l+RC%PW%BG?A0LclmffdTh67^JSUF>Um z&n6W$lHo-Y9>>SM`z`HrLuE{H{IAIh!&9(<`0A>XQ*7GQ6%H}<5I)`bX@ppgezo8)s|4o&>_sTOIZ;%V`v|b4OCdJucF@@pxKm4=4(H%G!ft|bES!A(veC6QKpX_Rq$&h(`7hK=X~>0 z7|a9?V`(Vl4U1N%{It7AES)w#r!SqhJSQyGWI3|1pSEemnuUVr^+#tY18);Mx#j5?AILOWEQo_NxJkCP7a15&`EO!aS}x_O+@y9fu2+ zn<%)7tea4q5a0u8;v|r5Ly>vnbMLQVxch-WURyYWZ#4SF$t=9NPIN=N#{on`#P}U2 z`D7>)4v4{9dm_V#t0aP(dE_a;^-Qrjoo;*2dRI!xl&z6R%p z6tU$AEbXQ^qRK^9O$46@8bg?VT0p1I;#As7pb zQ{=H`6<39{h|^cxqD=XBjC|DbjpV&><>iDZLKDrCbfeRy)ZZ1cZv6awE&?=5U6u`| zqQIM7l^jZbdW)F!6sO5>Z>iLu2ovdyii!&orxI$A+597iWGS15a&gJOZS}JJw-KE}zi&p_vkvqvR1{>|(H{y+S-OW#E)um6EmZ9Be!E&}&7xtvlG6UIuSF*FzkA&>4!1(Vk^*}~7 zzNBwrY@KlxUwf)HAPj|9Y9sTo4sb&7DU2#$e2M#$R@L?5*{YzDVkTd3qgMNz9q^*2HN`6@W=#@y0u~{YdSC+&1s@1G#d(AwpMy7{nT|Dt?6;E#j zr1sX({)Q#}%$aanUHoO&_lI-^tWT2TvNQAyJKoe{`{HHe6L&MUzIcNgV^5$=?{tM_ za*Tb;rLn(%4xsCTW19DBjR$5b$Jf62#^r}oY05!$qI!e8t0(d=R!f47GTuQJFYZ!H ztw{g1BlZ%1&eC$bKNgDVgBN%Y=?h_6XUS0xi-d>YFbOZF8Bu!brPU3Wq0jm` zEAn=pkedZ)Mr?54*nYh6%69^DXg_=CNi37)FYPn&?tL9F=~?!J5MMhDoC?-{pl0hS zfD5SB`Je6cNS-^uk*&!0OJw9&+}8{sR;NM1p*^F!iEV0A+$jD!f#G};?F%{!7&h0R zwNcB#O`L9L4$R&n7e!1#DhCc$T22|BmaembR zccU7n7ry+ODv8TN>#;ZI$x!cv?n`ISsM3D-0BE*bM)o1@G{y%Ee+Ry;UCq)bzI

zY8h-CHV`zhg8k&XL%fpj5WSMOnuvx{sx+K5vW9^)H%$uPGd9*?ZieNd>6#p7x>)7% zC%z-MLWN_RZ~1yfI`{^>a6gB#C9J7CSz08N!6( z+aETTD;KAhF4Ecib(9Ja7_Iq}k0n1*1UiMW#2MKFs0;`eXnKrLmY{U>1Gk@b+1LRQ zkN8gHMiCf{J|%0LRh(%A8GAw8q2_CGJG9YS(zP`-M1&rl$N4+$j5-*bgMvj@y?I!O zZyrp3AN?uWKc<1U$*h8AEU8Wtwr^z%Y=2B8)|sBXwOdMm(?4*Wi+Cz`4Ltv{+gSLm zBQq`Tl=oU8L`B}aO^SF zIVFG3MdT&g;@t44@H$qNkv-lyV5{Y1JA6sx*O;^>QGLv5*wJYmLDGGO^Tb?F#MQhe)cM(vSDDGvF)+o=}`@$8ge~S;-#-bahT6^dr4O zlgowt!0uaDGb@Hsn`b>+$cg3fkR&*u?E+PBE32%1}obyM3!H%#YlhUciJ~*u)F5?P0a;96i9#=n=?qpS zMa;L`!W*(lj%k%st;~zDEfnG~*`?y^$WOSI-gkKynWs92krRG6v?d zdcE?WdYCcA%#HH`!w2`R#msRiBSazZ@oa8W4~Loh9Ep}LTVp9h9Dl%4K#zwv;d{VA z4{?MPbx)=z_r(5D>bQzamf_@^GqmtIe`*1!i8wYlhFi=GeFTAU>=hY#9sO8j;Wb&M zIYVlyYBSveP`y?8Pb~-cNeIFx zQur;J_pXpK1c?})KLp0ET81R~ojedf*3Oz9W*5#rxMtTBKatOxeH(7Xn9F0Nc#%p8 zy#=R?%Bc9$57KQf0H255vo=b;Sm=1qdC?gW@12`<7GNHQQI|e@K(|0zqpZg?SW(bFkpi32TeM zg2K(S6}4lX>oAtTBG|dIE^~x=RFP{ok!vC~ML{lOB2=>CT?qEK@1OzgGRT+F`G){@ z72zJLtji|-Z&l>Ws!||c{o^o>ss60IxF>Lv-wSAVZRE@4t^I%ta|Am{^t4%0qeDK^ z+~cSwbS1C;EE|(4*R?N(k2)NpH01zN*i&M^mthc%6YUl8gaMI8+-DQdeh zfPBWZF8~+%u=IiH+(45hvrvp>e*`-b*5%Z&rY&%}5sn0HJC|Gx&D8KFX1oi={`L*< ziO370x@n0XjO8x~b}p>TWc|MD;FU@I85o+V**Ucp44^D?kQd-W02YLV>pBQ;HVCL( z?$`YuMxim9&Ik*#+&qnH0&ww}!@s^rOs@U9jwZQTaURGfRj$45xJ)jC?U+n%{kkS5xoL4tskPH?z3qfG&V%jf zE!o=pzN3ZKD9(C1bK?QdzDP5_i=2naPEAx&#~Cwh=dG?I8m=QgJNE1!-g17|%Hpc9 zr=E2Xbkei{QF?8&%onweF*yjqaz{D%+qCr>6OheLftdcMV|@X&c_)}E+%2O$DENB4 zGiF)LCeL8Ymhzl)I6qcOh$84BarW z7!t8|{AZKZ8Y!Nw?JD`-_xJ&H-wy?Z7%v1{3lPMC9C-TH%&oQaM=ni@bZMeY=d0Pm zsV$;~AK-}JTSUq`i7dzYjN3kFau{wxVviVCX>Ni^#`F6y?gd}EKA=Ce1f#Z&9O=_h z_SD;8PbMPkRIUdejsgdSv#2|-QP91VqpEu!xg`upP>x#mG&HGukZL$ZeXzI=yrRC> z63SHp@vRor_whT^5Km0GV^)$}j`|f};JoGqQel1$UfjWCK{*%Hpm8;P#G6M^;YL&h zLWWXP3tkhP%KR+e)w=7T4NOcBcn2b#;6-G~ttznBiGB!fnZJJNi)aF?s&ffd0JZ8b^W1Gz+MUA zUiq8eOmHcTg6i%iaG8uEWbU!bQfm4MU$f?7O46X}OgK@ThV|eydI>wRfV~VbR0k+` zocmMjp0G!HxF!2nw4b9#=gXF;@Sj}}cBsUZ0cU_Wq$$Rl!U3#Qc%mB6B#i*rhE@V_ z4S{bJy~Z~9N~M(-eupLgHj7$cuN>RpL}hH#snEq2%+q!6qU{!mp*Goj6F2;3{>)G1 zMKISfrhm%4odUjP{tQ;-#RSt)Pvpt*#8+tF*Q>GjO6BDap30n63!zPKPRZL)X_QNO zk54OsEKTU?@G`ukb$pA#nQChlE8GuQbjwy0NF45`Aal)j)V`B)h*PTH!>)ufd)7yN z$vNZ~rRZ05%bZ)JvPuvhpt5Rob}SJpMf)HdpBmBG#hd}|Q%(jyv^YoMF!CFmIAY5i zS7@F0ZR7FJ74!GemGVD31)soV{d2upwQi)Nd!h{LKgeu{9ktTkuyRL2#wGqh63sCb z)Z9vAeY6xfD|E*f-gMU7_%M5kKC%f1 z1t_0k!=`yAY;|)NiECe~|0W=`ju(D0SAPF!K7Mfv74(1?S}Nob`&B1_SJIWjV6->N zmfD^pcbHJIAEP%I@lgIkmtzD`dN4msb`{N4SA>94-0v+ZsUW94iDY_3=KJ>p$!l`b zz=cU^W>>?&F9dY^pKQzduChLvW7@!RiUCUUKN^_CY;pF)9=}8eMyr9F2n_lMci7z4 z>th(DG{4sy3#k;|ea9P{#Y!avh{AVjRfGnDW?Y|6baykU`Fo16R4HOLH-tG=Uk6GJ zvTJ*ee3=@1_gXD_taYE|+CIo!QaWx;`EvSf#JUB*%K1hT1t%H`h1rSl{eDd4r@cyM$nBF@dMxb7Bk zFR7+*bYdn5scphE!2~Hu&e^Q+*IJST#3h)zDXiYQG?D2kEVr;0^qqz3y&dD+FX^nr zf`zR4bRz>Q77%zhfK{!`sD)ITh@?E3-+qg%3h8qTEDJekTvNa^mxUa3t|>s84RRsQ z5K}EqrX|gDAXclI81L1_jVQ#F`BWXr6NxMstSJ`ZkoFs|wZAK*dbG5)GuHpQo7Y069Q>2&s;R*WI=pbvR6oorg>me0( z4E7Q{{hpb_7ZW}ufLU`5(@k_6TTs7JO+$T!VP-wPIJ1UWZaKv|l&~*#9E>$RZK-i(Be@}{%vH=Go1P45%%e-R;6>8h^AlP@_nfU58ye$bk=kM%Gc zA`II#!&BC3(p9N?fQkM{qh&P_1x;C}Xb1|k%{!R1{QAaS0e~!wGG5D%<6prBY(|)O zEcZz6x%K)t%Ar4heiM=GxVcr=0Daysp@R;}j+qloNh0oCNa6)e_^Hi8OuiqXPMD;T z(@W`;YRl5+*AoKGc&1%Lj=oONq%E*ck8)F)bXsr0uW#E9Ibe2qSDjY3wH%bKI&;Nb z#YgPWPQMbMx2LfK)({MF#YNtW!mgvovclrpPfZp*HXRdW63wY*Ge~xh zY{s8_+{R4?H*^)r%)ik9JamRmzMt~FzhEn`Bk-kGLQ{d|1lJ1b$5=@?!&RiZMo7!b!E+BsAfUjjHozc3XP6fR9?ntf|(_5er2%ol+gB z3B(DkG#%{tBe^u5G*-EA2`d(7nSMcAC7T8T3R@)_ZM(3NDh`}PnNd5HL$0M+ho+CT zFwu5OvsYlmO%p|2mlrai_)lxTy$H=($ac14>-0i`f;?mDAG#ZU4hG3B@e)xqrvkl4*;HR1b@Kc*a zAEyC6qgkp=qG9vazi0BzKTHz6LQV$Ips=2(5}RHtwe{vGy+R%br?jx3ly>I&Q13otNX}nii5Fz2)vxrKZv`Bxej;s1&O}_ zBS~&EJ^+FJGlxufbb;i5h-z+OU-MrOYR2R`>LS;-C#G(6`y<(}i|pd6;hz~tS7XO} zqCR`V;jiQ5F@%+Vo)2azmi7BPX-jV%-rGI83r%%TN=nrH>a`<(;)K zhb$Gal`%`SjJQssfbJxV4ISG<0<@9#TDl?a4ezq-8bgwO3p4jht_A3fqK{tJXIq$z z9h>WXuei<=6WIC=Jb7<#H}vTGv-Bsy_h#yskoWypu$)*K5`Bc4S7Vfq??V@c=uWjS zSg}BhJ16?jEd-~2VC{<%<7d_ou+BSn2-x7AJ;X=<89CHJA2_fN47k;M$%PGM>Lc;5 zMg6-y6MEefcoD+B@!S2=Rf{8d+lO~+MFQ~!LBxQdyf7%RztKpxs-PHY7^I*gr%Mp|9U>N)yY*?_CO;{<>@GtJ(C{^sd{UuZcZcoZ~GsJ34`6+pv)PqHP9+>SrDn6kG^pw%>*fv)6% zNSO&9JUg@t-OO&VL&6%I-m)Y>}V-H z9~0Nt${xWOum$ntc$K!hnu{(hdYiY$3w{B)J62TnM$>B0j+xWrtEesprn4$O*}~I@ zR+JLB_$BL_+P>9?<&B>U0OH**g{is5A=@j4kiZ%?#d0|_XQMv)0R|4a(iFZ+DV$qG zHzW%{^m6q$LKmE-H0}ahU3cv(wI;~9DBjtQ;@;I_3dtgt1?^@Q{KQgD@<}^wjwof* zdeA0Xe5C=#fuBZ|(b_~A2Ol~b1!tMH3Zvfe_eJd#$=c~{s<}IJP@7cYc2uIc4;&=Y zaj)W!qDK+AuNn+k8c#@)$>Q`f{y75Hw~|Xh^?dx;a{R>CkO&P$x4{}5-X%`VcW1SG zb9Rn2FTI;XPAZ(teVZvI9i4m?`V&fcA%eM+;~LNmby_y~(YWFLbrYqBftU(?vyB1* z`3aGI#!}|mdutu&&oR%($z=pQJcoWONE2s-@1nnA)&a~eMl`EL5TkZqb#RUd>F6g@=N-tfymCe1{1QQE2c$oT93X=Q0(hZbXeMC62f??*h!%*xBNp_dc+`cl z+Izl*Sx!be=$i89Z=x}}Z{Qpg_WLxJB>%tw3rX23DnD`Ks|ZhPxO*Jku(i4bR(tw+ zF5W*&G$RT8v5>hNHUvxG`C)ZE_qd2-FG$o#5l>sE>EIsHpyy3nM5$)^J^ecmJMZwU zRRa~xkC1AF6CwLsY6)KX zwjadn1#$LAGce|t+H#w@G|%e&z)ek?hch{OYcvnNlrybENmnGdZzlMHUk6(Dc<=&Y zlt!81D-Z|hCAH&3)FT3FcS1MJJ29Upyzu~0eXWQtp3=3_^{vS4c<#%p^pv|nh{+&@ z;PXCYJf=u0YMIHc2e{DJZFt%&eD#s!^0QLo^a^BHj`P_v$(T8u2szq5U^pBwURy0M z3U(?FfWBw^6}tpG<8q4CafFCnnbi~B=(68&ocy^VDo(&VJg&=mG&F$q`5-7R^foAt z?@ks^P?6d>Y)A^Ph9uJb1;T$Ww4=3FFG6X+ir*Uxr#fxVY40yp6@km|79a1|ZWAj% z9Lm@&^~y}`3w|s+AGN*(uqFU1sw$#sYFB$UHue(K ztSD|aP!Ul(^oXRoEp4sP7tMXsyBVKi3F;ny`oYo=x)zPIsjyH*O#jVZN_dC0~>fVn|$(vuX1ZQnE#l?kpQI8~K!;igrbu&2=I!Ua85 zseJ7(BPm2Mg>gk$%r+@EM|qv=qHC+r7czn3qs|G9;KWV|V(3V!^Ng62wKq@C4r#;G zQ$D=3WtX|r(rLB_dTym~Szyp*La-ku@MVH0Gk>A(9&Y?vhWkiHwk^-56;!cY1f&6YLsSn0wmtuHX)xc{&f>b#tDo>)q2j(EHmLtWr8U81f&y^M#0VVXCiKRSjzUhSbif zPxPW$bE`dpx2=5JiF}so8(GqW>fxigY*I{m3H~hGb`_GGlGMc?g~O4rrrx{<=2r+| z7_PTWwa$4Nhl`Gewt5@u{Q&`f&5@BW-_RT{kbY%D1Fc$HuIiVoKLv=c)Zx95JRd#1 zJR&;YXqvZgONh1%8nf16eEkLt9K`(A+cyT9wX2|kEP5cTTMx75nT}1N0oPT?6^Ias zRMMADNZ}i_3jy1%vq!VeGcfbcvsJUsgXLdgPl~!uybyR!TeLqxT)E+KzkX=sv2I_K z2k-_Yb#Bv=b;*g1fRnInI+C6hbM;zM2QxT-V_$O*=?Otu$Od<81oItD4yeQ>UGyd# zRGdEsUQL=Up~ClSes>7lP+S~5BQ(!6x%5Pg zN0!n&n$onkC>%CZHl^Yc_wdAmQcXknF^LOsd|}=+H8C(X@j(R54sh0@K@c#2JskG( z^VBBt)YCRKv`;53jpXX2uIm^mc{n^K9U5>_7<12!`@>Oz`P1opayGQ~L zBAg=m=;??0bsHZ&sZofanaE1}q_Ps(LytN`= zlONGhvEqN9S1k_ zR8LC{N2?{VVEw&*S`%p3M7GNNFPa^IOIjRFomwZ}`ij~Hd=GPv8n#M!zRC+~)TwZd zdH6#?D^0AwV@g^Z`fp5s4L~A;Xm48T+J};sLT{DPDoaKR=BLluFh?DLjG&jp0VE;B zM9ex<&=<|dq}{E5b)<+!D#ishcihdN${w^e)^vzUgo!;&O7yngGydvWb-ppZitV-I zAw+KG8V*)Z0#cfIR+>wmnnH!bhOQ>5^$3$7(w#PeSb`{jUNK#_cT>NJx>0_{_%LgvJ#9bfHt>!!znktphSeQ)dEIs zn4-`NI*nYL)buGYyjAsdZ~aIiBV-@PFV)}Rq0F-afPzqBM!Lsaiog42$Db!;zKU}X z_yRYx4^|bTpW0G0ua9A3@nP-!kaY8{oRu~5W&xTtN(ZKLCCxLoGyrH>R%cIqiEUp+ zIU8!Aa#nBzduM7(wJi+-^f)W3?0^!IT`U#mt$6_p(oD7m4XFT%63h=o_APKJG4L}N z()TQO|ACKdB68IOkT1F(;$$CQgQ9N!gBy!6(eoSg0 z;j-0kCt^;11o46{8oavsZV0 zh+Q1cn)=G>Jm#|MN{e*TlyX~ZVb?gVNv`Zl*qkQ|tc^KF?zi=a&o6B=&C}iqinT_5 z3O0HatHKSV*q7C&i7;+jMT#6;au(NzY>Bbk^DOMm{Q_ZxGvJ(v8*FBZsTlQ_EAR~L zi!~MckRIHnK#N?FfY`>Ad1;#6H7Fb)5r^N#fJGhpsu@M2|D}55Xdi}Oig57T3v)FF z*M9gu`RW(PeoYrRCM=Sni6N6t(ajLPp%Lfw7bx2OWNyX;V^x26s-Y@xWq*7p%$7Zq zJ01Qnf{`sTOuGU5u`emD2>IAvyAAt5xfcW%s&2aL;hh*J0=t92veK;~gq^~H06?eo z`h)upb@+;mU$CVEUhZ<&t${8Ru{d1sFX?1wp0#eJES#03=Px#b_7qpJKVHwAk4rY< z;92jDD1b`3Jc{4r-DIGNDdSg+CaGf$(y`Ta6c% zkFaIB9Rz&iq@8!c6z|=VUu5UO!29>#O-)Uy9;uI&RUrHI^Wgk$SUVn`5BipYk8iS_ zj2hidJ;s}w>j`3h_%JX1cKH1fg}HyKn2|OR2YkCNGb7}X2H?9DvLYrB#W;+l4Vf7Q ziOi|@h$eF+afEpkiv9Y?uS0EtE<*I!D82A^q#$&ZKHod$#we)*1H$mDeHC2P#6FFE zTygPI(%1^kzeFs+ctz!@mZG^~M84jl?`wtljRiDDKKk+z|3Zt^%J9Bgv;6O>ki}N| zbo}%_p#eI{ya0~$+nwh2>$c0Hb&-P2_)X!T<>__X7UvWouWa6uw7e_}I(Y-ru9d~# zpkJBolb^p!4X59N%C%|*to9vW~;~;3^1^H8Za>8WMyoej-IC>IT3hruJ%{+Rs=un8 zor8g`m%~*N_R)L(`?meqAj;e8`-{bO*Uh%u49~C2U-y$EC;~uP@mNA=#rBXbUM0_a z7Ji9?a$Y63@5w*;XtJ$F59MtVmb}xFtsV$5>u-~=(kgm@rIAX5-Nx#GP+J?67;OHT%d63+909x@dZoPSQM_9!R!^N=yiCmNGfi#tcLzHyzEb8o zEx*teF|aSWnd7U=t1H*ft8B~cLG~3+=B`WjzpfsAcmw)86S=SfP#fSDe+|`}>-tNl zRn;|S^XFZ97qoVj!pOyg?$_hO%&2-(DH`lOnLrvphq5Je+A;vtRQq+cgXNF0mZ}9z zbh4hBhBX|(Xp2B5(FL4%CZ(16n&q-Jm)W+k-z?5Wg7L(C(OxHVerEoiunLDQJb<^f zv+OJ}qb_-hn0e>uVPvRw;~?=d%#2K_YNkiD_xm8x&#JyPbPPLx6}K}}xF5DHJBT9? zg+OEV11D?$$YC$r&YAr#npq1;v+ioBxH z;q`IKTU-YRvn*4Qp~)?lM6E+}_{%rt9}_qO37~6SWL81w)Y%<$c=+~C++oAm^pFH? z`b&<`s`%r~E#q%Ap5ot$Y$WF@p2ErA$bjQ<8FS2E&GyOBImq)Q-wFKR!w!gwz(%U0 zR)a;c;Kp79p0?_oy%5Fajc|4e!B6c~Axss#^s@0-`nqeD;*14aCgME8bS0qBTKlLQ zk-DQ$8Z4nWOFgK2%T_IU2UgM6n+-Zer(mZttklfn<=@5n!g?)yA;lv~nhK3)AAzy$ zLuLCT4T$-bWXHm&aj~$>XLmr$wK^Spw;@!Rv{x~-3U$`>f-!@4U(egs`e~B&*+Ym!%}^6$oiUzpev7{oe;#ty z`{(D9|M>ZYSX`N^tyxy~9wA<_2X;N&dafW8-jpUUW}2|ZnsU`XGUhccK0c5jiOj8_ z2kwiZV(JpXQWRxUQ*JE*h9CSw%cQ3A{#>^+DMwz_D3sUWor%vJ@T6%MNC>i{lJ_!W z$FzrEa@t5x9&Nl#o)RWvQpj7DyeqsC{t6!~{gK-(;FmFsyb=9%jTnn0qd2UEj^o6Fp7e_Y(WUl|xjmz|YDT0hHHWw55s;=gfD&Yc`?)!pwJ$B-G8_4P9X z6ffTpfhRVsOL~dW+vz&c48RII7~S`Fh5C|}cTib(9UDIQsx-#jb^phhu5#}zokinM zI!y9eT)667W>PMAPqe)*mOWA=1p0y^6aIM*i+MkFXS0FpRn+trbPe$0Q61U~=1ZY5 z&L$n(+GbS$0Q(ch81qrKjJiC9ln4&i1}_^S3tB4$bt^$fsH!UmY!Ud6y>Vk^Of@or zEXSlVfnH@+dHCqlv^`}EDKN$4`dksvqH90%hZNnYj6p{crzKPe`{A1`@Mi#tv#;0| zT2GrGsfTfgjHWO`ftflJ%N0E7{m-eEgMc$7G`2z!hZ zcEs7lQpEj38=Aj+GjN!L^t4@yhYrK?1lc~ZOBJ4xr28G8e^hBmXHq+nb!yCdy}21I zDqETvo8yI4$l;dlgB@NZH2;VM|ARbG@qmQj1LKp1Rw6V%eGKPCA{02xg!kbVxVCF_ zO9%5u6*rq*6r~>CyAyQChI8wj_9E)R96YJZ_M#9d zr~Ijy)q?aX(1Rt#4$9(uLHW`}^^yn^5M3Q6L?od=`tm32BbhxNsoNU1pQwT;^bdX1 zA5pJhEd(RH+f)fXuN0b>18jPO+QHo(_#iV$H2VI~K41)9?RtE@sz7ds@LO5j_UV+!Z;?D9D;S%P`_vE zjf;y>Lx}&`=VJeC>AQJ=g#l9A|B-6lhri1a8{I>K(9>LtCs6xZD>d|$=Uocs>gRi= z^g$w$pgfSvObH+#I9=o#7qe8Rx^AKIBDms=Dg=YD91Jm4I+uTtx(6riV9G7nxM z6sr6{F}e=JMFuGoiOd^}Y5u==@neKCl|Xh~^^onc8ERd#lh0A(uR zjFD0htQj_p`9Dm(1y~&2?>5|BoT7!|6nA%bcXxL$?y?1nyDm`N9g4eKi@Uo^p?E3w z@pS*c_xc7d_THQ%C&|efmLZc#YdvOmCvj}$_TP+`vZ=I-gcm z9uPuS^rbZv8zbD<2J|=f)QG=X(BgDXsdC-{x3H^`7?IRMqXKRJbs*AjiGahCu(z7u>_Aern76$v`?9J z@3;HOin=%Jk>e9SDLt8t)Skm#PWH*Kag@mLyy%)CkUeOyUx9ATkLZ*F*xh#r^5vC9 zIhqxUIF>|d!+pGerrkA${Q!FCoE7J1iw`*Mm zRSbX7Xsl0;N-w8L9P$;Zm%My`Q=vNOr`@i0Z;FD*$6d|K%u0u8A}+s?a`PkAK6InR;hQt()kc#weDtpTERFTCY`?*0B*;V$?XF)VGBHfZCT5a7M^x-2 z*(=Y2qSJT`WDn+57SlcDJY7xpQpIf~`Qj%}5QV9vd7vOqvAJ0nrCvLcP`XYqsp>&o zn{B(7@33+q)aH}={pn*%MhF5@!4DHX^0`J80nxpt)mH~*6t28K&mYT}?K`hOT6QGr zAXZ9wqaie8{CKQ!=q}TmsLM|prh%{8g)R z!$c)vPhu>g3#SgtbXo5mVHj*Wsi}Lc`1OJ}A4i%RMYO`SI~tsA0dgj~^vB^o@@Z(b zt;@X2=b(Sr7Wi2_M~Z8D{7d3EmoX>YvnseCr_NRmj=H^QAZ1prl~Ibwrn3-?RWWJ! zvjU&k3M8i^wBPRXccgU0!)o(eE~kjeGJH8z@Hk$ELZchOJk3cI1LDoc!H(#zNOX48 z^DfEecm4J*(^YQx7A8tq{)83FZhXX9N8KWxQ&|nD`kIS<7CY7TI*N`+u=)NWPht-);iO`e#~d?6tTK zd4Rz8GX(89dYsayKT)RmLt(XyzxYlA`UXo#7qfi7I2E-dSiar76g~VyC$H6YO*dVS zPq+vr{ivwUKg`JE@ZBrW6GeQNhOjUlN_}G|G!px6np6ZjHP%&ZGpb03luizOfOQaC z6x=*D2hd$$6&{@r-5o@s{c9}|(iBHoQVptNOly#!okRH_KAbrfePXOUWc=H}Q3FxX8wP$^~J^ z=)zzZMgiHlZ6vv4G;0uQ(+zive^3{yAJNn$mY|0!`tv(q_up!YN;AY~hh;6JwDxd; zzih@TseYO9iWOL~`)C#r1xOECgc*YXVb(#CLVw{y%cot#OcE4h0tj9oBVZ=JC~r;z zCV$D+$qN-7rf_xS(%(spn$~A-&A!`z0qCL*WU1z9{@pp3x zIiDabj4`F*=v4Q`$l6+fEfc-5@%LTxSvx;9J^^wMYA}&0NFqC5=hS%BHV?B~ke((sG0Fa1S`s<=}8jAt?ginDawXpD$KwOkh zfq{~lcb-%Iez*dCi!%j&Py$1qvq?|H_6v7}m4tFa!5n-5mIy=Ot=|@C32KcgI8L-H zJ0NggKci1;hVJL^!KK8F+~1F5*qq?sl`mhdZmIYyHt*`GC?@tgO0 z20)D|m6>CPVQ+rVMd_;^jEbZ=WRA@SpObfMRNX%CUi}pPR?-p3)*<7#Ty|~0 z1{`Dz4CCB ztREY_`3)aMkRN$za|--H;MzqB{8#@N0&l9IacIXxoL6B`LkD&}N{FS+B>-{tM_%!O zB67X#*_e~1gUvA@vXp#UX&MUC6|L_#-93f4*;kh`ePn^~?=V3Y6a+ z8I8WW5%@$y;%@hAePBi8MyX<#8zmtxUsDC~G*$aGlC#OiU0+evYipO=ovETz>mw|bptysTKeMERQgXh{ zrHP6X;@}*|Ltlf9NODPSxhrJ|V+yq{rZ5NqKr3*^#}-5nlN9fuT{}g)c+F^%r(JX7 z%P@sii;K2|-hSOWK>r-7To&%mRIgfwLJcSXZV|ODzP@%Aln2cv_K^?x`Wa|AXD_n9 z0D=?t~#S+rN=6* z=~&*fAA#^~z|zB|YvxIwGk!5$szO@TSmYXq#!tkp(m-?rn6HY-6*$L}U#Y|Ceu@vx z!VRX8;g4wtU5h^>V1)%y(raj>^Ft+D&6o>f9s5v5TXJe#5?tjgVI3;m(6-w<0<5mT zTM)!Gr>_T+{Uk9Md^~pbRLwqp%J46pVk)JPNmOMV-KVC(B1K~=X6ax@*UC%|sjUXm zwkCVQ7sd2v`|7SE5EP&!h>=E3V0`d=UqdPfJ=%e$7}k9hkg?a+k|PKb(r9B;@h>=4 zo%b~WmvzYm!I!KdUR&IR zdV41xq<@$FO8ut)wXv%A3)6-FM_G>BfcXd7Qg9*H2p7`+K-vjSXMI8V*G}kGM4G(f ztzT6C z@YW^tzpI-TU;Pf|$ltxQ`~2=5EqGcGfSK403r04A!T|kO^YkD2zvDla|Bi7!Ph(7p zdq+!A51!Q2ud!&6$>ik1M|n8J!e5}tF(pLe_Tb^b?M|K|!rx7?&tUkp(de*H(CBQ> zatwrgF9HHitgvtIH_kT9?{yJhF2&Nk?>!EFow8kf_#M>@^$FUH$AT<# zY|q%R;jf1e8Sh{oRn3f!&rUhd@b8HJK37e=oSJT`yb9b39i4%AA62Y`j?b*Jp7ZOC z-0!|cJx{#k9(;L^@LX2E%YFwQdRgFU$%V7xPP$&mbrw;^Q$4I=&#rbJhk0J2;$8fH zSmk~`c!^p_YyOzfc@)SPs#)>%>FW|$N3(2VF zy(qps=e@|g%;psm-|ckU&^uh_z1ZFH_ZG^!FL_bULd^}xoq!`b^{b6K{H>p#A~l7U zb*Q!(mjTQ|oqu4)CW^fn+zjC*5_y)+ipvjZm>5>-d^s!<(b%FJxI=%*fBuxk$J z+|K78WU-AT2jvlf*v7QI1V{-)0*E33(k+h)PZWTWt+wtA%Q3%K# zTDAY-dD73yDY;f)>`Kq6xqj~!kQZe%z_jo{!P`AI$g~SqbA{nJRI3L`9BQe8QYPN+ zJLZ5kthhdP3+Rk;++TGIfVw?G>Q6jLMPE~=s6~jpS(|Ai>|TtpCn#BJbURJ)+oQya)iu97h1A& zn3d7w!)`ugOc*Ub;A0NIEheoQeDHGkrFZfxn!-L%%aL-zYo2`HD58{aQpFmH;oKI9QY#iOz zPg+^8k~F)X*rQa#PyK_azlGdiz!R??2*No72ZjdBC)aMhWkhA~MV`qG3RQ%3v8zgn zDx%y@qTKRSj7r~wvi>5pS;urb9p@w8hBB_GZdS)wPlDzo;0)aC$yooyW%Q_XD48GU zCo%G3EJaz5qUwuyno7TTUiliJ}aZW)PgN{lK-(H ztK_hR|2yf#HewX5jOlyNYr*Rm7?UWpQ5emU~79madY(28g! z&D-)jAC?x6-RVaz*0e+3-*02?k`_Hgh;XO0{hWr6gCO4CE%5_a4H(-sLlDnjl$TQE zc*oWXei2wn=?v#;3l=i+k}=dNIvl4-U08p6OgVq@DAZf*yCsFs&gfU_3oxDA?lAj- zk!?Re4tAZqd(l@hd;1I2(z*;3vwB#Sv9Ghp9O=P}xzp(^6|{=J7R5~MkgoCJv|t4z zJ4#oZ*%8DUyewnj+(yMu6>ghxsB@0s^OTZZmR-Ag`hHM*M#fiOt}MaAemg6(DiV}j zHB`!y7N4B7)Ak#&;rCzdO^+@gr=$|Lw3MGX)0dxJ5{uyl+Cm0!Fe&!UBHQ0?vD$z8 z;UxjYKuUrAy|BD5u*$e|2L(u-j+f~Db3R-4Vuj~Qz)~XQDa+LCN4Ox!5?9q zU|F&s{-594h(&3pf4EWi?uYxfrlxAf+a2E&>N?Bascx5_qHjjiV6R~RRr}{{ z5UYHBi*%P^A?cv8;;wH3&x@sVqTA*MbWqvVsOZZ44ri;*82LC;jEb3Z>Kd;I>V#Xh z&@8ZbX6}c-ebf(@qmA0`A*YJp(2HJl0&do&p#B(#h1{TjvxwD9!8>r2 zncqI$sPEQ=Qnl++h3rM0+B;IOMK=ogw=QBAL#chH?`6)G5`$4xEiQH2;3&zPOK+N$ zi|DR~g(AvnE=QVsxMUxbRjb_mp;L52B<119#{E`}9$~L=W8&n+#?Ikw&}!x26=0k~ z1-gwj?-NOox9B{|E8>p6(AC7gD^%W__SRC+ePxri|riySm(^dg2pm|@k-AFoUx)l zU!JA9YCxX^rR8pUr zpVi4q_4Ad^=D~TPIFe&XR*j+5m}E#Ss<}9XrZJPba`d(?S&LK^-c<(^WoZ|z1J*3C z8ttS6)yOe))W+{Zap;EfR(|Uw;5ddOnC6pECb;l%dTsixspXF1>@WwqvMPXZ>+oeK zcI%K;=qd3{5%nCy%LeQt(k#P|?TLbWJpgJpsLMy|(jw@yFfBV>Bso&H1>ahyu-LqUgrI8ziMXv9t7}6&1cr6nAq=B^*u`mZT4AXru{>V#-^; z#}y7ulZabMb2iOS16R!r*o%RZBV5GB@+_;l32>z~*VqR5NfUSdmTD9CN8zraOq!X5 zGA6<}Eq*7r5epbdZHlq0n1nyvWCzHUOx(8ik3#k0eef1J$+Ik`M*S)fsx2)x%*D!X z>E2{^>>d?9ly)!!4;S>Qya0a(J_DrfdT6HqXK!MiP@ij_&;x&GBy|duu8NHaXDj<$ z$fq;IGGOYA8H_G-tew8OV#@bZB!hbeO>RI{9$^PZfxr%)t96Q1CE`JqFc?WiBGV(L zjC|Q|L2R;}FZfgd&Bv{?HjjwuiNv8n7Y90%R5j89f$sBO{1H#WAv>bE!X<0O+4BpE zjL0iTZA|M)Ca4$;i5b}kB*e?Vxz>q&!=C-}X#&8a`zz^pnOZwIZF?8Tn%DP!PlHcE z-!^=7Y>Yf4hEU4XL&?x;c3{6nEZjfMDMD7D+Qi?KxqI3fH2z80rz>cHo`-s6`Zh{r zxpzvY_Qf7uYiELcFmp-jhQbI#3wOuX89BSiX;*Y7Ms84Zos}()N{_#q0+B33isU5E zAQ4lT!=7Ln>RZdMG%stQ zf@5y-X6sxxs4tjrC-URQif-b>TC!;mMTM;GjwG82IU}a+4yD+d{INxQ%OD!xKvigq z!rJF>z7fAn{%1vJ?1P&b+F2ToT&NI-$#D*SN2PLX@ZU`OTRa-Ln` z={-0`n@Yin88^)|T0kH-?*m*qZgT5)RJF4-T+HI|#XS}MsR12i6@j)0ww(fgMQz_1 z8`5QHnr#?XBO3w-H5pAzNl%Oz6k<)+T%vwvNMVHRPz+&T%X1fy(XXNwR>yoANO5`wjs+Hq=e+tozz7L-DytSVJRbE2{I^-hNzw8lY{?q z`*aLKc;b*##gX~bZ-YhvI0z{@Q0`fPKPVI;X$C892=7*ylHDc}E#A8!p| zlNFATB;3#)K}FJ?H7mtdxFGDP$HTt~F-scRCKeB)$hT_0g3asTd$Mlw>)?^8KG^NxY; zA$+7iG#uzs2yPTxWeM&ir`fRt~ge2K` zCQ5NGOk@3FLCaZ9ZgQuhq8QzwaelAHac_s*^2FBeE1T4(4ElFx{gGptyP4@9Wu={D zGCj$2!8ac)ckhK(CH9rA9wd#zY|;fmhpU_f4jOH2o_d6Hj*UEt8?&|7B)1ex3+6J7 z1NL$_H;FWqgP~PPyDPnW!aax1YE8#DVd9FZ>1f%GCu4)AEa=*qf9k9-9GiC#^$67* z-O4MisP}jO$jOYexCXU1379TNpvM2Pt@3Uqlkr{{GrkTR-K8@gMIUBeCKlat%u z2b;uAA5{Hxe6{PDp!6i&7TUu=ocF4ZwgD1RQ;W{E~zUM`}2Gs{?_>(x2= zg~Ii@W=e%=Lfvpp*~uz?v*TNjrAq`uU&)eoVcVG9ruKl=A=Rffe|>#}B(!GmuOt|w za=j)mcG9;#k>Rc@5An)p)Q8u>@24ft0r$~n)7zg65~Ypz2ceBnh8k}0K(&p6l+T6n z(M|z5BA<$*BV_jx;xLL&Fp!yKHE-nP^*#ygMDDh<+uXoobPmnymXBtp*oP?k z4|5OZC+=u62Y+Yi>K)x$0$FOMoWwF)M440EnA4OdJa!>THvjgh{-G!qGKagmF8U*f zL7=6m^-`~Y1#ji^q)zNN8qlF;yGgy`6NQ?^LoT!$N@$Lzc{A0 z<`!=s^=GAa@fXwJP+Ijgjd;d5YJ2IYiRGje*SnO*mIZWab?7J0WlrgTcw))a;7ci4 zFO(p|wk{m_IrOgJ83EcVzHKNwi7%fWi|B~E?}knvUTU?Lt+Ccdh=Imm1!n(po4(X` zg``QTtcIaS6&zWiw-sj$@Y~9(JTVNXp_F&*{CTFSlq0#z{j z9eVm!>+F%(61QTY2@%BbF3{{9@BSHVYEt`quL(gksq@eVgQ=6xJmbL*u!Sbyf*lwe zLitC6NbGq`dA}v;aOeSuNqlhobqt$6==s6$AzDqJIe6brQ7{2P$G1}?Tw+w#ObuAI z@R#eC;EGSIu52r4<~z-!n>_b`xGyI8E^I3q-K!Fy=E);87(PpL@!qlMO6nyWRJW!r zfhh_qPcAox$?+r3fxch#n{WcLV@EvZTm)ClE+|ek`mpOH3O@yKd5!syR(hO{5Xth0 zqJuRVA|Ak2}askq^q- zU@?5n{wMf6&E)f@@9!#72<*)&bkG{HMVD%s0a%hr^CWAqGi@G@ukXiZm+(9?*{5}% znq#ZDK2A{Ow{Z-B27k(1+?I!VV5xTz@@_(PjvFoe=Anjxq;i=~a*0+tKtp-xIB&IX z#zVRANRrHCaQLqDv`kEq5k2wFHjl(aC7986^Hmz>hB!X~!;O(MxS<7YjgdW0u5QqX zRaEOUdr1P!efdcn4C{WqBLd8}sL_n8C?Ul%L()lUzq#@GH(-^Loi-Gc)A|{gfXhjHPD&$N5EE;It zMH21EEG0omNz?!}C1F-V_yx)SHB^C^y-CHaWS7bKNV1;Y1NMav<27r3=&G#V`HtsI zpH8VGP9Kd(O2?9EbTlp5IqjnuI`vT6#Aup)e4j!>OBpnce#C$R*~q~Do{6xcQF0i{ zcZ?t3K$1TJ*iD90CKTp^<-u`%pQlJGv}&$Uc0?VWbFD1F zt6r;6S{W+M%3?AQZ>mp>(jz=4W?78sQBOnf+l!eRQCd545lxlnUwvFwgr3$KzL!(9 zmr=EsQ{`mwK}#{dZ@h;93}y+-g&)&6>ffL82ECaTGB8dhy^STkCK`nKIbncMB)*T3 z#yJW>wWWak-1?0sBj7eMsx7Mw9lH!QT+IAamK~~xSAE;Z8g*C<^{qG9mN*WOs+XG^ z24k}fM+x6qf`^dbi8AAip1>cac+hovo6|&g4M}es*aE{iFw%zeNqB5FjofI!?GGc! zK2T{(_76;TX!lkIYym4e2d!wu^25wm&;af&>Ngd(+;PBBpyaQVWgfMcW6BucK#Mg# z2Bnu3Oa12lmeE3Ix|G!NWakRZ2{Px=H;Zi}^xn*GE$Z!rUPkUxMKO?w?|UGx4kZq` zmV<(UufvB2E&iOYc;hq{z~PxY1pNwC7A0fs*Fc&=;C6Bpm~T4#J{SE$0^?jXNy6#w6Z?+gQrPP+DYmY6sJ*AZnTx}vw%L{( zqef~p!~E5rKFIP`xhxEz5@Pf*cIG~H1 z_RiD104JB@N~Rv(h#;Yu<$awo#>r(bCiM<%(hF=kMb}-g$;QiSD7N|t^M?rYst zs4F^xir+gHw!Kf`8x3W?8zS==?kEyVZ*xkoML=`JC!KqI5b^Nj(?JmkAr9fw;F&5z z^vu{7E}?KIc766k5AjDxxd$QAUTC=GE=~t-2*dec5FRnO<$6v9TD$uZ5gtLg<;G0~ z3QEHL#UwmpbIWC#3hesYzHR4L1;84T)Sq_l zqC@MsTv{k#V7rABgy#;v_}#f#Fd(#b@tW8E^!5D8Rn@b#WBJ@AWFN#>&yec5q$8;I z-7i&E!ir{X`GY5l2%=~8K$cW|pF??=D4T$TYRfpvJs&6`y_|E^{}6briv0mIFiMr$ z7Eh9?=OQ^)MFmb-1(cuv66&|sgT;c9l-`3Z%S&&Lr(U;Eo7ifM%(jKJfWrCxF71x5 zFNVIqc#crEj8C~tuMmXTJVfJOp-|>PBG8tPYQ3prdnY@Jd#9I?^?C7ZPw`L(Fmup-(Mb0znW!>(?myip{)VROm(gO#&;sg)RiCV|zn z?J}4q8_V`uWiJC7e@1H2t#Qa^+u^08TmY~@s@~OhUHpqBvQLY&8#S)t8@FFq%CDw1 zIqbg;tP98Yty4R5q0b2`N*<3xF9&&b%VNd2=sO?~+x*^5Tj59x0V{T?c_qwPdOm@u;D>_s6<3xt~`Ghzlh+Fe?8enf9P z`cd>XlBvNXF7P_lVyTPd7T&(~I$eVx#Gfo!qk3ob7pnA91R|~9lzo$T?n_O4Db54l zPEk1n0>a8rJh;iIAIwpIhV4y-A;{+8==hkPs;~?fm?{bnZh1#-|NG9026!UEu9e|9 zm6-H641D1uggQq;YGGs9n&|t&w_4o8ARDNs9LQJL#u%-(74luK43W8P5TvJ8bRw1P z7bp90hf(MhS7zE{7E^qpKz(hQ{NR`T0CWp|KaI=Sr|!>Ed?J@ve6pI6Q|{Q@VcJeH z3HI>*q}3smx92UoeL`_A6NGtA6XBbYo7Or>d{fycK;=C7rt&qh1sh(q1-t06LtGi! zQ1eLZ#Dv`)-Ae<-Yy9sth?y8zGfL&CEu?DgN8=^}qaTR38HCsUfg|9f?UU`?ACA&X zJC)tV?c!fPYYh&A3agxJ4eRfQO=ft}uZLRG5Ew=G9r}N-1PZz{@s5~ThaIYXzu4h< z#AuqetYS)O>=L(ICvmto$!rvC(5ZlGi2Zyp0#`ro`jk~htNN-b3-VIK{iP7%EB7mT zQ?;deUh(1A5UuK&p!zJMx*GI+1O9vi+_qKz%k?hECP9F_*NFO=F<5 z;H#Gw!eez`X9=g&1qYsUT)y$6O6{<6?XXHMm2#~Q=9vuUSy>^vr{^`<`6snc0f`zW ztH$6%|G`JNSpFxHJdmI&X+UA9e`O>y5#1V9IsCN@6pzN&ho0;(Aq|N%rH|)qZ|~%{ z1+^s7Ce0$5jY_NLuo3Tz2K?WC1NbvIZ=$_LIHASy?acowyXFZ^vv&XC9!do9UMS)* zfjHz*#^r%cghl_w)Zsip#;3gd!{qOtY%wOUPn}yvM=(rVAl+-yY7VAt-D}orj+!mq zYudM$w|BhN9FA}A9QExs1{x0--d={r*ZEpneX;Mp-x~}05*Zp3^_-rG{YmqOHu@g7 zjeUpkG$?4{uw>;m@<@OxVN?q^lhYjOGTmKTwC8;cO{srn=6X!6GJchK{To|lvAJp+ zh_BAz1cDOm1pCFz5BlT`h!wS6bsCrih(14%j)#dPD& zi4Awi55Y%In00)rL!*I@u4R|FP}*=G$ItB?xEpEu4#K zGCx&;*bKIHrA{|18~a-GZygU*TR5lxa@iF)NjAKUBZb)ESApuAXvVx~@er4ctcSWu zlGu(Wc#yX6khXcFcNo)pR(t3__wa9E(R%Y~|5)vZ-2iZ2#X7-EemV7`TpO$>?&Iq< z19h};Ct%v?b+<0k~<8mmEVYRKkQr<&K|$=Cej>u{Qje(dwf@; z%Ocs)Q|>i(w0SJskxztgc6Zgv{di%W_KVv2dN5te@wv!pl4H|8U%e|Er3LG0u&p8^ zS<#-ZEIP6g=z)0Z!FXhcXDaw`rR&8~46U|eoI{x6XW>^RFeF3Y^ zW8IqkTc1SU&j2mTQR-C`fAj=g33HNsGE!cduc<$H!TTIe6ktZfcQ$@F4ZHn$7))O` z{Gc=J$dUF7jG>9lqB>M)uOz?2rJ;Ju25-0MKAzDzQpIE~nbJgGRAz z(kr9N7;c`bc@~=I;7_qk)>GPVnZ?Se0?|Ff`|epUI}sXo>&Ly$#BxRNI1--W)kj_^ zL&OlGYXOKtQv;}^%zdzQeu@Ih4g1L@F|zm{Oj>USJ(xz#YGEYN*}wLZ(S!7TvTq|e zlRk-{z%)+m zIg#6{z={WU?a`8cTt8U*ogycO90aaQ9UR8`Z4pD*M{gef-ou_SKgQiBr-jH#GhU;f zmFtk1R1B8U0Ql$S{xkHicm3>l)T>NFIf^E6+Y1yi^hH6G?}HBza7jZMK-MF6L&kz=J z7tXu~X1N0b?1C!JSe(SY`>MWYq04##^%NUxZRh|4o|q|iOz*VBuFhymji~M3Pj{4J zDcWKw3As@Fdse&5e0$&p}BLo<~kBm%$py+fw?Ve{GHh{jN zEsLdQ|1m%O;U${>kN(<}#qAIEux1C`UYRu^Ru8;hNi|`pe=dJB2mu0i@YA-aSh0m7 z-1n*KH=ZyTa&jU^$80LUI+~|Exiw|x^maViYmQDv41J^v6g=Z;OYQk9hT!|DIWP!$ z07{s>`b1rSJ`cZ(7_?hHgsZhMhHargzeK?LEwxDGC|<{)uFWbP^b$0I=ldhN`umKE zQB(dYG+kRAVJt6~3GuR4>3HevwMq$gz9Lf{jB*oVuKnKA$3|8js1f}N?j6HHhiY%n zV{$fg;zT{v`yz$0^-&b5IO)?=OYebO=pWF$aZiPxCQcV<`#`iOCQiY=V^a6r(4AyS z49piDBP7Ml(2RwA%(u)`)6o(O(QfXMO6(`$p(>gmjSGbD`Tl<1e``z3aB|41PsbGI z765Z|sK-35kI>IdL%*}wqZ+_)aCo|9A0Y5|fwLuS6Tbb=IPD>0$itcY+D(ZVXld*v zX7xoAesgd`bQ463ER`HecILnj&y2w1TK#Zla7%xJFOWN*GZp)^^=@ox$rsKzVQAwO znfs;jJm2rjtKgGVjEi}F%nY-cGhzXIG;eu?&F-ue7t=R_Me2-$$Zmq|F)s_ zEKoTYDOih=Tn>?3j*(n`d>y7nit~W>fBJt-*kJyZkTu^S0<8blaW$Ku0)YR@tePz` z0r&q(x|)sg0X`7gIx(R4Uo}>99vOi9U!_*_8YKV*g7#7#03$?BKnxHCL8DTD1jwXDasX%uvQz|&LPpuu z06Y+ylP2Ihghs9hXoDEMZ2-83pjBgl2E-0z2g_f+ZzXbsFyQYTKyomy4HQPRyEz~o z!ia7K(1ECNumf~JVn*-sztIslKo*40+7sXmL2KTCWJoNW*%a;nQyl~Y7Lj~Y-DM92 z4}P|TLTYaEd(-eQ3}JW+^Bb`5-ce$KFK7Utz{CzvSl~?~C^)ds9uToP9|ZUVnKUaD zPzmu&J`%7BLA0@eDafSH@c>BKU2}L6U>5LSwO+Gf3SbqowEW)ycMv{~Y=AWc<>mt7 zASMtUhGJhqz4Z-4Od@{&5!{mtKm*G=L18s}6#&p6zDJb+A|PVe<$x)O`jZMk3xrlw z{l6)FYXMjgr5Z3b(0p&cFT#Lps{u6NnzxbWjXHo4L`1j|5D#J8Ue&#^0=(q`5GCDsz44niAUd85I<#a;Dz%Xt>u84IKZqj*CRf^)o~5WvWB zK+5Lzb-*aZp^8nwSBU%04K%F$Z!>kmfSncJ)?c_B01IB(e2W3IHxz91mmPpEMF098 zAO?aQ4goU|M?eaB8`p2KD|*{UW)Mdn&H%*VJzpq_=B5(>Iz-^-+5e0LT>ugxG|Vf2 z7zF9w0P-N{3{yaES=RDd@7A_6mk2>*re@%!8p z9yp=oEom+Sq2BVb761c&%N#`TMhO5Ote*fRZ3ZI)5g}F;q5}UfGnqdCn<2ClOrQqD z0xJ`@s>`?ND!*C41+f4%7z(#J5(fyWMQzT+2QEYM!;2W04q1Krq#9Y`x2N3Z;ei3~ z0odR#DF9^fn;Z;y3Ll67Hp+y8Yt|+QivO#_ZO)+wjzi{kWCHp_{JLNTHb7{_96)&p zy5$1?U#gVz0==M+|MN9K*(pWh%|2hSvk#C0{3;BDYt|D4xPVMI0KEiN>Zt{N`nIpe%%u(h67#Ih#z|105kWF-IUP1bI0FCn3|xdI0et$jS#; z3>ii92S!0qHVF8CX}1>$l!JuZi=2Yf5Pckj6Wt69be8-IH{ zlk0$?a8rAM(9Ln3|67X6p8p9Q55^=qzlHq;=G{BV|DO|I?P|yLJ$9y}@Y<&M6?c7&#Ag?2p zp(Vi=(BP-0?2D6wcHbq^E<1$H{xEXEj^vAdFv1d*;GNu)%jGpHq2qP+IogK1#lIiiJb^UF7_hWShnn`s!k7b2#^W_HFRnASM z?rZ!uD2oQ|+|dicnGDmvmg|le2&3vx^Jm1$K*zE+OZ4ehwENrTJVIv^T2(8xmg6fa zS0YBu)~Qxu?u&sB!HYd>E9GiDme^Gbd0d0!Z93UJx;*RZN8ltGh3Q*S(r?o#(JIV! z7_y=DT?+}^da0$!cGWr_RO6=WiGQfAI$cOf+I-i^1!1lB8vMw=(TsST@mG{dnTx@c zfn*}$T$>uJl+`3ZD*PbFR8rWt7t7_$FIKg+tR#-JiA=;gM+iCP(fdeEzL%M>_!NMV zS%sQWud6z3YN@8+tT?JzE=rb1BQwvHad6fLGmybrX5E%~b%XXTCGgYPA)8DM$LMm# zQRbc-XATQ_Hb#Af^atZ7((3n{cG23=<|IO_f|M=n+R>(H8P zAAZSS5yrE+)P{$ig3q%$TmC`&b9bUz<}ck^xpo;Mn^VbwM=EEJ=^$EmTBQT~Tn*54 z+E0-?%!#{ZmPDdyjEoGj_XO1k>b*weB`!^mXS|^Zsy)1v=9M0_`u;lDYW{edB=Q%^ zivyye4&T{%BRg>-pM>RIn;Mo~w0GE~XKG2>xae6lX)7K-fS%0qeL306O}#tM>%+DD zq`thKFUIgu70Kl*0Yzuy5RmVToWFI_R0NT`<(HQcGxQ-GDzKCsWqz|~@3 znjN0kpV0fzy&}^QNVoKW0?j=caCa+G;O zEhpk4S@DG^ISGe9aihd3yW#9%7G8b|2Wf|H^8Nl5V(M9y|)*m*FhBx=Gz zwx6wbk$pe3Bj2oGRLzi7N^b>@sND@P6OiXV9Y zs+7dKdMH(M$e+qsZ+7vpi89>+b>|g2!{YtK3Dt~WVA`@D747FNc@j0ZtH6?pz;3** zGKlTaF0|U{2JST`4;Tf7s^}<0$nJ1-U`AD~rKx=={d3Ij!POB1cWRNzaK|RS!z7i0 zFlpjlPJB2QR0@-Q_K{lc%4EIUMV?yCl(9x!?{DpSI+7zv%?B=e(2VFlh%@j+TM{cp z$rL+W0o_zLkZQ`CBlcF(%&ccIw`9a-J${xaq8sbBh{QLmImUeacb(x*&7r(%?X{l| z6g)zZFaqjEcqF>2a`pyvcmJA<dSA) z{LEKABt@hjrRI}K+SX$cK$gk)5})%O(UO{bHE}$aeE2k50v!|&3r&qbCa7GXX>9Uk z?=;g!bYon?qhLmKzi$-IBw?s{{5-+=7=+T_A(d&LtvX75G1$n$AI_`oMI@_Ox?sBd zTx!9sCw@Li7M^ubHBCr8U?yu%#x=f)@LqJSHyD)|C`!R^h987#3hG7>@jD9b3j>Dy z8L!X#Z8B$_ho*in`6yKz9nd}^XJGha2inu4ioj zFf)GVtlNbIsnSmx4w{96;JimCt>3Ke76KPxAs&f+BkH|!&%~!hUqXuM#!V?N;ez8! zJ~FT{Mgg;>z2H1?(m`PZgM=TI6#k^gt4gt}{K13SGO@2`na7!o!@SuOSLP9l<(EV} zF_l5GCQ8-l7Iqq%XB=t^`1)K(Cp~Ab4>j{~DfM}%rMwa2vtGn~wsZeT1f4D`za2^G z#UQ-^V9Zjy2-#eFRm@}Aqh`C(?h!@*bW%>;lKxWE7F;FY=?0o}LAth{{!rtaVpGp; z!`rl#d&%!PF*InY_sFHX?xMIdtNBM(yZkjmI;iLUawB9#gz1M1qT> zLX+K7qp-`c`i5c_^|o+7nK{&lDZFy4;F~vJIDy}{-Y@YQ{<8QspsiQhaR4X4c~Bfn zOTpU8iP#r5j4Sr1PUnxy4;>5q*wX`S%;kdNDjVniR4b4rL4_uUuI4faEfswS41G!o z`j)QnbDfoLb-U}wVL`JtkD|(*achG@iTYTbSdHu^zl24L0Y=hxt9_l}I$35WaXLSh zzRE}@SMkv=n~Cn0^i-x4XnUDIW$^31nvE}I$0+=Q&TyY`v9(m8roaDaTxFPzjvS0` zw69uZ=n)2bA_{lqGs!=PmpXWU?pA1ylo-AAOEy^i9=BjnXq<28N=MP?SGkkiG4a-r z!Y)yBd-4FLVJ*_kVr-_5?Bv$A@d#$t?I5YxF4Ex4#*(&rX{I&*7}0Zp8a#mg1t;G} z5>86HdEE$p%Hqmxyx zX`K}xDDUK0mcCjlh}$aEcAAz4Pahopu6UY)rWN7jI7KkwD5d*6qu&ku zC+=eBK)J>)O|HEO{DCUYVNZm}wH8vQAPkFgI};L{Yd&ofs^T{})5Tl!(v=ew@s5u6-%S1=0J3kvQP z2M1%`j-xa1r2fdm^owIQBB2I#wC)M_mzOJhpwT82-syey-Hbr0-b@8tZlNs^N92-tofX@&2q6 z3G^Dw1m=HxCQ?V5oFg9c5$+lx#U{(e&f*_r!<8Tl$JH=~Bu?kK;4&MgB z#kn3-7Oh%UI&t8C`()O3tNXLM)yu?%!3tEGg)_vqV55bDAX-a~R7hbM*MDd~y1&HN zI4JXpgRYDDYSO?NZ>KhfNxpk=$=0E9@e@}QCwGqC?IV;-$FPr3*Yv@3WOK3IaOIJp zf-a*fq6*GeazRP47Q{Yd)tDxC>!?_C^#8A{D*>x9{o?oDkLtEBs;QfHl?)Zh5+!7i zQI<56HdACuF_!i#Zq~H8^hzlVV^0`+n>&pEAdP3nWLJ!_gsvIJl{@;M_x--Ud*8-0 z=HdK)=e*~fcm3Y)_zLdmG`cZ)oqFDPH-6X~>|g6KKC^ef0Z}I}N$V|T7g|p3cJp?s z`%(7$a|8dtB&%08y=sO&%5g@I+8*4xGkmbubkB+V>eKfB8Svg^%c+XzBWj<;`EMBF zT5;>c$FFnCmX=i2(wkLH?+Z?{D}JtKbNE*rNax2`a|NIkgnMD@Yp ze;6l+UV7+fa_ZE}1u2UClY$MUM;<@!w6ofi6gVx&=gpO3l_W3o?98%bMHw**(_K<; z+kZTf*ViX8@;3ZK1)t>x0lK$!)*RHGbJ1_ruuJLR7M$KWY`%47wwWqkfmV9;t2L_K zp)^)bRh(};FYXYUnAz)e^vkwMcWC>!^{O~VSie~r-pa_T1ob2TYz|VaZ48yVW*e#I zC|dFo6fUj3+FZYK8l`XVGRkV`oq^u}!zPLFrMRECpyPoxheu{*&{4~pKi#XjV zmzS&BWudD=%>s-n-LrMnOBKyhL7-gO)H>fR*H2}oXch({<=>6X?%4xWy=5_axn^zF zt7FEh_O>Fk+z~2ES&TT>vh8l;Q8%@%@*8o3u{u+cDrhKCmN%xlsjZZe;)lk$lD5;U z9|oy*w5~AA9i|#BduWjB(Dr_Hhhw(8ijf8CeKKt`Ssgf5^uEVX`hO^)kgnfmE(M-T2T=-B-CnEHzQDkagLsO=MkW>QGsijoM4rWvR|l z1PZz&ZBpH?VyUvIG0;tIp$rvw8LGckGzhvjD~~odxTzglyIj>0WvaN#Se>Ql>isEI z(Zzg>!!7&!F62rFqRw3vAZ(k|#dxsI7W)e$>{1 zs;HMkjg?1KFW*_J^3~4jEvid#^K&bfwK>cy3b(=p|Sqss#`g_)|%;(PXtvvs6mLH(AdN)VEuiu%KdHPxX z9qU(C_gj1`rRP6(N}5OKFc(g=hv(*fZ-=X z5F_dv9wkC(d-@{N%DC01o2bT)VnR00ZR`7A?>9;*ax>6d(3?z+s zhk-{r3~~x(Y}pH`MPUs2ssPFXh#AKSP@ErQrR6Q@Uet)u<%~dH%-Eq$&~d^|jwlE& z*M%FDtI&fIzDa>#Pu_RB0(qUT9jchYQMX0>I&Te7%Hg*iMSU+8$fxP|MVqE^o>WW& zC$H*5uh_}Q7)X$^8|cD7hA{`|pn&O&GYS1z%MVN6z~#3wT=n#$jMpIPbjFwT>nEd? z2{Dc^oR$d$E)+>+iTl+-o@S*(Vk30?6N^TJy-jc#N83E?hv~NPqgRYj2*gL|njg#3 z)B2c^-Spn5bOvKiI^xg_2*r0YkH|-dSfG$_E(7A3fWG|_qc$iI{z7!-Vrg<1k;+r2 z8KIpsxyGsQzfz&q&B1gl_#Ui2dI@x5=p#0S77+vu3TOHg>6~zo{+h{4P0@~U#-2d+ z7}}Rl1~PgZ&iE4PfLS2zRme)?W--nr5l0UnV2;C>I1E>A!zo{$$XRObEN(Qu#0G?j zNadfl^+AOZTtGn?IsWcqfncO9ye^=OsLNR+SrLo_@nS~=7?JK}jc^~ea3hHDD?m2y z??#+8=3||z3h=iuw&QmJl=(x4y6L^;M~+BPS~QolCTy&snni1CTs6i_o1d@ufe8?0 zC=iUGj9DEgbd)@s8N~WJ8;l%3#Tq$!#!X`+_4Pk{|Ai4e3P#)Klo4?qYb0O}<3tkt zkK8nV1~|VMsQwi7>jq4*#R{X)rP|8Zu zC6=ES$*oM=Bf*N~e?%&mTyaJ*QCv5L1zWWQz#K`2C3+NP52Og{LUZ?;ERzn|*r*y+_@Kj^uFqiQlRwmB{EAxM2y_o;IE%AaNhcRN?f)N|} znY-r5F^@4qt0Nd|0!yL+K7YF#cF^>x6eE8%D zIXVH_Y7b_04<#^GL^ojARAoWRLr5Q;Ke0>KF3|>grC&XPX9JO@st)0UdhE?l0l_*66xiDAr{0v8a7=CN%IPEIo8qa^?jUcpM6cf#b~kjgj`=m>@yD|yJ01VA9;G=Qe> zVxf>U#)U{1W9gy2tTc8BytQxG2XA6=*aW|i@nQS5aEHZAKT@zDd3y8AMDX}21Q>+c z(->c5e;6JUVi$5_Xm-Jw_5?^7t_=yKLb`NV%OEIO;2IW7l85H{>aapk@_mr8KqgN~-l0*)T`w1>7sz`=2psn`>&QtC;lq2c}26xTpN6#ws& zJl|I1>aQo>I<BCbQV%C z@O&TQV99cyA9A2UIV6m3@Z66qb5gt`9hM%x!b)+K5Nf;z)gXo| zx_84BfRAm`!so8w77$GlkwD->1-s`Lp3j~qZeS}_zp_%}bS9LfAT}MOe!sKQ>YK2b zK}`_*C~*Tr?YB6E48~Ved32+gu@bGi%R{6B$&x%Wr7kJBCxC1uLgK@&1KFJAC`)*q7E4cR#1 zuUM$MgL9QYY7F@*c}Rky|AG~e&q{I*;F*8%xEVgKnxU$85mYTg|B!JfcL@r{Lv#XU zn%ccPC%k{=TxeG?G!fYE!B}Mgt=UbqO>5L_b z#9Ioc0@W-8^;xVb0&T~T;u8;9pchhZxuUAJs8&{qP+TGGdr-vn8L={FC0Oa~%}SwI zi=4uZQGY#=fo8qEfl1|hG|7cziIjRlui3+>pm(5=20UL=0j9MO`Wtvky zYuJ3zz@DVTULr%(u!r;hM#Wp32rz#M!lriw6CYMHHJ{t`3-iI=PeWMg)qL*J>J^q+ z`ms`65Qhc~7ujmgK6BOper328-Z~PJP`!rpvJT_HqqJ}+sAJPhhJ(Xez?A_!?xx9K z35H^WSSWQI4C33}ow8EmS#t@(8UiDQ?#Wr>S$^Yekue&wj?40K_pRGXAO)Wr^}HXD zexb#0=n(3n>Z!2B7bkN5A6*AdWKGc`b*|%{H$sjkmE8a*mVguV{BH_n`C;q12j{Hy zU`2lhZ^cUU;6SqQ0^`Rbc-&DlzL&2`yq*rN|2IXvGAJ&1v>soB8A`?z#) zojWKkg_wgWrL%KsB{NM+_s4Ip!R4!e!)T{3Q6ge_C1bRDBV$9HuG$DrpN!XnUTowx zZ~X#*CM00U8BHqSq)Ax%W+5xxU%)-3{EVgZQdp_pCdQ7;)r7)JEla@r%W$nh58Q33 zEcL)*=wbX&O86IRp5HwOj&FczO7HFqm$Lk<gMZ92=} zmMQ9kY|AL`JWo#GPiV&@=+4wdkb zGpQMVH@sJ;Ju1#-EJaE=#-@|#2JSrfq8YOD3HoU)<&vxvv;0dzgD~qRHFo5K^I_mT zJ+&@x!%QbsA%|MzNpkM|6)guh&Xn^IdmK*byql{JZJEKCpl>j3s#t3OT@bzL7H+OP zYym6M-MBj)QQ;m~Z1M0S5e+KX{uLL|z3*9q^pHq`yvyJSn!5y64E~UR!1mR(kKlU_ zv`R;rc7WH^I$L?j_3yj@FFSxwPwm z`14vgl-BkmP32+eTD=wo1+=}<%TKPb~w_7hlnW3d*>vLAzE{w@=_iA6S#< zQ)Fb5hF`k9`zCKYSi1QOkLaVU?aW}(NDYP(f7608ei!xEWVU}f;B75D?nkuBur&HE zEB&RM8BL_76(IfJ1D>mo?zW2DH3`^M74&`-43*3JJx>_3A89Ei{{hP#zOo}m+p*Dq zpJ?Hx&$Nw(EpOGssc3;zOrx@z@?1-4WxL2r6II&|F#7tX7Vcch-EW3f0u-v$KwE!< zQ^ZOsjG4mwFcJAN*MNx|-tt6UbiGr=9d!Fvac^n-;SZvE6-{#07&(mb`)V!x)h9SL z;n_vrsi8h!7e0aLX2X=E-%T7bWKi5S7+-b9%x4;d3wJ`xA5A#Sz#NX=yvILdEXIPv zQY{&_Z%CR)?*i<$6^CW*Vuq9UXGpC>aCYB8`{StWPPXN^O%8DTsNThR5QT!1k4L`& z1y|^fNt8leUyXvN#;MBP&~Sez4!gIT@gsIN8Ab$Ff*ri>dQ*1Ry8;*9N}?h+Mxxnv z?QVbY^#O%g*zo8h`+9d&{2ez$fB6ntlX!9#dhKECNo!PPIMv$bfgE@C9&W!}ya!C2 z@ZrQzB5q5zI+Dff7+dU1FlS`Em+M7M&A31?fHL3d$J&7sax3Jqn&bayd1GoHh~+g* t7FUYzF@bCM_Opeccom.amazon.pay amazon-pay-java-sdk jar - 3.6.5 + 3.7.0 commons-codec diff --git a/src/com/amazon/pay/Config.java b/src/com/amazon/pay/Config.java index bdb5db1..c6b4a6f 100644 --- a/src/com/amazon/pay/Config.java +++ b/src/com/amazon/pay/Config.java @@ -74,7 +74,7 @@ public interface Config { /** * @return Returns SecretKey from PayConfig */ - String getSecretKey(); + char[] getSecretKey(); /** * @return Returns the MerchantId/SellerId from PayConfig @@ -138,9 +138,16 @@ public interface Config { void setRegion(Region region); /** + * @deprecated(since = "3.7.0") This method is deprecated, instead use setSecretKey(char[] secretAccessKey) * @param secretAccessKey Sets SecretKey in PayConfig */ + @Deprecated void setSecretKey(String secretAccessKey); + + /** + * @param secretAccessKey Sets SecretKey in PayConfig + */ + void setSecretKey(char[] secretAccessKey); /** * @param sellerId Sets MerchantId/SellerId in PayConfig diff --git a/src/com/amazon/pay/exceptions/AmazonClientException.java b/src/com/amazon/pay/exceptions/AmazonClientException.java index 6fbb932..e2f6e59 100644 --- a/src/com/amazon/pay/exceptions/AmazonClientException.java +++ b/src/com/amazon/pay/exceptions/AmazonClientException.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/exceptions/AmazonServiceException.java b/src/com/amazon/pay/exceptions/AmazonServiceException.java index 7444e95..3d14673 100644 --- a/src/com/amazon/pay/exceptions/AmazonServiceException.java +++ b/src/com/amazon/pay/exceptions/AmazonServiceException.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/impl/PayClient.java b/src/com/amazon/pay/impl/PayClient.java index 17d6f14..8706222 100755 --- a/src/com/amazon/pay/impl/PayClient.java +++ b/src/com/amazon/pay/impl/PayClient.java @@ -916,7 +916,7 @@ public ReverseProviderCreditResponseData reverseProviderCredit(ReverseProviderC @Override public User getUserInfo(String accessToken , String clientId) throws AmazonServiceException, IOException { - final String decodedAccessToken = URLDecoder.decode(accessToken, "UTF-8"); + final String decodedAccessToken = URLDecoder.decode(accessToken, ServiceConstants.UTF_8); String profileEndpoint; if (payConfig.getOverrideProfileURL() != null) { @@ -930,11 +930,12 @@ public User getUserInfo(String accessToken , String clientId) throws AmazonServi } Map headerValues = new HashMap(); - ResponseData response = Util.httpSendRequest("GET" , profileEndpoint + "/auth/o2/tokeninfo?access_token=" + decodedAccessToken, null, headerValues, null); + headerValues.put(ServiceConstants.X_AMZ_ACCESS_TOKEN, decodedAccessToken); + ResponseData response = Util.httpSendRequest(ServiceConstants.GET, profileEndpoint + ServiceConstants.AUTH_O2_TOKENINFO_URI, null, headerValues, null); Map m = Util.convertJsonToObject(response.toXML(), Map.class); - if (m.containsKey("error")) { - throw new AmazonServiceException("Retrieving User Info Failed. "+(String)m.get("error_description")); + if (m.containsKey(ServiceConstants.ERROR)) { + throw new AmazonServiceException("Retrieving User Info Failed. " + (String)m.get(ServiceConstants.ERROR_DESCRIPTION)); } if (clientId == null || !clientId.equals(m.get("aud"))) { @@ -942,11 +943,10 @@ public User getUserInfo(String accessToken , String clientId) throws AmazonServi throw new AmazonClientException("Access token does not belong to clientId: " + clientId); } - headerValues.put("Authorization", "bearer " + decodedAccessToken); - response = Util.httpSendRequest("GET" , profileEndpoint + "/user/profile", null, headerValues); + response = Util.httpSendRequest(ServiceConstants.GET , profileEndpoint + ServiceConstants.USER_PROFILE_URI, null, headerValues); m = Util.convertJsonToObject(response.toXML() , Map.class); - if (m.containsKey("error")) { - throw new AmazonServiceException("Retrieving User Info Failed. " + (String)m.get("error_description")); + if (m.containsKey(ServiceConstants.ERROR)) { + throw new AmazonServiceException("Retrieving User Info Failed. " + (String)m.get(ServiceConstants.ERROR_DESCRIPTION)); } final User user = Util.convertJsonToObject(response.toXML() , User.class); diff --git a/src/com/amazon/pay/impl/PayConfig.java b/src/com/amazon/pay/impl/PayConfig.java index 6209a5a..c843e04 100644 --- a/src/com/amazon/pay/impl/PayConfig.java +++ b/src/com/amazon/pay/impl/PayConfig.java @@ -26,7 +26,7 @@ public class PayConfig implements Config { private String accessKey; - private String secretKey; + private char[] secretKey; private String merchantId; private Region region; private Environment environment; @@ -143,27 +143,46 @@ public PayConfig withAccessKey(String accessKey) { * */ @Override - public String getSecretKey() { + public char[] getSecretKey() { return secretKey; } /** - * + * @deprecated(since = "3.7.0") This method is deprecated, instead use setSecretKey(char[] secretKey) * @param secretKey - Sets SecretKey in PayConfig */ @Override + @Deprecated public void setSecretKey(String secretKey) { - this.secretKey = secretKey; + this.secretKey = secretKey.toCharArray(); } + + /** + * @param secretKey - Sets SecretKey in PayConfig + */ + @Override + public void setSecretKey(char[] secretKey) { + this.secretKey = secretKey; + } /** - * + * @deprecated(since = "3.7.0") This method is deprecated, instead use withSecretKey(char[] privateKey) * @param secretKey - Sets SecretKey in PayConfig * @return Returns updated PayConfig object */ + @Deprecated public PayConfig withSecretKey(String secretKey) { + this.secretKey = secretKey.toCharArray(); + return this; + } + + /** + * @param secretKey - Sets SecretKey in PayConfig + * @return Returns updated PayConfig object + */ + public PayConfig withSecretKey(char[] secretKey) { this.secretKey = secretKey; return this; } @@ -605,7 +624,7 @@ private PayConfig loadConfigurationFromProperties(Properties prop) { this.setAccessKey(prop.getProperty(property)); break; case SECRET_KEY: - this.setSecretKey(prop.getProperty(property)); + this.setSecretKey(prop.getProperty(property).toCharArray()); break; case MERCHANT_ID: this.setSellerId(prop.getProperty(property)); @@ -681,7 +700,7 @@ private PayConfig loadConfigurationFromProperties(Properties prop) { private boolean checkIfRequriedPropertiesExist() { if (this.accessKey == null) generateException(Key.ACCESS_KEY); - else if (this.secretKey == null) + else if (this.secretKey == null || this.secretKey.length == 0) generateException(Key.SECRET_KEY); else if (this.merchantId == null) generateException(Key.MERCHANT_ID); @@ -711,7 +730,6 @@ private void generateException(Key propertyKey) { public String toString() { return "PayConfig{" + "accessKeyId=" + accessKey + - ", secretAccessKey=" + secretKey + ", sellerId=" + merchantId + ", region=" + region + ", environment=" + environment + diff --git a/src/com/amazon/pay/impl/Util.java b/src/com/amazon/pay/impl/Util.java index 4e5cf6b..7c00ae9 100644 --- a/src/com/amazon/pay/impl/Util.java +++ b/src/com/amazon/pay/impl/Util.java @@ -30,9 +30,13 @@ import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.Charset; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.Iterator; @@ -70,11 +74,12 @@ public class Util { * * @return signatureBase64 base64 encoded signature using specified secret key */ - public static String getSignature(String stringToSign, String secretKey) throws IllegalStateException, InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException { - Mac mac = Mac.getInstance("HmacSHA256"); - mac.init(new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256")); - byte[] signature = mac.doFinal(stringToSign.getBytes("UTF-8")); - String signatureBase64 = new String(Base64.encodeBase64(signature), "UTF-8"); + public static String getSignature(String stringToSign, char[] secretKey) throws IllegalStateException, InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException { + final ByteBuffer byteBuffer = Charset.forName(ServiceConstants.UTF_8).encode(CharBuffer.wrap(secretKey)); + final Mac mac = Mac.getInstance(ServiceConstants.HMAC_SHA256); + mac.init(new SecretKeySpec(Arrays.copyOf(byteBuffer.array(), byteBuffer.limit()), ServiceConstants.HMAC_SHA256)); + final byte[] signature = mac.doFinal(stringToSign.getBytes(ServiceConstants.UTF_8)); + final String signatureBase64 = new String(Base64.encodeBase64(signature), ServiceConstants.UTF_8); return signatureBase64; } @@ -159,6 +164,9 @@ public static ResponseData httpSendRequest(String method, String url, String url public static ResponseData httpSendRequest(String method, String url, String urlParameters, Map headers, PayConfig config) throws IOException { Map headerMap = new HashMap(); + if (headers != null) { + headerMap.putAll(headers); + } if (config != null) { diff --git a/src/com/amazon/pay/impl/ipn/NotificationFactory.java b/src/com/amazon/pay/impl/ipn/NotificationFactory.java index 8fa5dc2..8aeac1b 100644 --- a/src/com/amazon/pay/impl/ipn/NotificationFactory.java +++ b/src/com/amazon/pay/impl/ipn/NotificationFactory.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/impl/ipn/NotificationVerification.java b/src/com/amazon/pay/impl/ipn/NotificationVerification.java index bf8dd8f..29fb42f 100644 --- a/src/com/amazon/pay/impl/ipn/NotificationVerification.java +++ b/src/com/amazon/pay/impl/ipn/NotificationVerification.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/AuthorizeRequest.java b/src/com/amazon/pay/request/AuthorizeRequest.java index d75ba93..e5c4a04 100644 --- a/src/com/amazon/pay/request/AuthorizeRequest.java +++ b/src/com/amazon/pay/request/AuthorizeRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/CancelOrderReferenceRequest.java b/src/com/amazon/pay/request/CancelOrderReferenceRequest.java index 390c2d7..3019ed3 100644 --- a/src/com/amazon/pay/request/CancelOrderReferenceRequest.java +++ b/src/com/amazon/pay/request/CancelOrderReferenceRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/CaptureRequest.java b/src/com/amazon/pay/request/CaptureRequest.java index 3ceca34..cfa2dd1 100644 --- a/src/com/amazon/pay/request/CaptureRequest.java +++ b/src/com/amazon/pay/request/CaptureRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/ChargeRequest.java b/src/com/amazon/pay/request/ChargeRequest.java index 95445cc..793d373 100644 --- a/src/com/amazon/pay/request/ChargeRequest.java +++ b/src/com/amazon/pay/request/ChargeRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/CloseAuthorizationRequest.java b/src/com/amazon/pay/request/CloseAuthorizationRequest.java index 63ab089..3fcc428 100644 --- a/src/com/amazon/pay/request/CloseAuthorizationRequest.java +++ b/src/com/amazon/pay/request/CloseAuthorizationRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/CloseBillingAgreementRequest.java b/src/com/amazon/pay/request/CloseBillingAgreementRequest.java index a891750..b959a41 100644 --- a/src/com/amazon/pay/request/CloseBillingAgreementRequest.java +++ b/src/com/amazon/pay/request/CloseBillingAgreementRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/CloseOrderReferenceRequest.java b/src/com/amazon/pay/request/CloseOrderReferenceRequest.java index 41ba1c8..3b97108 100644 --- a/src/com/amazon/pay/request/CloseOrderReferenceRequest.java +++ b/src/com/amazon/pay/request/CloseOrderReferenceRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/CreateOrderReferenceForIdRequest.java b/src/com/amazon/pay/request/CreateOrderReferenceForIdRequest.java index 81a7c61..294a81f 100644 --- a/src/com/amazon/pay/request/CreateOrderReferenceForIdRequest.java +++ b/src/com/amazon/pay/request/CreateOrderReferenceForIdRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/GetAuthorizationDetailsRequest.java b/src/com/amazon/pay/request/GetAuthorizationDetailsRequest.java index 6447b74..00cc983 100644 --- a/src/com/amazon/pay/request/GetAuthorizationDetailsRequest.java +++ b/src/com/amazon/pay/request/GetAuthorizationDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/GetBillingAgreementDetailsRequest.java b/src/com/amazon/pay/request/GetBillingAgreementDetailsRequest.java index 233c68d..fb3f70b 100644 --- a/src/com/amazon/pay/request/GetBillingAgreementDetailsRequest.java +++ b/src/com/amazon/pay/request/GetBillingAgreementDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/GetCaptureDetailsRequest.java b/src/com/amazon/pay/request/GetCaptureDetailsRequest.java index f6ef528..379f506 100644 --- a/src/com/amazon/pay/request/GetCaptureDetailsRequest.java +++ b/src/com/amazon/pay/request/GetCaptureDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/GetOrderReferenceDetailsRequest.java b/src/com/amazon/pay/request/GetOrderReferenceDetailsRequest.java index dafcf0c..2583054 100644 --- a/src/com/amazon/pay/request/GetOrderReferenceDetailsRequest.java +++ b/src/com/amazon/pay/request/GetOrderReferenceDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/GetProviderCreditDetailsRequest.java b/src/com/amazon/pay/request/GetProviderCreditDetailsRequest.java index 96e4a7a..05a876a 100644 --- a/src/com/amazon/pay/request/GetProviderCreditDetailsRequest.java +++ b/src/com/amazon/pay/request/GetProviderCreditDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/GetProviderCreditReversalDetailsRequest.java b/src/com/amazon/pay/request/GetProviderCreditReversalDetailsRequest.java index d07ad51..9aad01b 100644 --- a/src/com/amazon/pay/request/GetProviderCreditReversalDetailsRequest.java +++ b/src/com/amazon/pay/request/GetProviderCreditReversalDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/GetRefundDetailsRequest.java b/src/com/amazon/pay/request/GetRefundDetailsRequest.java index cb60760..91f98c7 100644 --- a/src/com/amazon/pay/request/GetRefundDetailsRequest.java +++ b/src/com/amazon/pay/request/GetRefundDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/ListOrderReferenceRequest.java b/src/com/amazon/pay/request/ListOrderReferenceRequest.java index 6bdb3ce..987eaf4 100644 --- a/src/com/amazon/pay/request/ListOrderReferenceRequest.java +++ b/src/com/amazon/pay/request/ListOrderReferenceRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/RefundRequest.java b/src/com/amazon/pay/request/RefundRequest.java index d3fdc35..b05a04c 100644 --- a/src/com/amazon/pay/request/RefundRequest.java +++ b/src/com/amazon/pay/request/RefundRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/ReverseProviderCreditRequest.java b/src/com/amazon/pay/request/ReverseProviderCreditRequest.java index 8beeeee..1bdd4ec 100644 --- a/src/com/amazon/pay/request/ReverseProviderCreditRequest.java +++ b/src/com/amazon/pay/request/ReverseProviderCreditRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/SetOrderReferenceDetailsRequest.java b/src/com/amazon/pay/request/SetOrderReferenceDetailsRequest.java index 37e5169..3ecbbef 100644 --- a/src/com/amazon/pay/request/SetOrderReferenceDetailsRequest.java +++ b/src/com/amazon/pay/request/SetOrderReferenceDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/request/ValidateBillingAgreementRequest.java b/src/com/amazon/pay/request/ValidateBillingAgreementRequest.java index c270999..06c085d 100644 --- a/src/com/amazon/pay/request/ValidateBillingAgreementRequest.java +++ b/src/com/amazon/pay/request/ValidateBillingAgreementRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/response/model/AccountStatus.java b/src/com/amazon/pay/response/model/AccountStatus.java index 7ca7e25..81ae979 100644 --- a/src/com/amazon/pay/response/model/AccountStatus.java +++ b/src/com/amazon/pay/response/model/AccountStatus.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/response/model/ErrorResponse.java b/src/com/amazon/pay/response/model/ErrorResponse.java index 8c84cd8..529eef1 100644 --- a/src/com/amazon/pay/response/model/ErrorResponse.java +++ b/src/com/amazon/pay/response/model/ErrorResponse.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/response/model/GetMerchantAccountStatusResponse.java b/src/com/amazon/pay/response/model/GetMerchantAccountStatusResponse.java index 21cb1c2..c22a3a2 100644 --- a/src/com/amazon/pay/response/model/GetMerchantAccountStatusResponse.java +++ b/src/com/amazon/pay/response/model/GetMerchantAccountStatusResponse.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/response/model/GetMerchantAccountStatusResult.java b/src/com/amazon/pay/response/model/GetMerchantAccountStatusResult.java index 5a6b3ba..d0b0d97 100644 --- a/src/com/amazon/pay/response/model/GetMerchantAccountStatusResult.java +++ b/src/com/amazon/pay/response/model/GetMerchantAccountStatusResult.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/response/parser/Parser.java b/src/com/amazon/pay/response/parser/Parser.java index dca6bc0..779f3d9 100644 --- a/src/com/amazon/pay/response/parser/Parser.java +++ b/src/com/amazon/pay/response/parser/Parser.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index 133e3a4..3c9a6ee 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -153,7 +153,7 @@ public class ServiceConstants { public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.6.5"; + public static final String APPLICATION_LIBRARY_VERSION = "3.7.0"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations @@ -188,4 +188,13 @@ public class ServiceConstants { profileEndpointSandboxMappings = Collections.unmodifiableMap(profileEndpointSandboxMappingsMap); } + public static final String ERROR_DESCRIPTION = "error_description"; + public static final String ERROR = "error"; + public static final String GET = "GET"; + public static final String UTF_8 = "UTF-8"; + public static final String X_AMZ_ACCESS_TOKEN = "x-amz-access-token"; + public static final String AUTH_O2_TOKENINFO_URI = "/auth/o2/tokeninfo"; + public static final String USER_PROFILE_URI = "/user/profile"; + public static final String HMAC_SHA256 = "HmacSHA256"; + } diff --git a/tst/com/amazon/pay/TestConstants.java b/tst/com/amazon/pay/TestConstants.java index c35cc4d..f5e7b9f 100644 --- a/tst/com/amazon/pay/TestConstants.java +++ b/tst/com/amazon/pay/TestConstants.java @@ -26,7 +26,7 @@ public class TestConstants { public static final String userInfoResponse = "{\"user_id\":\"amzn1.account.AF5W6J2OG52NKFJGEN52GEZ5CWFQ\",\"name\":\"Test Buyer\",\"email\":\"testbuyer2@amazon.com\"}"; public static final String merchantId = "TEST_MERCHANT_ID"; public static final String accessKey = "TEST_ACCESS_KEY"; - public static final String secretKey = "TEST_SECRET_KEY"; + public static final char [] secretKey = new char[] {'T','E','S','T','_','S','E','C','R','E','T','_','K','E','Y'}; public static final String region = "us"; public static final String sandbox_mode = "true"; public static final String timeStamp = "2015-12-31T23:59:58Z"; @@ -49,7 +49,7 @@ public class TestConstants { public static final String creditReferenceReversalId = "TEST_CREDIT_REFERENCE_REVERSAL_ID"; public static final String authorizationReferenceId = "TEST_AUTHORIZATION_REFERENCE_ID"; public static final String userProfileURL = "https://api.sandbox.amazon.com/user/profile"; - public static final String tokenInfoURL = "https://api.sandbox.amazon.com/auth/o2/tokeninfo?access_token="; + public static final String tokenInfoURL = "https://api.sandbox.amazon.com/auth/o2/tokeninfo"; public static final String OVERRIDE_SERVICE_URL = "https://override.service.test"; public static final String OVERRIDE_PROFILE_URL = "https://override.profile.test"; public static final String queryId = "OR-12345"; diff --git a/tst/com/amazon/pay/impl/LoginUserInfoTest.java b/tst/com/amazon/pay/impl/LoginUserInfoTest.java index 585cbaf..fb7ae37 100644 --- a/tst/com/amazon/pay/impl/LoginUserInfoTest.java +++ b/tst/com/amazon/pay/impl/LoginUserInfoTest.java @@ -19,6 +19,7 @@ import com.amazon.pay.response.parser.ResponseData; import com.amazon.pay.types.CurrencyCode; import com.amazon.pay.types.Region; +import com.amazon.pay.types.ServiceConstants; import com.amazon.pay.types.User; import java.net.HttpURLConnection; import java.net.URLDecoder; @@ -56,14 +57,14 @@ public void setUp() throws Exception { @Test public void testGetUserInfo() throws Exception { + final Map headerValues = new HashMap(); + headerValues.put(ServiceConstants.X_AMZ_ACCESS_TOKEN, accessToken); final ResponseData tokenInfoResponse = new ResponseData(HttpURLConnection.HTTP_OK, TestConstants.tokenInfoResponse); - final String tokenInfoURL = TestConstants.tokenInfoURL + URLDecoder.decode(accessToken, "UTF-8"); - PowerMockito.doReturn(tokenInfoResponse).when(Util.class, "httpSendRequest", "GET", tokenInfoURL, null, new HashMap(), null); + final String tokenInfoURL = TestConstants.tokenInfoURL; + PowerMockito.doReturn(tokenInfoResponse).when(Util.class, "httpSendRequest", ServiceConstants.GET, tokenInfoURL, null, headerValues, null); final ResponseData userInfoResponse = new ResponseData(HttpURLConnection.HTTP_OK, TestConstants.userInfoResponse); - final Map headerValues = new HashMap(); - headerValues.put("Authorization", "bearer " + URLDecoder.decode(accessToken, "UTF-8")); PowerMockito.doReturn(userInfoResponse).when(Util.class, "httpSendRequest", - "GET", TestConstants.userProfileURL, null, headerValues); + ServiceConstants.GET, TestConstants.userProfileURL, null, headerValues); User user = client.getUserInfo(accessToken, clientId); @@ -74,9 +75,11 @@ public void testGetUserInfo() throws Exception { @Test(expected=AmazonServiceException.class) public void testInvalidAccessToken() throws Exception { + final Map headerValues = new HashMap(); + headerValues.put(ServiceConstants.X_AMZ_ACCESS_TOKEN, accessToken); final ResponseData userProfileErrorResponse = new ResponseData(HttpURLConnection.HTTP_OK, TestConstants.userProfileErrorResponse); - final String tokenInfoURL = TestConstants.tokenInfoURL + URLDecoder.decode(accessToken, "UTF-8"); - PowerMockito.doReturn(userProfileErrorResponse).when(Util.class, "httpSendRequest", "GET", tokenInfoURL, null, new HashMap()); + final String tokenInfoURL = TestConstants.tokenInfoURL; + PowerMockito.doReturn(userProfileErrorResponse).when(Util.class, "httpSendRequest", ServiceConstants.GET, tokenInfoURL, null, headerValues); final User user = client.getUserInfo(accessToken, clientId); } } diff --git a/tst/com/amazon/pay/impl/PaymentsConfigTest.java b/tst/com/amazon/pay/impl/PaymentsConfigTest.java index 8ca4a81..192a464 100644 --- a/tst/com/amazon/pay/impl/PaymentsConfigTest.java +++ b/tst/com/amazon/pay/impl/PaymentsConfigTest.java @@ -92,7 +92,7 @@ public void testPaymentsPropertiesConfigOverride() throws Exception { private void assertConfigValues(PayConfig config, boolean usingOverride) { Assert.assertEquals(config.getAccessKey() , TestConstants.accessKey); - Assert.assertEquals(config.getSecretKey() , TestConstants.secretKey); + Assert.assertArrayEquals(config.getSecretKey() , TestConstants.secretKey); Assert.assertEquals(config.getRegion(), Region.US); Assert.assertEquals(config.getRegion().toString().toLowerCase(), "us"); Assert.assertEquals(Region.valueOf("US"), Region.US); From 3f5467c94d248446217922290618f467c19afd6f Mon Sep 17 00:00:00 2001 From: Shangamesh T Date: Tue, 5 Jul 2022 11:57:21 +0530 Subject: [PATCH 19/21] Amazon Pay Java SDK 3.7.1 --- CHANGES.txt | 3 +++ README.md | 2 +- pom.xml | 4 ++-- src/com/amazon/pay/types/ServiceConstants.java | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 1af8cf4..fa74f04 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,6 @@ +Version 3.7.1 - July 2022 +- Fixed security vulnerabilities in dependencies. + Version 3.7.0 - March 2021 - Fixed following two security risks : 1. Deprecated setSecretKey(String) method & enabled setSecretKey(char[]) in Config & PayConfig diff --git a/README.md b/README.md index 8fe975e..a432bbc 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ * Java 1.6 or higher *(including JCE Java Cryptography Extension)* * Apache Commons Logging 1.2 *(or JCL-over-SLF4J drop in replacement)* * Apache Commons Codec 1.10 -* Google Gson 2.2.2 or higher *(for GetUserInfo and IPN handling only)* +* Google Gson 2.8.9 or higher *(for GetUserInfo and IPN handling only)* Amazon Pay API Integration diff --git a/pom.xml b/pom.xml index 5aba751..2d20884 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazon.pay amazon-pay-java-sdk jar - 3.7.0 + 3.7.1 commons-codec @@ -14,7 +14,7 @@ com.google.code.gson gson - 2.2.2 + 2.8.9 org.json diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index 3c9a6ee..b6ca2c0 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -153,7 +153,7 @@ public class ServiceConstants { public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.7.0"; + public static final String APPLICATION_LIBRARY_VERSION = "3.7.1"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations From 21846dbadd73e19cd3a84e8dd5df2827b9428cdc Mon Sep 17 00:00:00 2001 From: Aniket Vaishnav Date: Sun, 30 Jul 2023 01:17:44 +0530 Subject: [PATCH 20/21] Removed duplicate line --- src/com/amazon/pay/impl/PayClient.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/com/amazon/pay/impl/PayClient.java b/src/com/amazon/pay/impl/PayClient.java index 8706222..11c273f 100755 --- a/src/com/amazon/pay/impl/PayClient.java +++ b/src/com/amazon/pay/impl/PayClient.java @@ -1070,7 +1070,6 @@ private GetAuthorizationDetailsResponseData chargeORO(ChargeRequest chargeReques .setProviderCredit(chargeRequest.getProviderCredit()) .setSellerAuthorizationNote(chargeRequest.getSellerNote()) .setSoftDescriptor(chargeRequest.getSoftDescriptor()) - .setProviderCredit(chargeRequest.getProviderCredit()) ).getDetails().getAmazonAuthorizationId(); authDetails = getAuthorizationDetails(new GetAuthorizationDetailsRequest(authId).setMWSAuthToken(mwsAuthToken)); } else { From 675eff5bde50effa6358d108c0dfbf893af2b8ff Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Tue, 14 May 2024 13:21:27 +0000 Subject: [PATCH 21/21] Added CV1 deprecation note --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a432bbc..3d2e88f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.amazon.pay/amazon-pay-java-sdk/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.amazon.pay/amazon-pay-java-sdk) +> **Important:** This SDK has been deprecated. Amazon Pay will continue to support this version but it will not be updated with new features. New integrations should use [Amazon Pay API SDK (Java)](https://github.com/amzn/amazon-pay-api-sdk-java) & refer this [documentation](https://developer.amazon.com/docs/amazon-pay/intro.html) for more details. + ### Amazon Pay Java SDK ### Requirements

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.amazon.pay amazon-pay-java-sdk jar - 3.4.0 + 3.4.1 commons-codec diff --git a/src/com/amazon/pay/impl/Util.java b/src/com/amazon/pay/impl/Util.java index a45f698..10ef025 100644 --- a/src/com/amazon/pay/impl/Util.java +++ b/src/com/amazon/pay/impl/Util.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -124,9 +124,9 @@ public static ResponseData httpSendRequest(String method, String url, String url BufferedReader in; if (responseCode != 200) { - in = new BufferedReader(new InputStreamReader(con.getErrorStream())); + in = new BufferedReader(new InputStreamReader(con.getErrorStream(), "UTF-8")); } else { - in = new BufferedReader(new InputStreamReader(con.getInputStream())); + in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); } String inputLine; StringBuffer response = new StringBuffer(); diff --git a/src/com/amazon/pay/request/AuthorizeOnBillingAgreementRequest.java b/src/com/amazon/pay/request/AuthorizeOnBillingAgreementRequest.java index b04eb0b..7a8e197 100644 --- a/src/com/amazon/pay/request/AuthorizeOnBillingAgreementRequest.java +++ b/src/com/amazon/pay/request/AuthorizeOnBillingAgreementRequest.java @@ -45,6 +45,7 @@ protected AuthorizeOnBillingAgreementRequest getThis() { private String sellerOrderId; private String storeName; + private String supplementaryData; private String customInformation; /** @@ -180,6 +181,19 @@ public AuthorizeOnBillingAgreementRequest setStoreName(final String storeName) { return this; } + /** + * Set the trusted authorization supplementary data. + * Use only as directed by Amazon Pay. + * + * @param supplementaryData Trusted authorization supplementary data (JSON string) + * + * @return Request object + */ + public AuthorizeOnBillingAgreementRequest setSupplementaryData(final String supplementaryData) { + this.supplementaryData = supplementaryData; + return this; + } + /** * @param customInformation Sets any additional information that you want to include * with this order reference. @@ -341,6 +355,15 @@ public String getStoreName() { return storeName; } + /** + * Returns the trusted authorization supplementary data. + * + * @return supplementaryData as a JSON string + */ + public String getSupplementaryData() { + return supplementaryData; + } + /** * Sets any additional information that you want to include with this order reference. * @@ -374,6 +397,7 @@ public String toString() { + ", inheritShippingAddress=" + inheritShippingAddress + ", sellerOrderId=" + sellerOrderId + ", storeName=" + storeName + + ", supplementaryData=" + supplementaryData + ", customInformation=" + customInformation + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } diff --git a/src/com/amazon/pay/request/CreateOrderReferenceForIdRequest.java b/src/com/amazon/pay/request/CreateOrderReferenceForIdRequest.java index 83a418a..81a7c61 100644 --- a/src/com/amazon/pay/request/CreateOrderReferenceForIdRequest.java +++ b/src/com/amazon/pay/request/CreateOrderReferenceForIdRequest.java @@ -41,6 +41,7 @@ protected CreateOrderReferenceForIdRequest getThis() { private String sellerNote; private String sellerOrderId; private String storeName; + private String supplementaryData; private String customInformation; //conditionally required @@ -296,6 +297,28 @@ public String getStoreName() { return storeName; } + /** + * Set the trusted authorization supplementary data. + * Use only as directed by Amazon Pay. + * + * @param supplementaryData Trusted authorization supplementary data (JSON string) + * + * @return Request object + */ + public CreateOrderReferenceForIdRequest setSupplementaryData(final String supplementaryData) { + this.supplementaryData = supplementaryData; + return this; + } + + /** + * Returns the trusted authorization supplementary data. + * + * @return supplementaryData as a JSON string + */ + public String getSupplementaryData() { + return supplementaryData; + } + /** * Any additional information that you want to include with this order reference. * @param customInformation @@ -341,6 +364,7 @@ public String toString() { ", sellerNote=" + sellerNote + ", sellerOrderId=" + sellerOrderId + ", storeName=" + storeName + + ", supplementaryData=" + supplementaryData + ", customInformation=" + customInformation + "}"; } diff --git a/src/com/amazon/pay/request/RequestHelper.java b/src/com/amazon/pay/request/RequestHelper.java index 9f92e12..96d893a 100644 --- a/src/com/amazon/pay/request/RequestHelper.java +++ b/src/com/amazon/pay/request/RequestHelper.java @@ -144,6 +144,9 @@ public String getPostURL(SetOrderReferenceDetailsRequest request) { if (request.getStoreName() != null) { parameters.put(ServiceConstants.STORE_NAME, request.getStoreName()); } + if (request.getSupplementaryData() != null) { + parameters.put(ServiceConstants.SUPPLEMENTARY_DATA, request.getSupplementaryData()); + } if (request.getCustomInformation() != null) { parameters.put(ServiceConstants.CUSTOM_INFORMATION, request.getCustomInformation()); } @@ -444,13 +447,15 @@ public String getPostURL(AuthorizeOnBillingAgreementRequest request) { if (request.getSoftDescriptor() != null) parameters.put(ServiceConstants.SOFT_DESCRIPTOR, request.getSoftDescriptor()); if (request.getSellerNote() != null) - parameters.put(ServiceConstants.SELLER_NOTE, request.getSellerNote()); + parameters.put(ServiceConstants.BA_SELLER_NOTE, request.getSellerNote()); if (request.getPlatformId() != null) - parameters.put(ServiceConstants.PLATFORM_ID, request.getPlatformId()); + parameters.put(ServiceConstants.BA_PLATFORM_ID, request.getPlatformId()); if (request.getSellerOrderId() != null) parameters.put(ServiceConstants.BA_SELLER_ORDER_ID, request.getSellerOrderId()); if (request.getStoreName() != null) parameters.put(ServiceConstants.BA_STORE_NAME, request.getStoreName()); + if (request.getSupplementaryData() != null) + parameters.put(ServiceConstants.BA_SUPPLEMENTARY_DATA, request.getSupplementaryData()); if (request.getCustomInformation() != null) parameters.put(ServiceConstants.BA_CUSTOM_INFORMATION, request.getCustomInformation()); if (request.getInheritShippingAddress() != null) @@ -501,6 +506,8 @@ public String getPostURL(CreateOrderReferenceForIdRequest request) { parameters.put(ServiceConstants.SELLER_ORDER_ID, request.getSellerOrderId()); if (request.getStoreName() != null) parameters.put(ServiceConstants.STORE_NAME, request.getStoreName()); + if (request.getSupplementaryData() != null) + parameters.put(ServiceConstants.SUPPLEMENTARY_DATA, request.getSupplementaryData()); if (request.getCustomInformation() != null) parameters.put(ServiceConstants.CUSTOM_INFORMATION, request.getCustomInformation()); @@ -587,6 +594,8 @@ public String getPostURL(SetOrderAttributesRequest request){ parameters.put(ServiceConstants.ORDER_ATTRIBUTES_SELLER_ORDER_ID, request.getSellerOrderId()); if (request.getStoreName() != null) parameters.put(ServiceConstants.ORDER_ATTRIBUTES_STORE_NAME, request.getStoreName()); + if (request.getSupplementaryData() != null) + parameters.put(ServiceConstants.ORDER_ATTRIBUTES_SUPPLEMENTARY_DATA, request.getSupplementaryData()); if (request.getPlatformId() != null) parameters.put(ServiceConstants.ORDER_ATTRIBUTES_PLATFORM_ID, request.getPlatformId()); if (request.getCustomInformation() != null) diff --git a/src/com/amazon/pay/request/SetOrderAttributesRequest.java b/src/com/amazon/pay/request/SetOrderAttributesRequest.java index 5aea33a..4a0b6a6 100644 --- a/src/com/amazon/pay/request/SetOrderAttributesRequest.java +++ b/src/com/amazon/pay/request/SetOrderAttributesRequest.java @@ -45,6 +45,7 @@ protected SetOrderAttributesRequest getThis() { private Boolean requestPaymentAuthorization; private String sellerOrderId; private String storeName; + private String supplementaryData; private String customInformation; private String paymentServiceProviderId; private String paymentServiceProviderOrderId; @@ -242,6 +243,28 @@ public SetOrderAttributesRequest setStoreName(String storeName) { return this; } + /** + * Returns the trusted authorization supplementary data. + * + * @return supplementaryData as a JSON string + */ + public String getSupplementaryData() { + return supplementaryData; + } + + /** + * Set the trusted authorization supplementary data. + * Use only as directed by Amazon Pay. + * + * @param supplementaryData Trusted authorization supplementary data (JSON string) + * + * @return Request object + */ + public SetOrderAttributesRequest setSupplementaryData(final String supplementaryData) { + this.supplementaryData = supplementaryData; + return this; + } + /** * Returns the custom information * @@ -347,6 +370,7 @@ public String toString() { + ", sellerNote=" + sellerNote + ", sellerOrderId=" + sellerOrderId + ", storeName=" + storeName + + ", supplementaryData=" + supplementaryData + ", customInformation=" + customInformation + ", requesPaymentAuthorization=" + requestPaymentAuthorization.toString() + ", paymentServiceProviderId=" + paymentServiceProviderId diff --git a/src/com/amazon/pay/request/SetOrderReferenceDetailsRequest.java b/src/com/amazon/pay/request/SetOrderReferenceDetailsRequest.java index 92ce501..37e5169 100644 --- a/src/com/amazon/pay/request/SetOrderReferenceDetailsRequest.java +++ b/src/com/amazon/pay/request/SetOrderReferenceDetailsRequest.java @@ -39,6 +39,7 @@ protected SetOrderReferenceDetailsRequest getThis() { private String sellerNote; private String sellerOrderId; private String storeName; + private String supplementaryData; private String customInformation; private Boolean requestPaymentAuthorization; @@ -125,6 +126,19 @@ public SetOrderReferenceDetailsRequest setStoreName(String storeName) { return this; } + /** + * Set the trusted authorization supplementary data. + * Use only as directed by Amazon Pay. + * + * @param supplementaryData Trusted authorization supplementary data (JSON string) + * + * @return Request object + */ + public SetOrderReferenceDetailsRequest setSupplementaryData(final String supplementaryData) { + this.supplementaryData = supplementaryData; + return this; + } + /** * Any additional information that you want to include with this order reference. * @@ -193,6 +207,15 @@ public String getStoreName() { return storeName; } + /** + * Returns the trusted authorization supplementary data. + * + * @return supplementaryData as a JSON string + */ + public String getSupplementaryData() { + return supplementaryData; + } + /** * * @return CustomInformation @@ -241,6 +264,7 @@ public String toString() { + ", sellerNote=" + sellerNote + ", sellerOrderId=" + sellerOrderId + ", storeName=" + storeName + + ", supplementaryData=" + supplementaryData + ", customInformation=" + customInformation + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } diff --git a/src/com/amazon/pay/response/model/ErrorResponse.java b/src/com/amazon/pay/response/model/ErrorResponse.java index 49a1706..8c84cd8 100644 --- a/src/com/amazon/pay/response/model/ErrorResponse.java +++ b/src/com/amazon/pay/response/model/ErrorResponse.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -22,18 +22,23 @@ import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; + @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = { "error", - "requestId" + "requestId", + "requestID" }) @XmlRootElement(name = "ErrorResponse") public class ErrorResponse { @XmlElement(name = "Error", required = true) protected List error; - @XmlElement(name = "RequestId", required = true) + @XmlElement(name = "RequestId") protected String requestId; + // Throttled error requests come back with "RequestID" node names instaed of "RequestId" + @XmlElement(name = "RequestID") + protected String requestID; public ErrorResponse() { super(); @@ -47,8 +52,13 @@ public List getError() { return this.error; } + // Regardless of type of error, return the RequestId in a consistent way public String getRequestId() { - return requestId; + if (requestId != null) { + return requestId; + } else { + return requestID; + } } diff --git a/src/com/amazon/pay/response/model/SellerOrderAttributes.java b/src/com/amazon/pay/response/model/SellerOrderAttributes.java index 5fa1ba9..49a652d 100644 --- a/src/com/amazon/pay/response/model/SellerOrderAttributes.java +++ b/src/com/amazon/pay/response/model/SellerOrderAttributes.java @@ -26,6 +26,7 @@ @XmlType(name = "SellerOrderAttributes", propOrder = { "sellerOrderId", "storeName", + "supplementaryData", "orderItemCategories", "customInformation", "sellerId" @@ -36,6 +37,8 @@ public class SellerOrderAttributes { protected String sellerOrderId; @XmlElement(name = "StoreName") protected String storeName; + @XmlElement(name = "SupplementaryData") + protected String supplementaryData; @XmlElement(name = "OrderItemCategories") protected OrderItemCategories orderItemCategories; @XmlElement(name = "CustomInformation") @@ -72,6 +75,16 @@ public String getStoreName() { } + /** + * Returns the trusted authorization supplementary data. + * + * @return supplementaryData as a JSON string + */ + public String getSupplementaryData() { + return supplementaryData; + } + + /** * * @return orderItemCategories @@ -110,6 +123,7 @@ public String toString() { return "SellerOrderAttributes{" + "sellerOrderId=" + sellerOrderId + ", storeName=" + storeName + + ", supplementaryData=" + supplementaryData + ", sellerId=" + sellerId + ", orderItemCategorie=" + orderItemCategories + ", customInformation=" + customInformation + '}'; diff --git a/src/com/amazon/pay/response/parser/Parser.java b/src/com/amazon/pay/response/parser/Parser.java index c754ce0..dca6bc0 100644 --- a/src/com/amazon/pay/response/parser/Parser.java +++ b/src/com/amazon/pay/response/parser/Parser.java @@ -238,7 +238,7 @@ public static void generateErrorException(ResponseData rawResponse) throws Amazo final StringReader reader = new StringReader(noNamespaceXML); final Unmarshaller unmarshaller = context.createUnmarshaller(); - final XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory(); + final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); xmlInputFactory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false); xmlInputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, false); try { diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index 0a1ebc9..e496eca 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -42,6 +42,9 @@ public class ServiceConstants { public static final String BA_CUSTOM_INFORMATION = "SellerOrderAttributes.CustomInformation"; public static final String BA_SELLER_ORDER_ID = "SellerOrderAttributes.SellerOrderId"; public static final String BA_STORE_NAME = "SellerOrderAttributes.StoreName"; + public static final String BA_SUPPLEMENTARY_DATA = "SellerOrderAttributes.SupplementaryData"; + public static final String BA_SELLER_NOTE = "SellerNote"; + public static final String BA_PLATFORM_ID = "PlatformId"; public static final String BILLING_AGREEMENT_PLATFORM_ID = "BillingAgreementAttributes.PlatformId"; public static final String BILLING_AGREEMENT_SELLER_BILLING_AGREEMENT_ID = "BillingAgreementAttributes.SellerBillingAgreementAttributes.SellerBillingAgreementId"; public static final String BILLING_AGREEMENT_SELLER_CUSTOM_INFORMATION = "BillingAgreementAttributes.SellerBillingAgreementAttributes.CustomInformation"; @@ -75,6 +78,7 @@ public class ServiceConstants { public static final String SELLER_REFUND_NOTE = "SellerRefundNote"; public static final String SOFT_DESCRIPTOR = "SoftDescriptor"; public static final String STORE_NAME = "OrderReferenceAttributes.SellerOrderAttributes.StoreName"; + public static final String SUPPLEMENTARY_DATA = "OrderReferenceAttributes.SellerOrderAttributes.SupplementaryData"; public static final String REQUEST_PAYMENT_AUTHORIZATION = "OrderReferenceAttributes.RequestPaymentAuthorization"; public static final String TRANSACTION_TIMEOUT = "TransactionTimeout"; public static final String ORDER_ATTRIBUTES_AMOUNT = "OrderAttributes.OrderTotal.Amount"; @@ -88,6 +92,7 @@ public class ServiceConstants { public static final String ORDER_ATTRIBUTES_ORDER_ITEM_CATEGORIES = "OrderAttributes.SellerOrderAttributes.OrderItemCategories.OrderItemCategory"; public static final String ORDER_ATTRIBUTES_SELLER_ORDER_ID = "OrderAttributes.SellerOrderAttributes.SellerOrderId"; public static final String ORDER_ATTRIBUTES_STORE_NAME = "OrderAttributes.SellerOrderAttributes.StoreName"; + public static final String ORDER_ATTRIBUTES_SUPPLEMENTARY_DATA = "OrderAttributes.SellerOrderAttributes.SupplementaryData"; // API Request Parameters - (Mostly) Required Parameters public static final String ACTION = "Action"; @@ -142,7 +147,7 @@ public class ServiceConstants { public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.4.0"; + public static final String APPLICATION_LIBRARY_VERSION = "3.4.1"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations diff --git a/tst/com/amazon/pay/TestConstants.java b/tst/com/amazon/pay/TestConstants.java index 5d14d08..97e7c62 100644 --- a/tst/com/amazon/pay/TestConstants.java +++ b/tst/com/amazon/pay/TestConstants.java @@ -16,8 +16,9 @@ package com.amazon.pay; public class TestConstants { + public static final String billingAgreementId = "CTEST_AMAZON_BILLING_AGREEMENT_ID"; - public static final String billinAgreementIdDraft ="TEST_AMAZON_BILLING_AGREEMENT_ID_DRAFT"; + public static final String billinAgreementIdDraft = "TEST_AMAZON_BILLING_AGREEMENT_ID_DRAFT"; public static final String addressConsentToken = "TEST_ADDRESS_CONSENT_TOKEN"; public static final String clientId = "TEST_CLIENT_ID"; public static final String tokenInfoResponse = "{\"aud\":\"TEST_CLIENT_ID\",\"user_id\":\"amzn1.account.AF5W6J2OG52NKFJGEN52GEZ5CWFQ\",\"iss\":\"https://www.amazon.com\",\"exp\":2370,\"app_id\":\"amzn1.application.5286e3c9cac24d8188908b500f4a05a5\",\"iat\":1446510240}"; @@ -33,8 +34,8 @@ public class TestConstants { public static final String platformId = "A11WKBU7ADWTAU"; public static final String MWS_URL = "https://mws.amazonservices.com/OffAmazonPayments_Sandbox/2013-01-01"; public static final String mwsAuthToken = "TEST_MWS_AUTH_TOKEN"; - public static final String sampletext ="testNote"; - public static final String storeName ="TestStore"; + public static final String sampletext = "testNote"; + public static final String storeName = "TestStore"; public static final String sellerBillingAgreementId = "TEST_BILLING_AGREEMENT_ID"; public static final String softDescriptor = "AMZNTestTest"; public static final String amazonOrderReferenceId = "AMAZON_ORDER_REFERENCE_ID"; @@ -55,4 +56,6 @@ public class TestConstants { public static final String queryIdType = "SellerOrderId"; public static final int pageSize = 5; public static final String nextPageToken = "1eUc0QkJMVnJpcGgrbDNHclpIUT09IiwibWFya2V0cGxhY2VJZCI6IkEzQlhCMFlOM1hIMTdIIn0="; + 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 }}"; + } diff --git a/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java b/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java index 4a58cc8..df4f285 100644 --- a/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java +++ b/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java @@ -195,6 +195,7 @@ public void testSetOrderReferenceDetailsRequest() { .setPlatformId("platformId") .setSellerOrderId("sellerOrderId") .setStoreName("testStore") + .setSupplementaryData(TestConstants.SUPPLEMENTARY_DATA) .setCustomInformation("customInfo") .setSellerNote("sampleText") .setOrderCurrencyCode(CurrencyCode.USD) @@ -204,8 +205,9 @@ public void testSetOrderReferenceDetailsRequest() { Assert.assertEquals(request.getOrderAmount(), "2"); Assert.assertEquals(request.getOrderCurrencyCode(), CurrencyCode.USD); Assert.assertEquals(request.getMwsAuthToken(), TestConstants.mwsAuthToken); - Assert.assertEquals(request.getSellerOrderId(),"sellerOrderId"); + Assert.assertEquals(request.getSellerOrderId(), "sellerOrderId"); Assert.assertEquals(request.getStoreName(), "testStore"); + Assert.assertEquals(request.getSupplementaryData(), TestConstants.SUPPLEMENTARY_DATA); Assert.assertEquals(request.getPlatformId(), "platformId"); Assert.assertEquals(request.getCustomInformation(), "customInfo"); Assert.assertEquals(request.getSellerNote(), "sampleText"); @@ -223,6 +225,7 @@ private AuthorizeOnBillingAgreementRequest testAuthorizeOnBillingAgreementSetup( .setSellerNote("sampletex") .setSellerOrderId("Order123") .setStoreName("Store") + .setSupplementaryData(TestConstants.SUPPLEMENTARY_DATA) .setTransactionTimeout("10") .setAuthorizationCurrencyCode(CurrencyCode.USD) .setSoftDescriptor("AMZN*Test"); @@ -243,6 +246,7 @@ private void testAuthorizeOnBillingAgreementAssert(final AuthorizeOnBillingAgree Assert.assertEquals("sampletex", request.getSellerNote()); Assert.assertEquals("Order123", request.getSellerOrderId()); Assert.assertEquals("Store", request.getStoreName()); + Assert.assertEquals(TestConstants.SUPPLEMENTARY_DATA, request.getSupplementaryData()); Assert.assertEquals("AMZN*Test", request.getSoftDescriptor()); } @@ -418,6 +422,7 @@ public void testCreateOrderReferenceForId() { .setSellerNote("Test Seller Note") .setSellerOrderId("Test Order ID") .setStoreName(TestConstants.storeName) + .setSupplementaryData(TestConstants.SUPPLEMENTARY_DATA) .setCustomInformation("Test Custom Information") .setOrderTotalAmount("567.89") .setPlatformId(TestConstants.platformId); @@ -430,6 +435,7 @@ public void testCreateOrderReferenceForId() { Assert.assertEquals(request.getSellerNote(), "Test Seller Note"); Assert.assertEquals(request.getSellerOrderId(), "Test Order ID"); Assert.assertEquals(request.getStoreName(), TestConstants.storeName); + Assert.assertEquals(request.getSupplementaryData(), TestConstants.SUPPLEMENTARY_DATA); Assert.assertEquals(request.getCustomInformation(), "Test Custom Information"); Assert.assertEquals(request.getOrderTotalAmount(), "567.89"); Assert.assertEquals(request.getPlatformId(), TestConstants.platformId); @@ -480,6 +486,7 @@ public void testSetOrderAttributes() { .setPlatformId("platformId") .setSellerOrderId("sellerOrderId") .setStoreName("storeName") + .setSupplementaryData(TestConstants.SUPPLEMENTARY_DATA) .setRequestPaymentAuthorization(true) .setPaymentServiceProviderId("paymentServiceProviderId") .setPaymentServiceProviderOrderId("paymentServiceProviderOrderId") @@ -490,8 +497,9 @@ public void testSetOrderAttributes() { Assert.assertEquals(request.getCustomInformation(), "customInfo"); Assert.assertEquals(request.getSellerNote(), "sellerNote"); Assert.assertEquals(request.getPlatformId(), "platformId"); - Assert.assertEquals(request.getSellerOrderId(),"sellerOrderId"); - Assert.assertEquals(request.getStoreName(),"storeName"); + Assert.assertEquals(request.getSellerOrderId(), "sellerOrderId"); + Assert.assertEquals(request.getStoreName(), "storeName"); + Assert.assertEquals(request.getSupplementaryData(), TestConstants.SUPPLEMENTARY_DATA); Assert.assertEquals(request.getRequestPaymentAuthorization(),true); Assert.assertEquals(request.getPaymentServiceProviderId(),"paymentServiceProviderId"); Assert.assertEquals(request.getPaymentServiceProviderOrderId(),"paymentServiceProviderOrderId"); diff --git a/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java b/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java index b2e7551..a5ed253 100644 --- a/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java +++ b/tst/com/amazon/pay/response/PaymentsAPIResponseTest.java @@ -14,6 +14,7 @@ */ package com.amazon.pay.response; +import com.amazon.pay.TestConstants; import com.amazon.pay.exceptions.AmazonServiceException; import com.amazon.pay.response.model.AccountStatus; import com.amazon.pay.response.model.AuthorizationDetails; @@ -113,15 +114,16 @@ public void testGetOrderReferenceDetailsResponse() throws Exception { Assert.assertEquals(res.getRequestId(), "5f20169b-7ab2-11df-bcef-d35615e2b044"); Assert.assertEquals(res.getDetails().getReleaseEnvironment().value(), "LIVE"); Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getCountryCode(), "US"); - Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getCity(), "New York"); + Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getCity(), "äöüßâêîôûàèùé"); Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getPostalCode(), "10101-9876"); - Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getStateOrRegion(), "NY"); + Assert.assertEquals(res.getDetails().getDestination().getPhysicalDestination().getStateOrRegion(), "宋 俊华 市区-徐汇区 广东省"); Assert.assertNotNull(res.getDetails().getPaymentDescriptor()); Assert.assertEquals(res.getDetails().getPaymentDescriptor().getName() , "Visa"); Assert.assertEquals(res.getDetails().getPaymentDescriptor().getAccountNumberTail() , "11"); Assert.assertEquals(res.getDetails().getPaymentDescriptor().getFullDescriptor() , "Amazon Pay (Visa **11)"); Assert.assertEquals(res.getDetails().getPaymentDescriptor().isUseAmazonBalanceFirst() , false); Assert.assertNotEquals(res.getDetails().getPaymentDescriptor().isUseAmazonBalanceFirst(), true); + Assert.assertEquals(res.getDetails().getSellerOrderAttributes().getSupplementaryData(), TestConstants.SUPPLEMENTARY_DATA); Assert.assertEquals(res.toXML(), rawResponse); } @@ -216,6 +218,7 @@ public void testSetOrderReferenceDetailsResponse() throws Exception { Assert.assertEquals(res.getDetails().getOrderTotal().getCurrencyCode(), "USD"); Assert.assertEquals(res.getDetails().getSellerOrderAttributes().getSellerOrderId(), "test1234"); Assert.assertEquals(res.getDetails().getSellerOrderAttributes().getStoreName(), "myTestStore"); + Assert.assertEquals(res.getDetails().getSellerOrderAttributes().getSupplementaryData(), TestConstants.SUPPLEMENTARY_DATA); Assert.assertEquals(res.getDetails().getSellerOrderAttributes().getCustomInformation(), "myCustomInformation"); Assert.assertEquals(res.getDetails().getRequestPaymentAuthorization(), false); @@ -838,6 +841,21 @@ public void testErrorResponse() throws Exception { } } + @Test + public void testThrottledRequest() throws Exception { + final String rawResponse = loadTestFile("Throttled.xml"); + final ResponseData response = new ResponseData(HttpURLConnection.HTTP_UNAVAILABLE, rawResponse); + try { + Parser.marshalXML(ErrorResponse.class, response); + Assert.fail(); + } catch (AmazonServiceException e) { + Assert.assertEquals(e.getResponseXml(), rawResponse); + Assert.assertEquals(e.getStatusCode(), HttpURLConnection.HTTP_UNAVAILABLE); + Assert.assertEquals(e.getErrorCode(), "RequestThrottled"); + Assert.assertEquals(e.getRequestId(), "d702fd8e-206f-4da4-95e0-1e7422474077"); + } + } + @Test public void testListOrderReferenceResponse() throws Exception { final String rawResponse = loadTestFile("ListOrderReferenceResponse.xml"); diff --git a/tst/com/amazon/pay/response/xml/GetOrderReferenceDetailsResponse.xml b/tst/com/amazon/pay/response/xml/GetOrderReferenceDetailsResponse.xml index 48ee5e8..c8e3780 100644 --- a/tst/com/amazon/pay/response/xml/GetOrderReferenceDetailsResponse.xml +++ b/tst/com/amazon/pay/response/xml/GetOrderReferenceDetailsResponse.xml @@ -8,11 +8,14 @@ Draft + + {"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 }} + Physical - New York - NY + äöüßâêîôûàèùé + 宋 俊华 市区-徐汇区 广东省 10101-9876 US @@ -29,4 +32,4 @@ 5f20169b-7ab2-11df-bcef-d35615e2b044 - \ No newline at end of file + diff --git a/tst/com/amazon/pay/response/xml/SetOrderReferenceDetailsResponse.xml b/tst/com/amazon/pay/response/xml/SetOrderReferenceDetailsResponse.xml index 9cba5fb..d0cb951 100644 --- a/tst/com/amazon/pay/response/xml/SetOrderReferenceDetailsResponse.xml +++ b/tst/com/amazon/pay/response/xml/SetOrderReferenceDetailsResponse.xml @@ -20,6 +20,7 @@ myTestStore myCustomInformation test1234 + {"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 }} USD diff --git a/tst/com/amazon/pay/response/xml/Throttled.xml b/tst/com/amazon/pay/response/xml/Throttled.xml new file mode 100644 index 0000000..7290034 --- /dev/null +++ b/tst/com/amazon/pay/response/xml/Throttled.xml @@ -0,0 +1,9 @@ + + + + + RequestThrottled + Request is throttled + + d702fd8e-206f-4da4-95e0-1e7422474077 + From 5a3547d00c796aab8f0c8ac12e0310f7a5c4678a Mon Sep 17 00:00:00 2001 From: BJ Guillot Date: Mon, 4 Feb 2019 20:47:24 +0000 Subject: [PATCH 07/21] Amazon Pay Java SDK 3.5.0 --- CHANGES.txt | 6 + ...zon-pay-3.4.1.jar => amazon-pay-3.5.0.jar} | Bin 233645 -> 234217 bytes pom.xml | 2 +- .../request/ConfirmOrderReferenceRequest.java | 110 +++++++++++++++++- src/com/amazon/pay/request/RequestHelper.java | 30 +++-- .../amazon/pay/types/ServiceConstants.java | 6 +- tst/com/amazon/pay/TestConstants.java | 5 +- .../amazon/pay/impl/SignatureAndURLTest.java | 75 +++++++++++- .../pay/request/PaymentsAPIRequestTest.java | 12 +- 9 files changed, 229 insertions(+), 17 deletions(-) rename dist/{amazon-pay-3.4.1.jar => amazon-pay-3.5.0.jar} (82%) diff --git a/CHANGES.txt b/CHANGES.txt index 43d93a0..a3eff2f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,9 @@ +Version 3.5.0 - February 2019 +- ConfirmOrderReference API has four new request parameters: + SuccessUrl, FailureUrl, AuthorizationAmount, and AuthorizationCurrencyCode + For usage instructions, please consult the + Amazon Pay Strong Customer Authentication (SCA) Upgrade Integration Guide + Version 3.4.1 - October 2018 - Updated XMLInputFactory.newFactory() to XMLInputFactory.newInstance() in generateErrorException method (now consistent with 3.0.1 release). - Add parameter SupplementaryData to SetOrderAttributes and SetOrderReferenceDetails API calls. Only use this field at the specific direction of Amazon Pay. diff --git a/dist/amazon-pay-3.4.1.jar b/dist/amazon-pay-3.5.0.jar similarity index 82% rename from dist/amazon-pay-3.4.1.jar rename to dist/amazon-pay-3.5.0.jar index 9fab6f7d756e6e2fae73ca76919ba906da6ce0c1..0655eb82fc2a3d294d5f548d8354904171b510fd 100644 GIT binary patch delta 24478 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 z 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 diff --git a/pom.xml b/pom.xml index fdce8f3..e754013 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazon.pay amazon-pay-java-sdk jar - 3.4.1 + 3.5.0 commons-codec diff --git a/src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java b/src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java index ffea2b5..1550b2d 100644 --- a/src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java +++ b/src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -14,6 +14,7 @@ */ package com.amazon.pay.request; +import com.amazon.pay.types.CurrencyCode; import java.io.Serializable; /** @@ -32,15 +33,22 @@ protected ConfirmOrderReferenceRequest getThis() { //required parameters private String amazonOrderReferenceId; + //optional parameters + private String successUrl; + private String failureUrl; + private String authorizationAmount; + private CurrencyCode authorizationCurrencyCode; + /** - * + * Constructor requires an order reference identifier. * @param amazonOrderReferenceId The order reference identifier. */ - public ConfirmOrderReferenceRequest(String amazonOrderReferenceId){ + public ConfirmOrderReferenceRequest(String amazonOrderReferenceId) { this.amazonOrderReferenceId = amazonOrderReferenceId; } /** + * The order reference identifier. * * @return AmazonOrderReferenceId */ @@ -48,6 +56,98 @@ public String getAmazonOrderReferenceId() { return amazonOrderReferenceId; } + /** + * @param currencyCode + * Three-digit currency code. In ISO 4217 format. + * + * @return ConfirmOrderReferenceRequest + * Container holding Confirm Order Reference operation parameters + */ + public ConfirmOrderReferenceRequest setAuthorizationCurrencyCode(final CurrencyCode currencyCode) { + this.authorizationCurrencyCode = currencyCode; + return this; + } + + /** + * Represents currency code for Confirm Order Reference request + * + * @return CurrencyCode + * Enum representing three-character currency code (ISO 4217) + */ + public CurrencyCode getAuthorizationCurrencyCode() { + return authorizationCurrencyCode; + } + + /** + * @param authorizationAmount + * The amount to authorize during MFA completion. + * Use this parameter if you want to set a payment + * amount that is different than the OrderTotal + * provided in the SetOrderReferenceDetails + * operation call. + * + * If this parameter is not set, the amount authorized + * during MFA will be equal to the OrderTotal. + * + * @return ConfirmOrderReferenceRequest + * Container holding Confirm Order Reference operation parameters + */ + public ConfirmOrderReferenceRequest setAuthorizationAmount(final String authorizationAmount) { + this.authorizationAmount = authorizationAmount; + return this; + } + + /** + * Represents the amount to be authorized during MFA completion. + * + * @return String + */ + public String getAuthorizationAmount() { + return authorizationAmount; + } + + /** + * @param successUrl + * The buyer is redirected to this URL if the MFA is successful. + * + * @return ConfirmOrderReferenceRequest + * Container holding Confirm Order Reference operation parameters + */ + public ConfirmOrderReferenceRequest setSuccessUrl(final String successUrl) { + this.successUrl = successUrl; + return this; + } + + /** + * Represents the URL buyer is redirected to when MFA is successful. + * + * @return String + */ + public String getSuccessUrl() { + return successUrl; + } + + /** + * @param failureUrl + * The buyer is redirected to this URL if the MFA is not successful. + * + * @return ConfirmOrderReferenceRequest + * Container holding Confirm Order Reference operation parameters + */ + public ConfirmOrderReferenceRequest setFailureUrl(final String failureUrl) { + this.failureUrl = failureUrl; + return this; + } + + /** + * Represents the URL buyer is redirected to when MFA is not successful. + * + * @return String + */ + public String getFailureUrl() { + return failureUrl; + } + /** * Returns a string representation of this object; useful for testing and * debugging. @@ -60,6 +160,10 @@ public String getAmazonOrderReferenceId() { public String toString() { return "ConfirmOrderReferenceRequest{" + "amazonOrderReferenceId=" + amazonOrderReferenceId + + ", authorizationAmount=" + authorizationAmount + + ", authorizationCurrencyCode=" + authorizationCurrencyCode + + ", successUrl=" + successUrl + + ", failureUrl=" + failureUrl + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } diff --git a/src/com/amazon/pay/request/RequestHelper.java b/src/com/amazon/pay/request/RequestHelper.java index 96d893a..a47edca 100644 --- a/src/com/amazon/pay/request/RequestHelper.java +++ b/src/com/amazon/pay/request/RequestHelper.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -252,6 +252,22 @@ public String getPostURL(ConfirmOrderReferenceRequest request) { if (request.getAmazonOrderReferenceId() != null) { parameters.put(ServiceConstants.AMAZON_ORDER_REFERENCE_ID, request.getAmazonOrderReferenceId()); } + if (request.getSuccessUrl() != null) { + parameters.put(ServiceConstants.SUCCESS_URL, request.getSuccessUrl()); + } + if (request.getFailureUrl() != null) { + parameters.put(ServiceConstants.FAILURE_URL, request.getFailureUrl()); + } + + if (request.getAuthorizationAmount() != null) { + parameters.put(ServiceConstants.AUTHORIZATION_AMOUNT, request.getAuthorizationAmount()); + + if (request.getAuthorizationCurrencyCode() == null) { + request.setAuthorizationCurrencyCode(payConfig.getCurrencyCode()); + } + parameters.put(ServiceConstants.AUTHORIZATION_CURRENCEYCODE, request.getAuthorizationCurrencyCode().toString()); + } + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -298,9 +314,9 @@ public String getPostURL(CloseAuthorizationRequest request) { public String getPostURL(RefundRequest request) { Map parameters = new TreeMap(); parameters.put(ServiceConstants.ACTION, ServiceConstants.REFUND); - if (request.getRefundCurrencyCode() == null) + if (request.getRefundCurrencyCode() == null) { request.setRefundCurrencyCode(payConfig.getCurrencyCode()); - + } if (request.getAmazonCaptureId() != null) { parameters.put(ServiceConstants.AMAZON_CAPTURE_ID, request.getAmazonCaptureId()); } @@ -432,13 +448,13 @@ public String getPostURL(AuthorizeOnBillingAgreementRequest request) { request.setAuthorizationCurrencyCode(payConfig.getCurrencyCode()); if (request.getAmazonBillingAgreementId() != null) parameters.put(ServiceConstants.AMAZON_BILLING_AGREEMENT_ID, request.getAmazonBillingAgreementId()); - if (request.getAuthorizationReferenceId() != null) + if (request.getAuthorizationReferenceId() != null) parameters.put(ServiceConstants.AUTHORIZATION_REFERENCE_ID, request.getAuthorizationReferenceId()); - if (request.getAuthorizationAmount() != null) + if (request.getAuthorizationAmount() != null) parameters.put(ServiceConstants.AUTHORIZATION_AMOUNT, request.getAuthorizationAmount()); - if (request.getAuthorizationCurrencyCode() != null) + if (request.getAuthorizationCurrencyCode() != null) parameters.put(ServiceConstants.AUTHORIZATION_CURRENCEYCODE, request.getAuthorizationCurrencyCode().toString()); - if (request.getSellerAuthorizationNote() != null) + if (request.getSellerAuthorizationNote() != null) parameters.put(ServiceConstants.SELLER_AUTHORIZATION_NOTE, request.getSellerAuthorizationNote()); if (request.getTransactionTimeout() != null) parameters.put(ServiceConstants.TRANSACTION_TIMEOUT, request.getTransactionTimeout()); diff --git a/src/com/amazon/pay/types/ServiceConstants.java b/src/com/amazon/pay/types/ServiceConstants.java index e496eca..074c376 100644 --- a/src/com/amazon/pay/types/ServiceConstants.java +++ b/src/com/amazon/pay/types/ServiceConstants.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -93,6 +93,8 @@ public class ServiceConstants { public static final String ORDER_ATTRIBUTES_SELLER_ORDER_ID = "OrderAttributes.SellerOrderAttributes.SellerOrderId"; public static final String ORDER_ATTRIBUTES_STORE_NAME = "OrderAttributes.SellerOrderAttributes.StoreName"; public static final String ORDER_ATTRIBUTES_SUPPLEMENTARY_DATA = "OrderAttributes.SellerOrderAttributes.SupplementaryData"; + public static final String SUCCESS_URL = "SuccessUrl"; + public static final String FAILURE_URL = "FailureUrl"; // API Request Parameters - (Mostly) Required Parameters public static final String ACTION = "Action"; @@ -147,7 +149,7 @@ public class ServiceConstants { public static final String GET_MERCHANT_ACCOUNT_STATUS = "GetMerchantAccountStatus"; // SDK version - public static final String APPLICATION_LIBRARY_VERSION = "3.4.1"; + public static final String APPLICATION_LIBRARY_VERSION = "3.5.0"; public static final String GITHUB_SDK_NAME = "amazon-pay-sdk-java"; // Exponential backoff wait times (milliseconds) for retry operations diff --git a/tst/com/amazon/pay/TestConstants.java b/tst/com/amazon/pay/TestConstants.java index 97e7c62..6e192bb 100644 --- a/tst/com/amazon/pay/TestConstants.java +++ b/tst/com/amazon/pay/TestConstants.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -57,5 +57,8 @@ public class TestConstants { public static final int pageSize = 5; public static final String nextPageToken = "1eUc0QkJMVnJpcGgrbDNHclpIUT09IiwibWFya2V0cGxhY2VJZCI6IkEzQlhCMFlOM1hIMTdIIn0="; 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 }}"; + public static final String AUTHORIZE_AMOUNT = "0.01"; + public static final String SUCCESS_URL = "https://pay.amazon.com/success.html"; + public static final String FAILURE_URL = "https://pay.amazon.com/failure.html"; } diff --git a/tst/com/amazon/pay/impl/SignatureAndURLTest.java b/tst/com/amazon/pay/impl/SignatureAndURLTest.java index d233769..8773aca 100644 --- a/tst/com/amazon/pay/impl/SignatureAndURLTest.java +++ b/tst/com/amazon/pay/impl/SignatureAndURLTest.java @@ -1,5 +1,5 @@ /** - * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ import com.amazon.pay.request.RequestHelper; import com.amazon.pay.TestConstants; +import com.amazon.pay.request.ConfirmOrderReferenceRequest; import com.amazon.pay.request.GetOrderReferenceDetailsRequest; import com.amazon.pay.request.SetOrderReferenceDetailsRequest; import com.amazon.pay.response.model.Environment; @@ -117,4 +118,76 @@ public void testRequestParameterConstructorSignature_2() throws Exception { Assert.assertEquals(expectedURL, this.helper.getPostURL(request)); } + @Test + public void testRequestUrlAndSignatureForConfirmOrderReference() throws Exception { + // Non-MFA Confirm request + this.helper = new RequestHelper(config); + PowerMockito.stub(PowerMockito.method(Util.class, "getTimestamp")).toReturn(TestConstants.timeStamp); + final ConfirmOrderReferenceRequest request = + new ConfirmOrderReferenceRequest(TestConstants.amazonOrderReferenceId) + .setSellerId(TestConstants.overrideSellerId) + .setMWSAuthToken(TestConstants.mwsAuthToken); + final String action = "ConfirmOrderReference"; + final String signature = "mbJBrZKC4Jz8J%2BrhRqyfYsY6TkSapWOvCTlC%2BUDUTok%3D"; + final String expectedURL = + "AWSAccessKeyId=" + TestConstants.accessKey + + "&Action=" + action + + "&AmazonOrderReferenceId=" + TestConstants.amazonOrderReferenceId + + "&MWSAuthToken=" + TestConstants.mwsAuthToken + + "&SellerId=" + TestConstants.overrideSellerId + + "&Signature=" + signature + + "&SignatureMethod=HmacSHA256" + + "&SignatureVersion=2" + + "&Timestamp=" + TestConstants.urlEncoded_TimeStamp + + "&Version=2013-01-01"; + Assert.assertEquals(expectedURL, this.helper.getPostURL(request)); + + // Adding a curency code without an amount should result in same request + request.setAuthorizationCurrencyCode(CurrencyCode.EUR); + Assert.assertEquals(expectedURL, this.helper.getPostURL(request)); + + // Full MFA parameter set + final String mfaSignature = "KeZbecFqPMxhR4g35iFWsdLmq1rAgwdn4B2WTIFMTHg%3D"; + request.setSuccessUrl(TestConstants.SUCCESS_URL); + request.setFailureUrl(TestConstants.FAILURE_URL); + request.setAuthorizationAmount(TestConstants.AUTHORIZE_AMOUNT); + final String expectedURLforMFA = + "AWSAccessKeyId=" + TestConstants.accessKey + + "&Action=" + action + + "&AmazonOrderReferenceId=" + TestConstants.amazonOrderReferenceId + + "&AuthorizationAmount.Amount=" + TestConstants.AUTHORIZE_AMOUNT + + "&AuthorizationAmount.CurrencyCode=" + CurrencyCode.EUR + + "&FailureUrl=" + Util.urlEncode(TestConstants.FAILURE_URL) + + "&MWSAuthToken=" + TestConstants.mwsAuthToken + + "&SellerId=" + TestConstants.overrideSellerId + + "&Signature=" + mfaSignature + + "&SignatureMethod=HmacSHA256" + + "&SignatureVersion=2" + + "&SuccessUrl=" + Util.urlEncode(TestConstants.SUCCESS_URL) + + "&Timestamp=" + TestConstants.urlEncoded_TimeStamp + + "&Version=2013-01-01"; + Assert.assertEquals(expectedURLforMFA, this.helper.getPostURL(request)); + + // Partial MFA parameter set - not including FailureURL or CurrencyCode + // Should default to the Config object currency code in this scenario (USD instead of EUR) + final String partialMfaSignature = "vGiWtNsdtNKx3QGB%2BcNNq8tLisqwOeg2a5aIy3p6exw%3D"; + request.setAuthorizationCurrencyCode(null); + request.setFailureUrl(null); + final String expectedURLforPartialMFA = + "AWSAccessKeyId=" + TestConstants.accessKey + + "&Action=" + action + + "&AmazonOrderReferenceId=" + TestConstants.amazonOrderReferenceId + + "&AuthorizationAmount.Amount=" + TestConstants.AUTHORIZE_AMOUNT + + "&AuthorizationAmount.CurrencyCode=" + CurrencyCode.USD + + "&MWSAuthToken=" + TestConstants.mwsAuthToken + + "&SellerId=" + TestConstants.overrideSellerId + + "&Signature=" + partialMfaSignature + + "&SignatureMethod=HmacSHA256" + + "&SignatureVersion=2" + + "&SuccessUrl=" + Util.urlEncode(TestConstants.SUCCESS_URL) + + "&Timestamp=" + TestConstants.urlEncoded_TimeStamp + + "&Version=2013-01-01"; + Assert.assertEquals(expectedURLforPartialMFA, this.helper.getPostURL(request)); + } + } diff --git a/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java b/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java index df4f285..5c42fc0 100644 --- a/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java +++ b/tst/com/amazon/pay/request/PaymentsAPIRequestTest.java @@ -1,5 +1,5 @@ /** - * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -118,10 +118,18 @@ public void testCloseOrderReferenceRequest() { @Test public void testConfirmOrderReferenceRequest() { final ConfirmOrderReferenceRequest request = new ConfirmOrderReferenceRequest(TestConstants.amazonOrderReferenceId) - .setMWSAuthToken(TestConstants.mwsAuthToken); + .setMWSAuthToken(TestConstants.mwsAuthToken) + .setAuthorizationAmount(TestConstants.AUTHORIZE_AMOUNT) + .setAuthorizationCurrencyCode(CurrencyCode.EUR) + .setSuccessUrl(TestConstants.SUCCESS_URL) + .setFailureUrl(TestConstants.FAILURE_URL); Assert.assertEquals(request.getAmazonOrderReferenceId(),TestConstants.amazonOrderReferenceId); Assert.assertEquals(request.getMwsAuthToken(), TestConstants.mwsAuthToken); + Assert.assertEquals(request.getAuthorizationAmount(), TestConstants.AUTHORIZE_AMOUNT); + Assert.assertEquals(request.getAuthorizationCurrencyCode(), CurrencyCode.EUR); + Assert.assertEquals(request.getSuccessUrl(), TestConstants.SUCCESS_URL); + Assert.assertEquals(request.getFailureUrl(), TestConstants.FAILURE_URL); } @Test From d6830ed7c28ada83ac0d69e306d3bcea6163019c Mon Sep 17 00:00:00 2001 From: BJ Guillot Date: Wed, 22 May 2019 16:02:19 +0000 Subject: [PATCH 08/21] Amazon Pay Java SDK 3.5.1 --- CHANGES.txt | 4 ++ ...zon-pay-3.5.0.jar => amazon-pay-3.5.1.jar} | Bin 234217 -> 236287 bytes pom.xml | 2 +- src/com/amazon/pay/Client.java | 47 ++++++------- src/com/amazon/pay/impl/PayClient.java | 47 +++++++------ src/com/amazon/pay/impl/PayLogUtil.java | 59 ++++++++++------- src/com/amazon/pay/impl/Util.java | 5 +- .../response/model/OrderReferenceDetails.java | 32 +++++++-- .../model/PaymentAuthenticationStatus.java | 50 ++++++++++++++ .../pay/response/model/PaymentReference.java | 50 ++++++++++++++ .../amazon/pay/types/ServiceConstants.java | 6 +- tst/com/amazon/pay/TestConstants.java | 2 +- .../pay/response/PaymentsAPIResponseTest.java | 36 ++++++---- .../xml/GetOrderReferenceDetailsResponse.xml | 2 +- .../GetOrderReferenceDetailsScaResponse.xml | 62 ++++++++++++++++++ .../amazon/pay/response/xml/SanitizedData.xml | 5 +- .../pay/response/xml/SanitizedDataBefore.xml | 37 +++++++++++ .../xml/SetOrderAttributesScaResponse.xml | 49 ++++++++++++++ .../xml/SetOrderReferenceDetailsResponse.xml | 2 +- 19 files changed, 403 insertions(+), 94 deletions(-) rename dist/{amazon-pay-3.5.0.jar => amazon-pay-3.5.1.jar} (78%) create mode 100644 src/com/amazon/pay/response/model/PaymentAuthenticationStatus.java create mode 100644 src/com/amazon/pay/response/model/PaymentReference.java create mode 100644 tst/com/amazon/pay/response/xml/GetOrderReferenceDetailsScaResponse.xml create mode 100644 tst/com/amazon/pay/response/xml/SanitizedDataBefore.xml create mode 100644 tst/com/amazon/pay/response/xml/SetOrderAttributesScaResponse.xml diff --git a/CHANGES.txt b/CHANGES.txt index a3eff2f..29da71a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +Version 3.5.1 - May 2019 +- PaymentAuthenticationStatus getter added for GetOrderReferenceDetails, SetOrderReferenceDetails, and SetOrderAttributes API calls +- StaticToken getter added for GetOrderReferenceDetails + Version 3.5.0 - February 2019 - ConfirmOrderReference API has four new request parameters: SuccessUrl, FailureUrl, AuthorizationAmount, and AuthorizationCurrencyCode diff --git a/dist/amazon-pay-3.5.0.jar b/dist/amazon-pay-3.5.1.jar similarity index 78% rename from dist/amazon-pay-3.5.0.jar rename to dist/amazon-pay-3.5.1.jar index 0655eb82fc2a3d294d5f548d8354904171b510fd..b60b1601a3f7478834d8fa01e99073395cb834a0 100644 GIT binary patch delta 34028 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 diff --git a/dist/amazon-pay-3.3.1.jar b/dist/amazon-pay-java-sdk-3.4.0.jar similarity index 54% rename from dist/amazon-pay-3.3.1.jar rename to dist/amazon-pay-java-sdk-3.4.0.jar index 08f614cf8d2526bb2f57ed5cc1f8e9b49e0371f7..40d059e5fbf3b5decf04bf69279fddbd4e376cb3 100644 GIT binary patch delta 90831 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 diff --git a/pom.xml b/pom.xml index 8c8f53f..5d7858b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazon.pay amazon-pay-java-sdk jar - 3.3.4 + 3.4.0 commons-codec @@ -55,14 +55,14 @@ 7 - src/com/amazon/pay - tst/com/amazon/pay + target + src + tst release - target org.apache.maven.plugins @@ -121,4 +121,4 @@ - \ No newline at end of file + diff --git a/src/com/amazon/pay/Client.java b/src/com/amazon/pay/Client.java index c687401..5156ebb 100644 --- a/src/com/amazon/pay/Client.java +++ b/src/com/amazon/pay/Client.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ import com.amazon.pay.request.GetAuthorizationDetailsRequest; import com.amazon.pay.request.GetBillingAgreementDetailsRequest; import com.amazon.pay.request.GetCaptureDetailsRequest; +import com.amazon.pay.request.GetMerchantAccountStatusRequest; import com.amazon.pay.request.GetOrderReferenceDetailsRequest; import com.amazon.pay.request.GetProviderCreditDetailsRequest; import com.amazon.pay.request.GetProviderCreditReversalDetailsRequest; @@ -56,6 +57,7 @@ import com.amazon.pay.response.parser.GetCaptureDetailsResponseData; import com.amazon.pay.response.parser.GetOrderReferenceDetailsResponseData; import com.amazon.pay.response.parser.GetPaymentDetails; +import com.amazon.pay.response.parser.GetMerchantAccountStatusResponseData; import com.amazon.pay.response.parser.GetProviderCreditDetailsResponseData; import com.amazon.pay.response.parser.GetProviderCreditReversalDetailsResponseData; import com.amazon.pay.response.parser.GetRefundDetailsResponseData; @@ -80,7 +82,7 @@ public interface Client { * Capture operation after you call this operation. An authorization is only * valid for a particular time period, which is specified in the response of * the operation. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752010 + * Documentation: https://pay.amazon.com/documentation/apireference/201752010 * * @param authorizeRequest Container for the necessary * parameters to execute the Authorize service API on @@ -101,7 +103,7 @@ public interface Client { * you must either set the CaptureNow request parameter to true, or call the * Capture operation after you call this operation. An authorization is only valid for * a particular time period, which is specified in the response of the operation. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751940 + * Documentation: https://pay.amazon.com/documentation/apireference/201751940 * * @param authorizeOnBillingAgreementRequest Container for the necessary * parameters to execute the AuthorizeOnBillingAgreement service API on @@ -121,7 +123,7 @@ public interface Client { * You can cancel an Order Reference object only if there are no Completed, Closed, or Pending * captures against it. If you cancel an order reference, all authorizations associated with * this order reference are also closed. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751990 + * Documentation: https://pay.amazon.com/documentation/apireference/201751990 * * @param request Container for the necessary * parameters to execute the CancelOrderReference service API on @@ -141,7 +143,7 @@ public interface Client { * To successfully capture a payment, you must call this operation on an Authorization object * before it expires, as specified by the ExpirationTimestamp returned in response of the Authorize operation call. * You must specify a capture amount, and the amount cannot exceed the original amount that was authorized. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752040 + * Documentation: https://pay.amazon.com/documentation/apireference/201752040 * * @param request Container for the necessary * parameters to execute the Capture service API on @@ -176,7 +178,7 @@ public interface Client { /** * Call the CloseAuthorization operation to close an authorization after the * total amount of the authorization has been captured. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752070 + * Documentation: https://pay.amazon.com/documentation/apireference/201752070 * * @param request Container for the necessary * parameters to execute the CloseAuthorization service API on @@ -196,7 +198,7 @@ public interface Client { * indicate that you want to terminate the billing agreement with the buyer and that you * do not expect to create any new order references or authorizations on this billing agreement. * All open authorizations on the billing agreement can still be used to capture funds. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751950 + * Documentation: https://pay.amazon.com/documentation/apireference/201751950 * * @param closeBillingAgreementRequest Container for the necessary * parameters to execute the CloseBillingAgreement service API on @@ -216,7 +218,7 @@ public interface Client { * has been fulfilled (fully or partially) and that you do not expect to create any new * authorizations on this order reference. You can still capture funds against open * authorizations on the order reference. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752000 + * Documentation: https://pay.amazon.com/documentation/apireference/201752000 * * @param closeOrderReferenceRequest Container for the necessary * parameters to execute the CloseOrderReference service API on @@ -236,7 +238,7 @@ public interface Client { * indicating that all required information has been set on the billing agreement. * On successful completion of the ConfirmBillingAgreement call, the billing agreement * moves to the Open state. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751710 + * Documentation: https://pay.amazon.com/documentation/apireference/201751710 * * @param confirmBillingAgreementRequest Container for the necessary * parameters to execute the ConfirmBillingAgreement service API on @@ -256,7 +258,7 @@ public interface Client { * constraints and all required information has been set on the order reference. * After you call this operation, the order reference is set to the Open state and * you can submit authorizations against the order reference. - * Documentation; https://pay.amazon.com/documentation/apireference/201751630#201751980 + * Documentation; https://pay.amazon.com/documentation/apireference/201751980 * * @param request Container for the necessary * parameters to execute the ConfirmOrderReference service API on @@ -269,8 +271,7 @@ public interface Client { * If an error response is returned by Amazon Pay indicating * either a problem with the data in the request, or a server side issue. */ - ConfirmOrderReferenceResponseData confirmOrderReference( - ConfirmOrderReferenceRequest request) throws AmazonServiceException; + ConfirmOrderReferenceResponseData confirmOrderReference(ConfirmOrderReferenceRequest request) throws AmazonServiceException; /** * The CreateOrderReferenceForId operation is used to create an Order Reference object from @@ -298,7 +299,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( * and to retrieve information about the total amount captured on the authorization. * If you received a Pending status when you called the Authorize operation, * you can call this operation to get the current status. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752030 + * Documentation: https://pay.amazon.com/documentation/apireference/201752030 * * @param request Container for the necessary * parameters to execute the GetAuthorizationDetails service API on @@ -316,7 +317,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( /** * The GetBillingAgreementDetails operation returns details about the Billing * Agreement object and its current state. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751690 + * Documentation: https://pay.amazon.com/documentation/apireference/201751690 * * @param getBillingAgreementDetailsRequest Container for the necessary * parameters to execute the GetBillingAgreementDetails service API on @@ -336,7 +337,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( * To successfully capture a payment, you must call this operation on an Authorization object * before it expires, as specified by the ExpirationTimestamp returned in response of the Authorize operation call. * You must specify a capture amount, and the amount cannot exceed the original amount that was authorized. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752060 + * Documentation: https://pay.amazon.com/documentation/apireference/201752060 * * @param request Container for the necessary * parameters to execute the GetCaptureDetails service API on @@ -354,7 +355,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( /** * The GetOrderReferenceDetails operation returns details about the * Order Reference object and its current state. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751970 + * Documentation: https://pay.amazon.com/documentation/apireference/201751970 * * @param getOrderReferenceDetailsRequest Container for the necessary * parameters to execute the GetOrderReferenceDetails service API on @@ -439,7 +440,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( * Call the GetRefundDetails operation to query the status of a particular refund. * If you received a Pending status when you called the Refund operation, * you can call this operation to get the current status. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752100 + * Documentation: https://pay.amazon.com/documentation/apireference/201752100 * * @param getRefundDetailsRequest Container for the necessary * parameters to execute the GetRefundDetails service API on @@ -486,7 +487,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( /** * Call the Refund operation to refund a previously captured amount. You call the * GetRefundDetails operation to query the status of a refund. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752080 + * Documentation: https://pay.amazon.com/documentation/apireference/201752080 * * @param refundRequest Container for the necessary * parameters to execute the Refund service API on @@ -520,7 +521,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( /** * Call the SetBillingAgreementDetails operation to specify billing agreement * details such as a description of the agreement and other information about the merchant. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751700 + * Documentation: https://pay.amazon.com/documentation/apireference/201751700 * * @param setBillingAgreementDetailsRequest Container for the necessary * parameters to execute the SetBillingAgreementDetails service API on @@ -539,7 +540,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( * Call the SetOrderReferenceDetails operation to specify order details * such as the amount of the order, * a description of the order, and other order attributes. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751960 + * Documentation: https://pay.amazon.com/documentation/apireference/201751960 * * @param setOrderReferenceDetailsRequest Container for the necessary * parameters to execute the SetOrderReferenceDetails service API on @@ -559,7 +560,7 @@ CreateOrderReferenceForIdResponseData createOrderReferenceForId( * Open state (that is, after a successful call to the ConfirmBillingAgreement operation). * This operation validates the status of the billing agreement and the validity of the * payment method associated with the billing agreement. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751720 + * Documentation: https://pay.amazon.com/documentation/apireference/201751720 * * @param validateBillingAgreementRequest Container for the necessary * parameters to execute the ValidateBillingAgreement service API on @@ -626,6 +627,7 @@ public ListOrderReferenceByNextTokenResponseData listOrderReferenceByNextToken( /** * The SetOrderAttributes operation is used to set order attributes even after * the order has been confirmed. + * Documentation: https://pay.amazon.com/us/developer/documentation/apireference/22N636REVGXTPNR * * @param setOrderAttributesRequest Container for the necessary * parameters to execute the SetOrderAttributes service API on @@ -642,4 +644,37 @@ public SetOrderAttributesResponseData setOrderAttributes( SetOrderAttributesRequest setOrderAttributesRequest) throws AmazonServiceException; + /** + * The GetMerchantAccountStatus operation is used to query the status of a particular + * merchant account and to retrieve information if the account is active or inactive. + * + * @param getMerchantAccountStatusRequest Container for the optional + * parameters to execute the GetMerchantAccountStatus service API on + * Amazon Pay. + * + * @return The response from the GetMerchantAccountStatus service API, as + * returned by Amazon Pay. + * + * @throws AmazonServiceException + * If an error response is returned by Amazon Pay indicating + * either a problem with the data in the request, or a server side issue. + */ + public GetMerchantAccountStatusResponseData getMerchantAccountStatus( + GetMerchantAccountStatusRequest getMerchantAccountStatusRequest) + throws AmazonServiceException; + + /** + * The GetMerchantAccountStatus operation is used to query the status of a particular + * merchant account and to retrieve information if the account is active or inactive. + * + * @return The response from the GetMerchantAccountStatus service API, as + * returned by Amazon Pay. + * + * @throws AmazonServiceException + * If an error response is returned by Amazon Pay indicating + * either a problem with the data in the request, or a server side issue. + */ + public GetMerchantAccountStatusResponseData getMerchantAccountStatus() + throws AmazonServiceException; + } diff --git a/src/com/amazon/pay/impl/PayClient.java b/src/com/amazon/pay/impl/PayClient.java index 40a0db0..70fb7b0 100755 --- a/src/com/amazon/pay/impl/PayClient.java +++ b/src/com/amazon/pay/impl/PayClient.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -33,6 +33,7 @@ import com.amazon.pay.request.GetBillingAgreementDetailsRequest; import com.amazon.pay.request.GetCaptureDetailsRequest; import com.amazon.pay.request.GetOrderReferenceDetailsRequest; +import com.amazon.pay.request.GetMerchantAccountStatusRequest; import com.amazon.pay.request.GetProviderCreditDetailsRequest; import com.amazon.pay.request.GetProviderCreditReversalDetailsRequest; import com.amazon.pay.request.GetRefundDetailsRequest; @@ -65,6 +66,7 @@ import com.amazon.pay.response.parser.GetBillingAgreementDetailsResponseData; import com.amazon.pay.response.parser.GetCaptureDetailsResponseData; import com.amazon.pay.response.parser.GetOrderReferenceDetailsResponseData; +import com.amazon.pay.response.parser.GetMerchantAccountStatusResponseData; import com.amazon.pay.response.parser.GetPaymentDetails; import com.amazon.pay.response.parser.GetProviderCreditDetailsResponseData; import com.amazon.pay.response.parser.GetProviderCreditReversalDetailsResponseData; @@ -171,7 +173,7 @@ public CreateOrderReferenceForIdResponseData createOrderReferenceForId( /** * The GetOrderReferenceDetails operation returns details about the * Order Reference object and its current state. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751970 + * Documentation: https://pay.amazon.com/documentation/apireference/201751970 * * @param getOrderReferenceDetailsRequest Container for the necessary * parameters to execute the GetOrderReferenceDetails service API on @@ -278,7 +280,7 @@ public GetPaymentDetails getPaymentDetails( * Call the SetOrderReferenceDetails operation to specify order details * such as the amount of the order, * a description of the order, and other order attributes. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751960 + * Documentation: https://pay.amazon.com/documentation/apireference/201751960 * * @param setOrderReferenceDetailsRequest Container for the necessary * parameters to execute the SetOrderReferenceDetails service API on @@ -309,7 +311,7 @@ public SetOrderReferenceDetailsResponseData setOrderReferenceDetails(SetOrderRef * Capture operation after you call this operation. An authorization is only * valid for a particular time period, which is specified in the response of * the operation. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752010 + * Documentation: https://pay.amazon.com/documentation/apireference/201752010 * * * @param authorizeRequest Container for the necessary @@ -340,7 +342,7 @@ public AuthorizeResponseData authorize(AuthorizeRequest authorizeRequest) throws * and to retrieve information about the total amount captured on the authorization. * If you received a Pending status when you called the Authorize operation, * you can call this operation to get the current status. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752030 + * Documentation: https://pay.amazon.com/documentation/apireference/201752030 * * * @param request Container for the necessary @@ -371,7 +373,7 @@ public GetAuthorizationDetailsResponseData getAuthorizationDetails(GetAuthorizat * To successfully capture a payment, you must call this operation on an Authorization object * before it expires, as specified by the ExpirationTimestamp returned in response of the Authorize operation call. * You must specify a capture amount, and the amount cannot exceed the original amount that was authorized. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752040 + * Documentation: https://pay.amazon.com/documentation/apireference/201752040 * * * @param request Container for the necessary @@ -402,7 +404,7 @@ public CaptureResponseData capture(CaptureRequest request) throws AmazonServiceE * To successfully capture a payment, you must call this operation on an Authorization object * before it expires, as specified by the ExpirationTimestamp returned in response of the Authorize operation call. * You must specify a capture amount, and the amount cannot exceed the original amount that was authorized. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752060 + * Documentation: https://pay.amazon.com/documentation/apireference/201752060 * * * @param request Container for the necessary @@ -435,7 +437,7 @@ public GetCaptureDetailsResponseData getCaptureDetails(GetCaptureDetailsRequest * constraints and all required information has been set on the order reference. * After you call this operation, the order reference is set to the Open state and * you can submit authorizations against the order reference. - * Documentation; https://pay.amazon.com/documentation/apireference/201751630#201751980 + * Documentation; https://pay.amazon.com/documentation/apireference/201751980 * * * @param request Container for the necessary @@ -464,7 +466,7 @@ public ConfirmOrderReferenceResponseData confirmOrderReference(ConfirmOrderRefe /** * Call the CloseAuthorization operation to close an authorization after the * total amount of the authorization has been captured. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752070 + * Documentation: https://pay.amazon.com/documentation/apireference/201752070 * * * @param request Container for the necessary @@ -498,7 +500,7 @@ public CloseAuthorizationResponseData closeAuthorization(CloseAuthorizationReque * You can cancel an Order Reference object only if there are no Completed, Closed, or Pending * captures against it. If you cancel an order reference, all authorizations associated with * this order reference are also closed. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751990 + * Documentation: https://pay.amazon.com/documentation/apireference/201751990 * * * @param request Container for the necessary @@ -529,7 +531,7 @@ public CancelOrderReferenceResponseData cancelOrderReference(CancelOrderReferenc * has been fulfilled (fully or partially) and that you do not expect to create any new * authorizations on this order reference. You can still capture funds against open * authorizations on the order reference. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752000 + * Documentation: https://pay.amazon.com/documentation/apireference/201752000 * * * @param closeOrderReferenceRequest Container for the necessary @@ -560,7 +562,7 @@ public CloseOrderReferenceResponseData closeOrderReference(CloseOrderReferenceRe /** * Call the Refund operation to refund a previously captured amount. You call the * GetRefundDetails operation to query the status of a refund. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752080 + * Documentation: https://pay.amazon.com/documentation/apireference/201752080 * * * @param refundRequest Container for the necessary @@ -592,7 +594,7 @@ public RefundResponseData refund(RefundRequest refundRequest) throws AmazonServi * Call the GetRefundDetails operation to query the status of a particular refund. * If you received a Pending status when you called the Refund operation, * you can call this operation to get the current status. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201752100 + * Documentation: https://pay.amazon.com/documentation/apireference/201752100 * * * @param getRefundDetailsRequest Container for the necessary @@ -621,7 +623,7 @@ public GetRefundDetailsResponseData getRefundDetails(GetRefundDetailsRequest get /** * The GetBillingAgreementDetails operation returns details about the Billing * Agreement object and its current state. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751690 + * Documentation: https://pay.amazon.com/documentation/apireference/201751690 * * * @param getBillingAgreementDetailsRequest Container for the necessary @@ -651,7 +653,7 @@ public GetBillingAgreementDetailsResponseData getBillingAgreementDetails(GetBill /** * Call the SetBillingAgreementDetails operation to specify billing agreement * details such as a description of the agreement and other information about the merchant. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751700 + * Documentation: https://pay.amazon.com/documentation/apireference/201751700 * * * @param setBillingAgreementDetailsRequest Container for the necessary @@ -684,7 +686,7 @@ public SetBillingAgreementDetailsResponseData setBillingAgreementDetails(SetBill * Open state (that is, after a successful call to the ConfirmBillingAgreement operation). * This operation validates the status of the billing agreement and the validity of the * payment method associated with the billing agreement. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751720 + * Documentation: https://pay.amazon.com/documentation/apireference/201751720 * * * @param validateBillingAgreementRequest Container for the necessary @@ -716,7 +718,7 @@ public ValidateBillingAgreementResponseData validateBillingAgreement(ValidateBil * indicating that all required information has been set on the billing agreement. * On successful completion of the ConfirmBillingAgreement call, the billing agreement * moves to the Open state. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751710 + * Documentation: https://pay.amazon.com/documentation/apireference/201751710 * * * @param confirmBillingAgreementRequest Container for the necessary @@ -749,7 +751,7 @@ public ConfirmBillingAgreementResponseData confirmBillingAgreement(ConfirmBillin * you must either set the CaptureNow request parameter to true, or call the * Capture operation after you call this operation. An authorization is only valid for * a particular time period, which is specified in the response of the operation. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751940 + * Documentation: https://pay.amazon.com/documentation/apireference/201751940 * * * @param authorizeOnBillingAgreementRequest Container for the necessary @@ -780,7 +782,7 @@ public AuthorizeOnBillingAgreementResponseData authorizeOnBillingAgreement(Autho * indicate that you want to terminate the billing agreement with the buyer and that you * do not expect to create any new order references or authorizations on this billing agreement. * All open authorizations on the billing agreement can still be used to capture funds. - * Documentation: https://pay.amazon.com/documentation/apireference/201751630#201751950 + * Documentation: https://pay.amazon.com/documentation/apireference/201751950 * * * @param closeBillingAgreementRequest Container for the necessary @@ -1129,6 +1131,7 @@ public ListOrderReferenceByNextTokenResponseData listOrderReferenceByNextToken( /** * The SetOrderAttributes operation is used to set order attributes even after * the order has been confirmed. + * Documentation: https://pay.amazon.com/us/developer/documentation/apireference/22N636REVGXTPNR * * @param setOrderAttributesRequest Container for the necessary * parameters to execute the SetOrderAttributes service API on @@ -1136,7 +1139,7 @@ public ListOrderReferenceByNextTokenResponseData listOrderReferenceByNextToken( * * @return The response from the SetOrderAttributes service API, as * returned by Amazon Pay. - * + * * @throws AmazonServiceException * If an error response is returned by Amazon Pay indicating * either a problem with the data in the request, or a server side issue. @@ -1150,6 +1153,49 @@ public SetOrderAttributesResponseData setOrderAttributes( return Parser.setOrderAttributes(rawResponse); } + /** + * The GetMerchantAccountStatus operation is used to query the status of a particular + * merchant account and to retrieve information if the account is active or inactive. + * + * @param getMerchantAccountStatusRequest Container for the optional + * parameters to execute the GetMerchantAccountStatus service API on + * Amazon Pay. + * + * @return The response from the GetMerchantAccountStatus service API, as + * returned by Amazon Pay. + * + * @throws AmazonServiceException + * If an error response is returned by Amazon Pay indicating + * either a problem with the data in the request, or a server side issue. + */ + @Override + public GetMerchantAccountStatusResponseData getMerchantAccountStatus( + GetMerchantAccountStatusRequest getMerchantAccountStatusRequest) + throws AmazonServiceException { + final ResponseData rawResponse = sendRequest(helper.getPostURL( + getMerchantAccountStatusRequest)); + return Parser.getMerchantAccountStatus(rawResponse); + } + + /** + * The GetMerchantAccountStatus operation is used to query the status of a particular + * merchant account and to retrieve information if the account is active or inactive. + * + * @return The response from the GetMerchantAccountStatus service API, as + * returned by Amazon Pay. + * + * @throws AmazonServiceException + * If an error response is returned by Amazon Pay indicating + * either a problem with the data in the request, or a server side issue. + */ + @Override + public GetMerchantAccountStatusResponseData getMerchantAccountStatus() + throws AmazonServiceException { + final ResponseData rawResponse = sendRequest(helper.getPostURL( + new GetMerchantAccountStatusRequest())); + return Parser.getMerchantAccountStatus(rawResponse); + } + private ResponseData sendRequest(String httpPostRequest) { ResponseData response = null; diff --git a/src/com/amazon/pay/impl/Util.java b/src/com/amazon/pay/impl/Util.java index 5d51d45..a45f698 100644 --- a/src/com/amazon/pay/impl/Util.java +++ b/src/com/amazon/pay/impl/Util.java @@ -63,7 +63,8 @@ public class Util { * (invalid encoding, wrong length, uninitialized, etc). * * @throws NoSuchAlgorithmException This exception is thrown when a - * particular cryptographic algorithm is requested but is not available in the environment. + * particular cryptographic algorithm is requested but is not + * available in the environment. * * @throws UnsupportedEncodingException The Character Encoding is not supported. * diff --git a/src/com/amazon/pay/request/AuthorizeOnBillingAgreementRequest.java b/src/com/amazon/pay/request/AuthorizeOnBillingAgreementRequest.java index d198ace..b04eb0b 100644 --- a/src/com/amazon/pay/request/AuthorizeOnBillingAgreementRequest.java +++ b/src/com/amazon/pay/request/AuthorizeOnBillingAgreementRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -21,7 +21,12 @@ * For more information documentation, see * https://pay.amazon.com/documentation/apireference/201751630#201751940 */ -public class AuthorizeOnBillingAgreementRequest implements Serializable { +public class AuthorizeOnBillingAgreementRequest extends DelegateRequest implements Serializable { + + @Override + protected AuthorizeOnBillingAgreementRequest getThis() { + return this; + } //required parameters private final String amazonBillingAgreementId; @@ -41,7 +46,6 @@ public class AuthorizeOnBillingAgreementRequest implements Serializable { private String sellerOrderId; private String storeName; private String customInformation; - private String mwsAuthToken; /** * Constructs request for AuthorizeOnBillingAgreement operation @@ -55,7 +59,7 @@ public class AuthorizeOnBillingAgreementRequest implements Serializable { * The identifier for this authorization transaction that you specify. * This identifier must be unique for all your authorization transactions. * @param authorizationAmount - * Represents the amount to be authorized. + * Represents the amount to be authorized * */ public AuthorizeOnBillingAgreementRequest(final String amazonBillingAgreementId, final String authorizationReferenceId, final String authorizationAmount) { @@ -67,7 +71,8 @@ public AuthorizeOnBillingAgreementRequest(final String amazonBillingAgreementId, /** * @param authorizationCurrencyCode three-digit currency code * - * @return Returns a reference to this object so that methods can be chained together. + * @return Returns a reference to this object so that methods + * can be chained together. */ public AuthorizeOnBillingAgreementRequest setAuthorizationCurrencyCode(final CurrencyCode authorizationCurrencyCode){ this.authorizationCurrencyCode = authorizationCurrencyCode; @@ -76,9 +81,11 @@ public AuthorizeOnBillingAgreementRequest setAuthorizationCurrencyCode(final Cur } /** - * @param sellerAuthorizationNote description for the transaction that is displayed in emails to the buyer. + * @param sellerAuthorizationNote description for the transaction that is + * displayed in emails to the buyer. * - * @return Returns a reference to this object so that methods can be chained together. + * @return Returns a reference to this object so that methods can be + * chained together. */ public AuthorizeOnBillingAgreementRequest setSellerAuthorizationNote(final String sellerAuthorizationNote){ this.sellerAuthorizationNote = sellerAuthorizationNote; @@ -86,8 +93,9 @@ public AuthorizeOnBillingAgreementRequest setSellerAuthorizationNote(final Strin } /** - * @param TransactionTimeout The number of minutes after which the authorization will automatically be - * closed and you will not be able to capture funds against the authorization. + * @param TransactionTimeout The number of minutes after which the authorization + * will automatically be closed and you will not be + * able to capture funds against the authorization. * * @return Returns a reference to this object so that methods can be chained together. */ @@ -110,10 +118,11 @@ public AuthorizeOnBillingAgreementRequest setCaptureNow(final boolean CaptureNow } /** - * @param softDescriptor The description to be shown on the buyer's payment instrument statement - * if CaptureNow is set to true. + * @param softDescriptor The description to be shown on the buyer's payment + * instrument statement if CaptureNow is set to true. * - * @return Returns a reference to this object so that methods can be chained together. + * @return Returns a reference to this object so that methods can be chained + * together. */ public AuthorizeOnBillingAgreementRequest setSoftDescriptor(final String softDescriptor) { this.softDescriptor = softDescriptor; @@ -121,9 +130,11 @@ public AuthorizeOnBillingAgreementRequest setSoftDescriptor(final String softDes } /** - * @param sellerNote Represents a description of the order that is displayed in emails to the buyer. + * @param sellerNote Represents a description of the order that is displayed + * in emails to the buyer. * - * @return Returns a reference to this object so that methods can be chained together. + * @return Returns a reference to this object so that methods can be chained + * together. */ public AuthorizeOnBillingAgreementRequest setSellerNote(final String sellerNote) { this.sellerNote = sellerNote; @@ -131,9 +142,10 @@ public AuthorizeOnBillingAgreementRequest setSellerNote(final String sellerNote) } /** - * @param platformId Represents the SellerId of the Solution Provider that developed the platform. - * This value should only be provided by Solution Providers. It should - * not be provided by merchants creating their own custom integration. + * @param platformId Represents the SellerId of the Solution Provider that + * developed the platform. This value should only be provided + * by Solution Providers. It should not be provided by merchants + * creating their own custom integration. * * @return Returns a reference to this object so that methods can be chained together. */ @@ -145,10 +157,12 @@ public AuthorizeOnBillingAgreementRequest setPlatformId(final String platformId) /** * * - * @param sellerOrderId The merchant-specified identifier of this order. This is displayed to the - * buyer in their emails and transaction history on the Amazon Pay website. + * @param sellerOrderId The merchant-specified identifier of this order. + * This is displayed to the buyer in their emails and + * transaction history on the Amazon Pay website. * - * @return Returns a reference to this object so that methods can be chained together. + * @return Returns a reference to this object so that methods can be chained + * together. */ public AuthorizeOnBillingAgreementRequest setSellerOrderId(final String sellerOrderId) { this.sellerOrderId = sellerOrderId; @@ -167,7 +181,8 @@ public AuthorizeOnBillingAgreementRequest setStoreName(final String storeName) { } /** - * @param customInformation Sets any additional information that you want to include with this order reference. + * @param customInformation Sets any additional information that you want to include + * with this order reference. * * @return Returns a reference to this object so that methods can be chained together. */ @@ -200,18 +215,6 @@ public AuthorizeOnBillingAgreementRequest setInheritShippingAddress(final String Boolean.parseBoolean(inheritShippingAddress)); } - /** - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required only - * for third-party solution providers and marketplaces. Do not specify - * this parameter for merchants creating their own custom integration. - * - * @return Returns a reference to this object so that methods can be chained together. - */ - public AuthorizeOnBillingAgreementRequest setMWSAuthToken(final String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * The billing agreement identifier. This value is * retrieved from the Amazon Button, AddressBook, or @@ -347,16 +350,6 @@ public String getCustomInformation() { return customInformation; } - /** - * Returns MWSAuthToken - * - * @return Returns mwsAuthToken status from request - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -382,7 +375,7 @@ public String toString() { + ", sellerOrderId=" + sellerOrderId + ", storeName=" + storeName + ", customInformation=" + customInformation - + ", mwsAuthToken=" + mwsAuthToken + '}'; + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } } diff --git a/src/com/amazon/pay/request/AuthorizeRequest.java b/src/com/amazon/pay/request/AuthorizeRequest.java index 840e58a..d75ba93 100644 --- a/src/com/amazon/pay/request/AuthorizeRequest.java +++ b/src/com/amazon/pay/request/AuthorizeRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -24,20 +24,24 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class AuthorizeRequest implements Serializable { +public class AuthorizeRequest extends DelegateRequest implements Serializable { + + @Override + protected AuthorizeRequest getThis() { + return this; + } //required parameters private String amazonOrderReferenceId; private String authorizationReferenceId; private String authorizationAmount; - //optonal parameters + //optional parameters private CurrencyCode authorizationCurrencyCode; private String sellerAuthorizationNote; private String transactionTimeout; private Boolean captureNow; private String softDescriptor; - private String mwsAuthToken; private List providerCredit; /* @@ -211,27 +215,6 @@ public String getSoftDescriptor() { return softDescriptor; } - /** - * @return mwsAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - - /** - * Applicable for third-party solution providers only. - * - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return The MWSAuthToken - */ - public AuthorizeRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * Applicable for third-party solution providers only. * @@ -263,11 +246,17 @@ public AuthorizeRequest setProviderCredit(List providerCreditLis */ @Override public String toString() { - return "AuthorizeRequest{" + "amazonOrderReferenceId=" + amazonOrderReferenceId + ", authorizationReferenceId=" - + authorizationReferenceId + ", authorizationAmount=" + authorizationAmount + ", authorizationCurrencyCode=" - + authorizationCurrencyCode + ", sellerAuthorizationNote=" + sellerAuthorizationNote + ", transactionTimeout=" - + transactionTimeout + ", captureNow=" + captureNow + ", softDescriptor=" + softDescriptor + ", mwsAuthToken=" - + mwsAuthToken + ", providerCredit=" + providerCredit + '}'; + return "AuthorizeRequest{" + + "amazonOrderReferenceId=" + amazonOrderReferenceId + + ", authorizationReferenceId=" + authorizationReferenceId + + ", authorizationAmount=" + authorizationAmount + + ", authorizationCurrencyCode=" + authorizationCurrencyCode + + ", sellerAuthorizationNote=" + sellerAuthorizationNote + + ", transactionTimeout=" + transactionTimeout + + ", captureNow=" + captureNow + + ", softDescriptor=" + softDescriptor + + ", mwsAuthToken=" + getMwsAuthToken() + + ", providerCredit=" + providerCredit + '}'; } } diff --git a/src/com/amazon/pay/request/CancelOrderReferenceRequest.java b/src/com/amazon/pay/request/CancelOrderReferenceRequest.java index 4375983..390c2d7 100644 --- a/src/com/amazon/pay/request/CancelOrderReferenceRequest.java +++ b/src/com/amazon/pay/request/CancelOrderReferenceRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -20,22 +20,26 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class CancelOrderReferenceRequest implements Serializable{ +public class CancelOrderReferenceRequest extends DelegateRequest implements Serializable{ + + @Override + protected CancelOrderReferenceRequest getThis() { + return this; + } //required parameters private final String amazonOrderReferenceId; //optional parameters private String cancelationReason; - private String mwsAuthToken; /* * @param amazonOrderReferenceId - * The order reference identifier. This value is retrieved - * from the Amazon Button widget after the buyer has successfully + * The order reference identifier. This value is retrieved + * from the Amazon Button widget after the buyer has successfully * authenticated with Amazon. - * - * @return CancelOrderReferenceeRequest + * + * @return CancelOrderReferenceRequest * Container holding authorize operation parameters */ public CancelOrderReferenceRequest(String amazonOrderReferenceId) { @@ -43,10 +47,10 @@ public CancelOrderReferenceRequest(String amazonOrderReferenceId) { } /** - * Optional parameter + * Optional parameter * - * @param cancelationReason Describes the reason for the cancelation. This is for - * informational purposes only and is never displayed to the customer. + * @param cancelationReason Describes the reason for the cancelation. This is for + * informational purposes only and is never displayed to the customer. * The value can be retrieved in future GetOrderReferenceDetails calls. * Maximum: 1024 characters * @@ -58,19 +62,7 @@ public CancelOrderReferenceRequest setCancelReason(String cancelationReason) { } /** - * Applicable for third-party solution providers only. - * - * @param mwsAuthToken Sets MWSAuthToken - * - * @return Returns a reference to this object so that methods can be chained together. - */ - public CancelOrderReferenceRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - - /** - * Represents the order reference identifier. + * Represents the order reference identifier. * * @return Returns AmazonOrderReferenceId from request */ @@ -78,25 +70,16 @@ public String getAmazonOrderReferenceId() { return amazonOrderReferenceId; } - /* - * Describes the reason for the cancelation. This is for - * informational purposes only and is never displayed to the customer. - * The value can be retrieved in future GetOrderReferenceDetails calls. - * Maximum: 1024 characters - - * @return Returns cancelationReason from request - */ - public String getCancelationReason() { - return cancelationReason; - } - /** - * Applicable for third-party solution providers only. + * Describes the reason for the cancelation. This is for + * informational purposes only and is never displayed to the customer. + * The value can be retrieved in future GetOrderReferenceDetails calls. + * Maximum: 1024 characters * - * @return Returns mwsAuthToken from request + * @return Returns cancelationReason from request */ - public String getMwsAuthToken() { - return mwsAuthToken; + public String getCancelationReason() { + return cancelationReason; } /** @@ -109,10 +92,10 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "CancelOrderReferenceRequest{" + "amazonOrderReferenceId=" + amazonOrderReferenceId + ", cancelationReason=" - + cancelationReason + ", mwsAuthToken=" + mwsAuthToken + '}'; + return "CancelOrderReferenceRequest{" + + "amazonOrderReferenceId=" + amazonOrderReferenceId + + ", cancelationReason=" + cancelationReason + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } - - } diff --git a/src/com/amazon/pay/request/CaptureRequest.java b/src/com/amazon/pay/request/CaptureRequest.java index 67a88c7..3ceca34 100644 --- a/src/com/amazon/pay/request/CaptureRequest.java +++ b/src/com/amazon/pay/request/CaptureRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -15,16 +15,21 @@ package com.amazon.pay.request; import com.amazon.pay.types.CurrencyCode; -import java.util.*; import com.amazon.pay.response.model.ProviderCredit; import java.io.Serializable; +import java.util.List; /** * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class CaptureRequest implements Serializable { +public class CaptureRequest extends DelegateRequest implements Serializable { + + @Override + protected CaptureRequest getThis() { + return this; + } //required parameters private String amazonAuthorizationId; @@ -35,7 +40,6 @@ public class CaptureRequest implements Serializable { //optional parameters private String sellerCaptureNote; private String softDescriptor; - private String mwsAuthToken; private List providerCredit; /* @@ -91,20 +95,6 @@ public CaptureRequest setSoftDescriptor(String softDescriptor) { return this; } - /** - * Applicable for third-party solution providers only. - * - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return Returns a reference to this object so that methods can be chained together. - */ - public CaptureRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * Applicable for third-party solution providers only. * @@ -174,15 +164,6 @@ public String getSoftDescriptor() { return softDescriptor; } - /** - * Applicable for third-party solution providers only - * - * @return mwsAuthToken for Capture operation - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Applicable for third-party solution providers only. * @@ -202,11 +183,15 @@ public List getProviderCredit() { */ @Override public String toString() { - return "CaptureRequest{" + "amazonAuthorizationId=" + amazonAuthorizationId + ", captureReferenceId=" + captureReferenceId + ", captureAmount=" - + captureAmount + ", captureCurrencyCode=" + captureCurrencyCode + ", sellerCaptureNote=" + sellerCaptureNote + ", softDescriptor=" - + softDescriptor + ", mwsAuthToken=" + mwsAuthToken + ", providerCredit=" + providerCredit + '}'; + return "CaptureRequest{" + + "amazonAuthorizationId=" + amazonAuthorizationId + + ", captureReferenceId=" + captureReferenceId + + ", captureAmount=" + captureAmount + + ", captureCurrencyCode=" + captureCurrencyCode + + ", sellerCaptureNote=" + sellerCaptureNote + + ", softDescriptor=" + softDescriptor + + ", mwsAuthToken=" + getMwsAuthToken() + + ", providerCredit=" + providerCredit + '}'; } - - } diff --git a/src/com/amazon/pay/request/ChargeRequest.java b/src/com/amazon/pay/request/ChargeRequest.java index 19c286b..95445cc 100644 --- a/src/com/amazon/pay/request/ChargeRequest.java +++ b/src/com/amazon/pay/request/ChargeRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -27,7 +27,12 @@ * https://pay.amazon.com/documentation/ */ -public class ChargeRequest implements Serializable { +public class ChargeRequest extends DelegateRequest implements Serializable { + + @Override + protected ChargeRequest getThis() { + return this; + } //required parameters private String amazonReferenceId; @@ -45,7 +50,6 @@ public class ChargeRequest implements Serializable { //optional parameters private String sellerNote; private String softDescriptor; - private String mwsAuthToken; private Boolean inheritShippingAddress; @@ -313,18 +317,6 @@ public ChargeRequest withProviderCreditDetails(final List provid } - /** - * Sets the mwsAuthToken in ChargeRequest - * - * @param mwsAuthToken Sets the mwsAuthToken in ChargeRequest - * - * @return Returns a reference to this object so that methods can be chained together. - */ - public ChargeRequest withMWSAuthToken(final String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * The identifier for this Amazon Pay transaction that you specify. * @@ -442,15 +434,6 @@ public String getSoftDescriptor() { return softDescriptor; } - /** - * The MWSAuthToken set in the request - * - * @return MWSAuthToken specified in request - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * The ProviderCredit set in the request * @@ -484,7 +467,7 @@ public String toString() { + ", platformId=" + platformId + ", sellerNote=" + sellerNote + ", softDescriptor=" + softDescriptor - + ", mwsAuthToken=" + mwsAuthToken + + ", mwsAuthToken=" + getMwsAuthToken() + ", inheritShippingAddress=" + inheritShippingAddress + ", providerCredit=" + providerCredit + '}'; } diff --git a/src/com/amazon/pay/request/CloseAuthorizationRequest.java b/src/com/amazon/pay/request/CloseAuthorizationRequest.java index cc79bd3..63ab089 100644 --- a/src/com/amazon/pay/request/CloseAuthorizationRequest.java +++ b/src/com/amazon/pay/request/CloseAuthorizationRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -22,19 +22,23 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class CloseAuthorizationRequest implements Serializable{ +public class CloseAuthorizationRequest extends DelegateRequest implements Serializable { + + @Override + protected CloseAuthorizationRequest getThis() { + return this; + } //required parameters private String amazonAuthorizationId; //optional parameters private String closureReason; - private String mwsAuthToken; /** * * @param amazonAuthorizationId - * The authorization identifier that was generated by Amazon + * The authorization identifier that was generated by Amazon * in the earlier call to Authorize. * */ @@ -55,21 +59,7 @@ public CloseAuthorizationRequest setClosureReason(String closureReason) { } /** - * Applicable for third-party solution providers only. - * - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return MWSAuthToken - */ - public CloseAuthorizationRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - - /** - * The authorization identifier that was generated by Amazon + * The authorization identifier that was generated by Amazon * in the earlier call to Authorize. * * @return AmazonAuthorizationId specified in request @@ -87,15 +77,6 @@ public String getClosureReason() { return closureReason; } - /** - * Applicable for third-party solution providers only. - * - * @return MWSAuthToken specified in request - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -106,9 +87,10 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "CloseAuthorizationRequest{" + "amazonAuthorizationId=" + amazonAuthorizationId + ", closureReason=" + closureReason + ", mwsAuthToken=" - + mwsAuthToken + '}'; + return "CloseAuthorizationRequest{" + + "amazonAuthorizationId=" + amazonAuthorizationId + + ", closureReason=" + closureReason + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } - } diff --git a/src/com/amazon/pay/request/CloseBillingAgreementRequest.java b/src/com/amazon/pay/request/CloseBillingAgreementRequest.java index ea009e1..a891750 100644 --- a/src/com/amazon/pay/request/CloseBillingAgreementRequest.java +++ b/src/com/amazon/pay/request/CloseBillingAgreementRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -22,19 +22,23 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class CloseBillingAgreementRequest implements Serializable{ +public class CloseBillingAgreementRequest extends DelegateRequest implements Serializable { + + @Override + protected CloseBillingAgreementRequest getThis() { + return this; + } //required parameters private String amazonBillingAgreementId; //optional parameters private String closureReason; - private String mwsAuthToken; /** * * @param amazonBillingAgreementId - * The billing agreement identifier. This value is retrieved + * The billing agreement identifier. This value is retrieved * from the Amazon Button, AddressBook, or Wallet widgets. */ public CloseBillingAgreementRequest(String amazonBillingAgreementId) { @@ -53,22 +57,9 @@ public CloseBillingAgreementRequest setClosureReason(String closureReason) { } /** - * Applicable for third-party solution providers only. - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return The MWSAuthToken - */ - public CloseBillingAgreementRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - - /** - * The billing agreement identifier. This value is retrieved + * The billing agreement identifier. This value is retrieved * from the Amazon Button, AddressBook, or Wallet widgets. - * @return AmazonBillingAgreementId specified in request + * @return AmazonBillingAgreementId specified in request */ public String getAmazonBillingAgreementId() { return amazonBillingAgreementId; @@ -82,14 +73,6 @@ public String getClosureReason() { return closureReason; } - /** - * - * @return MWSAuthToken specified in request - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -100,9 +83,10 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "CloseBillingAgreementRequest{" + "amazonBillingAgreementId=" + amazonBillingAgreementId + ", closureReason=" - + closureReason + ", mwsAuthToken=" + mwsAuthToken + '}'; + return "CloseBillingAgreementRequest{" + + "amazonBillingAgreementId=" + amazonBillingAgreementId + + ", closureReason=" + closureReason + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } - } diff --git a/src/com/amazon/pay/request/CloseOrderReferenceRequest.java b/src/com/amazon/pay/request/CloseOrderReferenceRequest.java index cf90b9f..41ba1c8 100644 --- a/src/com/amazon/pay/request/CloseOrderReferenceRequest.java +++ b/src/com/amazon/pay/request/CloseOrderReferenceRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -16,20 +16,23 @@ import java.io.Serializable; - /** * Container for the parameters to the CloseOrderReference operation. * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class CloseOrderReferenceRequest implements Serializable{ +public class CloseOrderReferenceRequest extends DelegateRequest implements Serializable { + + @Override + protected CloseOrderReferenceRequest getThis() { + return this; + } //required parameters private String amazonOrderReferenceId; //optional parameters private String closureReason; - private String mwsAuthToken; /** * @param amazonOrderReferenceId @@ -50,18 +53,6 @@ public CloseOrderReferenceRequest setClosureReason(String closureReason) { return this; } - /** - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return The MWSAuthToken - */ - public CloseOrderReferenceRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * The ID of the order reference for which the details are being requested. * @@ -79,16 +70,6 @@ public String getClosureReason() { return closureReason; } - /** - * Represents the MWSAuthToken parameter in request. MWSAuthToken is required only for third-party solution providers - * and marketplaces. Do not specify this parameter for merchants creating their own custom integration. - - * @return MWSAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -99,9 +80,10 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "CloseOrderReferenceRequest{" + "amazonOrderReferenceId=" + amazonOrderReferenceId + ", closureReason=" + closureReason + ", mwsAuthToken=" - + mwsAuthToken + '}'; + return "CloseOrderReferenceRequest{" + + "amazonOrderReferenceId=" + amazonOrderReferenceId + + ", closureReason=" + closureReason + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } - } diff --git a/src/com/amazon/pay/request/ConfirmBillingAgreementRequest.java b/src/com/amazon/pay/request/ConfirmBillingAgreementRequest.java index be34e5e..65d8d7a 100644 --- a/src/com/amazon/pay/request/ConfirmBillingAgreementRequest.java +++ b/src/com/amazon/pay/request/ConfirmBillingAgreementRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -22,14 +22,16 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class ConfirmBillingAgreementRequest implements Serializable{ +public class ConfirmBillingAgreementRequest extends DelegateRequest implements Serializable { + + @Override + protected ConfirmBillingAgreementRequest getThis() { + return this; + } //required parameters private String amazonBillingAgreementId; - //optional parameters - private String mwsAuthToken; - /** * * @param amazonBillingAgreementId @@ -40,20 +42,7 @@ public ConfirmBillingAgreementRequest(String amazonBillingAgreementId) { } /** - * Applicable for third-party solution providers only - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return The MWSAuthToken - */ - public ConfirmBillingAgreementRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - - /** - * The billing agreement identifier. + * The billing agreement identifier. * * @return Returns AmazonBillingAgreementId from request */ @@ -61,14 +50,6 @@ public String getAmazonBillingAgreementId() { return amazonBillingAgreementId; } - /** - * Applicable for third-party solution providers only - * @return Returns mwsAuthToken from request - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -79,8 +60,9 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "ConfirmBillingAgreementRequest{" + "amazonBillingAgreementId=" + amazonBillingAgreementId + ", mwsAuthToken=" + mwsAuthToken + '}'; + return "ConfirmBillingAgreementRequest{" + + "amazonBillingAgreementId=" + amazonBillingAgreementId + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } - } diff --git a/src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java b/src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java index e975be8..ffea2b5 100644 --- a/src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java +++ b/src/com/amazon/pay/request/ConfirmOrderReferenceRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -22,14 +22,16 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class ConfirmOrderReferenceRequest implements Serializable{ +public class ConfirmOrderReferenceRequest extends DelegateRequest implements Serializable { + + @Override + protected ConfirmOrderReferenceRequest getThis() { + return this; + } //required parameters private String amazonOrderReferenceId; - //optional parameters - private String mwsAuthToken; - /** * * @param amazonOrderReferenceId The order reference identifier. @@ -38,19 +40,6 @@ public ConfirmOrderReferenceRequest(String amazonOrderReferenceId){ this.amazonOrderReferenceId = amazonOrderReferenceId; } - /** - * - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return The MWSAuthToken - */ - public ConfirmOrderReferenceRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * * @return AmazonOrderReferenceId @@ -59,14 +48,6 @@ public String getAmazonOrderReferenceId() { return amazonOrderReferenceId; } - /** - * - * @return MWSAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -77,7 +58,9 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "ConfirmOrderReferenceRequest{" + "amazonOrderReferenceId=" + amazonOrderReferenceId + ", mwsAuthToken=" + mwsAuthToken + '}'; + return "ConfirmOrderReferenceRequest{" + + "amazonOrderReferenceId=" + amazonOrderReferenceId + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } } diff --git a/src/com/amazon/pay/request/CreateOrderReferenceForIdRequest.java b/src/com/amazon/pay/request/CreateOrderReferenceForIdRequest.java index 9974af9..83a418a 100644 --- a/src/com/amazon/pay/request/CreateOrderReferenceForIdRequest.java +++ b/src/com/amazon/pay/request/CreateOrderReferenceForIdRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -23,14 +23,18 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class CreateOrderReferenceForIdRequest implements Serializable { +public class CreateOrderReferenceForIdRequest extends DelegateRequest implements Serializable { + + @Override + protected CreateOrderReferenceForIdRequest getThis() { + return this; + } //required parameters private String id; private AmazonReferenceIdType idType; //optonal parameters - private String mwsAuthToken; private Boolean inheritShippingAddress; private Boolean confirmNow; private CurrencyCode orderTotalCurrencyCode; @@ -92,30 +96,6 @@ public AmazonReferenceIdType getIdType() { return idType; } - /** - * Represents the authorization of a specific developer by a specific Amazon seller. - * Required For web applications and third-party developer authorizations only. - * - * @param mwsAuthToken - * The authorization token that you received when you registered for Amazon MWS. - * @return CreateOrderReferenceForIdRequest - * Container holding CreateOrderReferenceForId operation parameters - */ - public CreateOrderReferenceForIdRequest setMWSAuthToken(final String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - - /** - * Represents the authorization of a specific developer by a specific Amazon seller. - * Required For web applications and third-party developer authorizations only. - * - * @return MWSAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Specifies whether to inherit the shipping address details from * the object represented by the Id request parameter. diff --git a/src/com/amazon/pay/request/DelegateRequest.java b/src/com/amazon/pay/request/DelegateRequest.java new file mode 100644 index 0000000..5112228 --- /dev/null +++ b/src/com/amazon/pay/request/DelegateRequest.java @@ -0,0 +1,80 @@ +/** + * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.pay.request; + +public abstract class DelegateRequest> { + + private String mwsAuthToken; + private String sellerId; + + protected abstract T getThis(); + + /** + * Returns the MWS Auth Token + * + * @return mwsAuthToken + */ + public String getMwsAuthToken() { + return mwsAuthToken; + } + + /** + * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required + * only for third-party solution providers and marketplaces. Do not + * specify this parameter for merchants creating their own custom integration. + * + * @return The subclass object + */ + public T setMWSAuthToken(String mwsAuthToken) { + this.mwsAuthToken = mwsAuthToken; + return getThis(); + } + + /** + * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required + * only for third-party solution providers and marketplaces. Do not + * specify this parameter for merchants creating their own custom integration. + * Does same thing as setMWSAuthToken. + * + * @return The subclass object + */ + public T withMWSAuthToken(String mwsAuthToken) { + this.mwsAuthToken = mwsAuthToken; + return getThis(); + } + + /** + * Returns the request-specific sellerId + * + * @return sellerId + */ + public String getSellerId() { + return sellerId; + } + + /** + * @param sellerId Sets request-specific merchant ID in order to override any merchant ID + * supplied from the Config object. This is useful for third-party solution + * providers that deal with hundreds or thousands of merchant ID's at the + * same time and do not want to contruct a new Config object for each request. + * + * @return The subclass object + */ + public T setSellerId(String sellerId) { + this.sellerId = sellerId; + return getThis(); + } + +} diff --git a/src/com/amazon/pay/request/GetAuthorizationDetailsRequest.java b/src/com/amazon/pay/request/GetAuthorizationDetailsRequest.java index 7f17dbf..6447b74 100644 --- a/src/com/amazon/pay/request/GetAuthorizationDetailsRequest.java +++ b/src/com/amazon/pay/request/GetAuthorizationDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -22,36 +22,26 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class GetAuthorizationDetailsRequest implements Serializable{ +public class GetAuthorizationDetailsRequest extends DelegateRequest implements Serializable { + + @Override + protected GetAuthorizationDetailsRequest getThis() { + return this; + } //required parameters private String amazonAuthorizationId; - //optional parameters - private String mwsAuthToken; - /** * * @param amazonAuthorizationId - * The authorization identifier that was generated + * The authorization identifier that was generated * by Amazon in the earlier call to Authorize. */ public GetAuthorizationDetailsRequest(String amazonAuthorizationId) { this.amazonAuthorizationId = amazonAuthorizationId; } - /** - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return The MWSAuthToken - */ - public GetAuthorizationDetailsRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * @return AmazonAuthorizationId */ @@ -59,13 +49,6 @@ public String getAmazonAuthorizationId() { return amazonAuthorizationId; } - /** - * @return MWSAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -76,9 +59,9 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "GetAuthorizationDetailsRequest{" + "amazonAuthorizationId=" + amazonAuthorizationId + ", mwsAuthToken=" + mwsAuthToken + '}'; + return "GetAuthorizationDetailsRequest{" + + "amazonAuthorizationId=" + amazonAuthorizationId + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } - - } diff --git a/src/com/amazon/pay/request/GetBillingAgreementDetailsRequest.java b/src/com/amazon/pay/request/GetBillingAgreementDetailsRequest.java index 9c50f66..233c68d 100644 --- a/src/com/amazon/pay/request/GetBillingAgreementDetailsRequest.java +++ b/src/com/amazon/pay/request/GetBillingAgreementDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -23,43 +23,34 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class GetBillingAgreementDetailsRequest implements Serializable{ +public class GetBillingAgreementDetailsRequest extends DelegateRequest implements Serializable { + + @Override + protected GetBillingAgreementDetailsRequest getThis() { + return this; + } //required parameters private String amazonBillingAgreementId; //optional parameters private String addressConsentToken; - private String mwsAuthToken; /** * * @param amazonBillingAgreementId - * The billing agreement identifier. This value is retrieved + * The billing agreement identifier. This value is retrieved * from the Amazon Button, AddressBook, or Wallet widgets. */ public GetBillingAgreementDetailsRequest(String amazonBillingAgreementId) { this.amazonBillingAgreementId = amazonBillingAgreementId; } - /** - * - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return The MWSAuthToken - */ - public GetBillingAgreementDetailsRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * * @param addressConsentToken - * The buyer address consent token. You must provide a valid - * AddressConsentToken if you want to get the full shipping address before + * The buyer address consent token. You must provide a valid + * AddressConsentToken if you want to get the full shipping address before * the billing agreement is confirmed. * @return AddressConsentToken */ @@ -84,14 +75,6 @@ public String getAddressConsentToken() { return addressConsentToken; } - /** - * - * @return MWSAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -102,9 +85,10 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "GetBillingAgreementDetailsRequest{" + "amazonBillingAgreementId=" + amazonBillingAgreementId + ", addressConsentToken=" - + addressConsentToken + ", mwsAuthToken=" + mwsAuthToken + '}'; + return "GetBillingAgreementDetailsRequest{" + + "amazonBillingAgreementId=" + amazonBillingAgreementId + + ", addressConsentToken=" + addressConsentToken + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } - } diff --git a/src/com/amazon/pay/request/GetCaptureDetailsRequest.java b/src/com/amazon/pay/request/GetCaptureDetailsRequest.java index 0cbfbd7..f6ef528 100644 --- a/src/com/amazon/pay/request/GetCaptureDetailsRequest.java +++ b/src/com/amazon/pay/request/GetCaptureDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -22,10 +22,14 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class GetCaptureDetailsRequest implements Serializable{ +public class GetCaptureDetailsRequest extends DelegateRequest implements Serializable { + + @Override + protected GetCaptureDetailsRequest getThis() { + return this; + } private String amazonCaptureId; - private String mwsAuthToken; /** * @param amazonCaptureId The capture identifier that was generated by Amazon @@ -35,20 +39,6 @@ public GetCaptureDetailsRequest(String amazonCaptureId) { this.amazonCaptureId = amazonCaptureId; } - /** - * Set the value of mwsAuthToken - * - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return The MWSAuthToken - */ - public GetCaptureDetailsRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * *@return return the value of AmazonCaptureId @@ -57,14 +47,6 @@ public String getAmazonCaptureId() { return amazonCaptureId; } - /** - * - * @return mwsAuthToken Get the value of mwsAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -75,7 +57,9 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "GetCaptureDetailsRequest{" + "amazonCaptureId=" + amazonCaptureId + ", mwsAuthToken=" + mwsAuthToken + '}'; + return "GetCaptureDetailsRequest{" + + "amazonCaptureId=" + amazonCaptureId + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } } diff --git a/src/com/amazon/pay/request/GetMerchantAccountStatusRequest.java b/src/com/amazon/pay/request/GetMerchantAccountStatusRequest.java new file mode 100644 index 0000000..e8ae595 --- /dev/null +++ b/src/com/amazon/pay/request/GetMerchantAccountStatusRequest.java @@ -0,0 +1,46 @@ +/** + * Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.pay.request; + +import java.io.Serializable; + +/** + * Container for the parameters to the GetMerchantAccountStatusRequest operation. + * For more information documentation, see + * https://pay.amazon.com/documentation/ + */ +public class GetMerchantAccountStatusRequest extends DelegateRequest implements Serializable { + + @Override + protected GetMerchantAccountStatusRequest getThis() { + return this; + } + + /** + * Returns a string representation of this object; useful for testing and + * debugging. + * + * @return A string representation of this object. + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + return "GetMerchantAccountStatusRequest{" + + "sellerId=" + getSellerId() + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; + } + +} diff --git a/src/com/amazon/pay/request/GetOrderReferenceDetailsRequest.java b/src/com/amazon/pay/request/GetOrderReferenceDetailsRequest.java index 5a3a871..dafcf0c 100644 --- a/src/com/amazon/pay/request/GetOrderReferenceDetailsRequest.java +++ b/src/com/amazon/pay/request/GetOrderReferenceDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -23,19 +23,23 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class GetOrderReferenceDetailsRequest implements Serializable { +public class GetOrderReferenceDetailsRequest extends DelegateRequest implements Serializable { + + @Override + protected GetOrderReferenceDetailsRequest getThis() { + return this; + } private String amazonOrderReferenceId; private String accessToken; - private String mwsAuthToken; @Deprecated private String addressConsentToken; /** * - * @param amazonOrderReferenceId The order reference identifier. - * This value is retrieved from the Amazon Button widget + * @param amazonOrderReferenceId The order reference identifier. + * This value is retrieved from the Amazon Button widget * after the buyer has successfully authenticated with Amazon. */ public GetOrderReferenceDetailsRequest(String amazonOrderReferenceId) { @@ -44,8 +48,8 @@ public GetOrderReferenceDetailsRequest(String amazonOrderReferenceId) { /** * - * @param addressConsentToken The buyer address consent token. This value is retrieved - * from the Amazon Button widget after the buyer has + * @param addressConsentToken The buyer address consent token. This value is retrieved + * from the Amazon Button widget after the buyer has * successfully authenticated with Amazon. * * @return AddressConsentToken @@ -86,21 +90,6 @@ public String getAccessToken() { return this.accessToken; } - - /** - * Sets MWSAuthToken parameter in request. MWSAuthToken is required only for third-party solution providers - * and marketplaces. Do not specify this parameter for merchants creating their own custom integration. - * - * @param mwsAuthToken new value of mwsAuthToken - * - * @return The MWSAuthToken - */ - public GetOrderReferenceDetailsRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - - /** * * @return AmazonOrderReferenceId @@ -109,14 +98,6 @@ public String getAmazonOrderReferenceId() { return amazonOrderReferenceId; } - /** - * - * @return MWSAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -130,6 +111,6 @@ public String toString() { return "GetOrderReferenceDetailsRequest{" + "amazonOrderReferenceId=" + amazonOrderReferenceId + ", accessToken=" + accessToken - + ", mwsAuthToken=" + mwsAuthToken + '}'; + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } } diff --git a/src/com/amazon/pay/request/GetProviderCreditDetailsRequest.java b/src/com/amazon/pay/request/GetProviderCreditDetailsRequest.java index 5daee0d..96e4a7a 100644 --- a/src/com/amazon/pay/request/GetProviderCreditDetailsRequest.java +++ b/src/com/amazon/pay/request/GetProviderCreditDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -23,17 +23,19 @@ * https://pay.amazon.com/documentation/ * */ -public class GetProviderCreditDetailsRequest implements Serializable{ - +public class GetProviderCreditDetailsRequest extends DelegateRequest implements Serializable { + + @Override + protected GetProviderCreditDetailsRequest getThis() { + return this; + } + //required parameters private String amazonProviderCreditId; private String sellerId; - - //optional parameters - private String mwsAuthToken; /** - * + * * @param amazonProviderCreditId Provide Amazon Provider Credit ID in the request * * @param sellerId Provide the Seller ID in the request @@ -43,18 +45,6 @@ public GetProviderCreditDetailsRequest(String amazonProviderCreditId , String se this.sellerId = sellerId; } - /** - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return The MWSAuthToken - */ - public GetProviderCreditDetailsRequest setMwsAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * @return amazonProviderCreditId */ @@ -69,13 +59,6 @@ public String getSellerId() { return sellerId; } - /** - * @return mwsAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -86,9 +69,10 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "GetProviderCreditDetailsRequest{" + "amazonProviderCreditId=" + amazonProviderCreditId + ", sellerId=" + sellerId + ", mwsAuthToken=" - + mwsAuthToken + '}'; + return "GetProviderCreditDetailsRequest{" + + "amazonProviderCreditId=" + amazonProviderCreditId + + ", sellerId=" + sellerId + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } - - + } diff --git a/src/com/amazon/pay/request/GetProviderCreditReversalDetailsRequest.java b/src/com/amazon/pay/request/GetProviderCreditReversalDetailsRequest.java index e62885f..d07ad51 100644 --- a/src/com/amazon/pay/request/GetProviderCreditReversalDetailsRequest.java +++ b/src/com/amazon/pay/request/GetProviderCreditReversalDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -23,62 +23,35 @@ * https://pay.amazon.com/documentation/ * */ -public class GetProviderCreditReversalDetailsRequest implements Serializable{ - +public class GetProviderCreditReversalDetailsRequest extends DelegateRequest implements Serializable { + + @Override + protected GetProviderCreditReversalDetailsRequest getThis() { + return this; + } + //required parameters private final String amazonProviderCreditReversalId; - private final String sellerId; - - //optional parameters - private String mwsAuthToken; - + /** * * @param amazonProviderCreditReversalId Provide Amazon Provider Credit ID in the request * * @param sellerId Provide the Seller ID in the request */ - public GetProviderCreditReversalDetailsRequest(String amazonProviderCreditReversalId , String sellerId) { + public GetProviderCreditReversalDetailsRequest(String amazonProviderCreditReversalId, String sellerId) { this.amazonProviderCreditReversalId = amazonProviderCreditReversalId; - this.sellerId = sellerId; + setSellerId(sellerId); } /** - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. * - * @return The MWSAuthToken - */ - public GetProviderCreditReversalDetailsRequest setMwsAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - - /** - * * @return amazonProviderCreditReversalId */ public String getAmazonProviderCreditReversalId() { return amazonProviderCreditReversalId; } - /** - * - * @return sellerId - */ - public String getSellerId() { - return sellerId; - } - - /** - * - * @return mwsAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -89,9 +62,10 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "GetProviderCreditReversalDetailsRequest{" + "amazonProviderCreditReversalId=" + amazonProviderCreditReversalId + ", sellerId=" - + sellerId + ", mwsAuthToken=" + mwsAuthToken + '}'; + return "GetProviderCreditReversalDetailsRequest{" + + "amazonProviderCreditReversalId=" + amazonProviderCreditReversalId + + ", sellerId=" + getSellerId() + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } - } diff --git a/src/com/amazon/pay/request/GetRefundDetailsRequest.java b/src/com/amazon/pay/request/GetRefundDetailsRequest.java index d8468d5..cb60760 100644 --- a/src/com/amazon/pay/request/GetRefundDetailsRequest.java +++ b/src/com/amazon/pay/request/GetRefundDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -21,10 +21,14 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class GetRefundDetailsRequest implements Serializable{ +public class GetRefundDetailsRequest extends DelegateRequest implements Serializable { + + @Override + protected GetRefundDetailsRequest getThis() { + return this; + } private String amazonRefundId; - private String mwsAuthToken; /** * @@ -34,18 +38,6 @@ public GetRefundDetailsRequest(String amazonRefundId) { this.amazonRefundId = amazonRefundId; } - /** - * @param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return The MWSAuthToken - */ - public GetRefundDetailsRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * * @return amazonRefundId @@ -54,14 +46,6 @@ public String getAmazonRefundId() { return amazonRefundId; } - /** - * - * @return mwsAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -72,9 +56,9 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "GetRefundDetailsRequest{" + "amazonRefundId=" + amazonRefundId + ", mwsAuthToken=" + mwsAuthToken + '}'; + return "GetRefundDetailsRequest{" + + "amazonRefundId=" + amazonRefundId + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } - - } diff --git a/src/com/amazon/pay/request/ListOrderReferenceByNextTokenRequest.java b/src/com/amazon/pay/request/ListOrderReferenceByNextTokenRequest.java index 06b93d7..0607491 100644 --- a/src/com/amazon/pay/request/ListOrderReferenceByNextTokenRequest.java +++ b/src/com/amazon/pay/request/ListOrderReferenceByNextTokenRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -19,7 +19,13 @@ /** * Container for the parameters to the ListOrderReferenceByNextToken operation. */ -public class ListOrderReferenceByNextTokenRequest extends SetMWSAuthToken implements Serializable { +public class ListOrderReferenceByNextTokenRequest extends DelegateRequest implements Serializable { + + @Override + protected ListOrderReferenceByNextTokenRequest getThis() { + return this; + } + //required parameters private String nextPageToken; diff --git a/src/com/amazon/pay/request/ListOrderReferenceRequest.java b/src/com/amazon/pay/request/ListOrderReferenceRequest.java index 71a8a4b..6bdb3ce 100644 --- a/src/com/amazon/pay/request/ListOrderReferenceRequest.java +++ b/src/com/amazon/pay/request/ListOrderReferenceRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -14,7 +14,6 @@ */ package com.amazon.pay.request; - import com.amazon.pay.types.OrderReferenceStatus; import com.amazon.pay.types.SortOrder; @@ -25,7 +24,12 @@ /** * Container for the parameters to the ListOrderReference operation. */ -public class ListOrderReferenceRequest extends SetMWSAuthToken implements Serializable { +public class ListOrderReferenceRequest extends DelegateRequest implements Serializable { + + @Override + protected ListOrderReferenceRequest getThis() { + return this; + } // required parameters private String queryId; diff --git a/src/com/amazon/pay/request/RefundRequest.java b/src/com/amazon/pay/request/RefundRequest.java index 1bd938d..d3fdc35 100644 --- a/src/com/amazon/pay/request/RefundRequest.java +++ b/src/com/amazon/pay/request/RefundRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -24,7 +24,12 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class RefundRequest implements Serializable { +public class RefundRequest extends DelegateRequest implements Serializable { + + @Override + protected RefundRequest getThis() { + return this; + } //required parameters private String amazonCaptureId; @@ -35,10 +40,8 @@ public class RefundRequest implements Serializable { //optional parameters private String sellerRefundNote; private String softDescriptor; - private String mwsAuthToken; private List providerCredit; - /** * @param captureId The capture identifier that was generated by Amazon in the earlier call to Capture. * @param refundReferenceId The identifier for this refund transaction that you specify. @@ -84,17 +87,6 @@ public RefundRequest setSoftDescriptor(String softDescriptor) { return this; } - /** - * @param mwsAuthToken Sets MWSAuthToken. Applicable for third-party - * solution providers only. - * - * @return the MWSAuthToken - */ - public RefundRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * @return amazonCaptureId The capture identifier that was generated by * Amazon in the earlier call to Capture. @@ -141,13 +133,6 @@ public String getSoftDescriptor() { return softDescriptor; } - /** - * @return mwsAuthToken Applicable for third-party solution providers only. - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * @return ProviderCredit associated with Refund operation */ @@ -176,9 +161,15 @@ public RefundRequest setProviderCredit(List providerCreditList) */ @Override public String toString() { - return "RefundRequest{" + "amazonCaptureId=" + amazonCaptureId + ", refundReferenceId=" + refundReferenceId + ", refundAmount=" - + refundAmount + ", refundCurrencyCode=" + refundCurrencyCode + ", sellerRefundNote=" + sellerRefundNote + ", softDescriptor=" - + softDescriptor + ", mwsAuthToken=" + mwsAuthToken + ", providerCredit=" + providerCredit + '}'; + return "RefundRequest{" + + "amazonCaptureId=" + amazonCaptureId + + ", refundReferenceId=" + refundReferenceId + + ", refundAmount=" + refundAmount + + ", refundCurrencyCode=" + refundCurrencyCode + + ", sellerRefundNote=" + sellerRefundNote + + ", softDescriptor=" + softDescriptor + + ", mwsAuthToken=" + getMwsAuthToken() + + ", providerCredit=" + providerCredit + '}'; } } diff --git a/src/com/amazon/pay/request/RequestHelper.java b/src/com/amazon/pay/request/RequestHelper.java index f1eae65..9f92e12 100644 --- a/src/com/amazon/pay/request/RequestHelper.java +++ b/src/com/amazon/pay/request/RequestHelper.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -44,10 +44,18 @@ public RequestHelper(PayConfig payConfig) { this.payUtil = new PayLogUtil(); } - - private Map addClientParameters(Map params) { + private Map addClientParameters(Map params, DelegateRequest request) { try { - params.put(ServiceConstants.SELLER_ID, payConfig.getSellerId()); + if ((request != null) && (request.getMwsAuthToken() != null)) { + params.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); + } + + if ((request != null) && (request.getSellerId() != null)) { + params.put(ServiceConstants.SELLER_ID, request.getSellerId()); + } else { + params.put(ServiceConstants.SELLER_ID, payConfig.getSellerId()); + } + params.put(ServiceConstants.AWSACCESSKEYID, payConfig.getAccessKey()); params.put(ServiceConstants.SIGNATUREVERSION, "2"); params.put(ServiceConstants.SIGNATUREMETHOD, "HmacSHA256"); @@ -105,10 +113,7 @@ public String getPostURL(GetOrderReferenceDetailsRequest request) { if (request.getAccessToken() != null) { parameters.put(ServiceConstants.ACCESS_TOKEN, request.getAccessToken()); } - if (request.getMwsAuthToken() != null) { - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - } - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -142,13 +147,10 @@ public String getPostURL(SetOrderReferenceDetailsRequest request) { if (request.getCustomInformation() != null) { parameters.put(ServiceConstants.CUSTOM_INFORMATION, request.getCustomInformation()); } - if (request.getMwsAuthToken() != null) { - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - } if (request.getRequestPaymentAuthorization() != null) { parameters.put(ServiceConstants.REQUEST_PAYMENT_AUTHORIZATION, Boolean.toString(request.getRequestPaymentAuthorization())); } - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -182,13 +184,10 @@ public String getPostURL(AuthorizeRequest request) { if (request.getSoftDescriptor() != null) { parameters.put(ServiceConstants.SOFT_DESCRIPTOR, request.getSoftDescriptor()); } - if (request.getMwsAuthToken() != null) { - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - } if (request.getProviderCredit() != null) { addProviderCreditToParamMap(request.getProviderCredit(), parameters); } - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -198,10 +197,7 @@ public String getPostURL(GetAuthorizationDetailsRequest request) { if (request.getAmazonAuthorizationId() != null) { parameters.put(ServiceConstants.AMAZON_AUTHORIZATION_ID, request.getAmazonAuthorizationId()); } - if (request.getMwsAuthToken() != null) { - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - } - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -230,13 +226,10 @@ public String getPostURL(CaptureRequest request) { if (request.getSoftDescriptor() != null) { parameters.put( ServiceConstants.SOFT_DESCRIPTOR, request.getSoftDescriptor()); } - if (request.getMwsAuthToken() != null) { - parameters.put( ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - } if (request.getProviderCredit() != null) { addProviderCreditToParamMap(request.getProviderCredit(), parameters); } - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -246,10 +239,7 @@ public String getPostURL(GetCaptureDetailsRequest request) { if (request.getAmazonCaptureId() != null) { parameters.put(ServiceConstants.AMAZON_CAPTURE_ID, request.getAmazonCaptureId()); } - if (request.getMwsAuthToken() != null) { - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - } - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -259,10 +249,7 @@ public String getPostURL(ConfirmOrderReferenceRequest request) { if (request.getAmazonOrderReferenceId() != null) { parameters.put(ServiceConstants.AMAZON_ORDER_REFERENCE_ID, request.getAmazonOrderReferenceId()); } - if (request.getMwsAuthToken() != null) { - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - } - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -275,10 +262,7 @@ public String getPostURL(CancelOrderReferenceRequest request) { if (request.getCancelationReason() != null) { parameters.put(ServiceConstants.CANCELATION_REASON, request.getCancelationReason()); } - if (request.getMwsAuthToken() != null) { - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - } - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -291,10 +275,7 @@ public String getPostURL(CloseOrderReferenceRequest request) { if (request.getClosureReason() != null) { parameters.put(ServiceConstants.CLOSURE_REASON, request.getClosureReason()); } - if (request.getMwsAuthToken() != null) { - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - } - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -307,10 +288,7 @@ public String getPostURL(CloseAuthorizationRequest request) { if (request.getClosureReason() != null) { parameters.put(ServiceConstants.CLOSURE_REASON, request.getClosureReason()); } - if (request.getMwsAuthToken() != null) { - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - } - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -338,50 +316,40 @@ public String getPostURL(RefundRequest request) { if (request.getSoftDescriptor() != null) { parameters.put(ServiceConstants.SOFT_DESCRIPTOR, request.getSoftDescriptor()); } - if (request.getMwsAuthToken() != null) { - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - } if (request.getProviderCredit() != null) { addProviderCreditToParamMap(request.getProviderCredit(), parameters); } - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } public String getPostURL(GetRefundDetailsRequest request) { Map parameters = new TreeMap(); parameters.put(ServiceConstants.ACTION, ServiceConstants.GET_REFUND_DETAILS); - if (request.getAmazonRefundId() != null) + if (request.getAmazonRefundId() != null) { parameters.put(ServiceConstants.AMAZON_REFUND_ID, request.getAmazonRefundId()); - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - addClientParameters(parameters); + } + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } public String getPostURL(GetProviderCreditDetailsRequest request) { Map parameters = new TreeMap(); parameters.put(ServiceConstants.ACTION, ServiceConstants.GET_PROVIDER_CREDIT_DETAILS); - if (request.getAmazonProviderCreditId() != null) + if (request.getAmazonProviderCreditId() != null) { parameters.put(ServiceConstants.AMAZON_PROVIDER_CREDIT_ID, request.getAmazonProviderCreditId()); - if (request.getSellerId() != null) - parameters.put(ServiceConstants.SELLER_ID, request.getSellerId()); - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - addClientParameters(parameters); + } + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } public String getPostURL(GetProviderCreditReversalDetailsRequest request) { Map parameters = new TreeMap(); parameters.put(ServiceConstants.ACTION, ServiceConstants.GET_REVERSE_PROVIDER_CREDIT_DETAILS); - if (request.getAmazonProviderCreditReversalId() != null) + if (request.getAmazonProviderCreditReversalId() != null) { parameters.put(ServiceConstants.AMAZON_PROVIDER_CREDIT_REVERSAL_ID, request.getAmazonProviderCreditReversalId()); - if (request.getSellerId() != null) - parameters.put(ServiceConstants.SELLER_ID, request.getSellerId()); - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - addClientParameters(parameters); + } + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -396,15 +364,11 @@ public String getPostURL(ReverseProviderCreditRequest request) { parameters.put(ServiceConstants.CREDIT_REVERSAL_REFERENCE_ID, request.getCreditReversalReferenceId()); if (request.getCreditReversalAmount() != null) parameters.put(ServiceConstants.CREDIT_REVERSAL_AMOUNT, request.getCreditReversalAmount()); - if (request.getSellerId() != null) - parameters.put(ServiceConstants.SELLER_ID, request.getSellerId()); if (request.getCreditReversalAmountCurrencyCode() != null) parameters.put(ServiceConstants.CREDIT_REVERSAL_AMOUNT_CURRENCY_CODE, request.getCreditReversalAmountCurrencyCode().toString()); if (request.getCreditReversalNote() != null) parameters.put(ServiceConstants.CREDIT_REVERSAL_NOTE, request.getCreditReversalNote()); - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN,request.getMwsAuthToken()); - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -413,11 +377,9 @@ public String getPostURL(GetBillingAgreementDetailsRequest request) { parameters.put(ServiceConstants.ACTION, ServiceConstants.GET_BILLING_AGREEMENT_DETAILS); if (request.getAmazonBillingAgreementId() != null) parameters.put(ServiceConstants.AMAZON_BILLING_AGREEMENT_ID, request.getAmazonBillingAgreementId()); - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); if (request.getAddressConsentToken() != null) parameters.put(ServiceConstants.ADDRESS_CONSENT_TOKEN , request.getAddressConsentToken()); - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -426,19 +388,17 @@ public String getPostURL(SetBillingAgreementDetailsRequest request) { parameters.put(ServiceConstants.ACTION, ServiceConstants.SET_BILLING_AGREEMENT_DETAILS); if (request.getAmazonBillingAgreementId() != null) parameters.put(ServiceConstants.AMAZON_BILLING_AGREEMENT_ID, request.getAmazonBillingAgreementId()); - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); if (request.getPlatformId() != null) parameters.put(ServiceConstants.BILLING_AGREEMENT_PLATFORM_ID, request.getPlatformId()); if (request.getSellerNote() != null) parameters.put(ServiceConstants.BILLING_AGREEMENT_SELLER_NOTE, request.getSellerNote()); if (request.getAmazonBillingAgreementId() != null) parameters.put(ServiceConstants.BILLING_AGREEMENT_SELLER_BILLING_AGREEMENT_ID, request.getSellerBillingAgreementId()); - if (request.getStoreName()!= null) + if (request.getStoreName() != null) parameters.put(ServiceConstants.BILLING_AGREEMENT_SELLER_STORE_NAME, request.getStoreName()); if (request.getCustomInformation() != null) parameters.put(ServiceConstants.BILLING_AGREEMENT_SELLER_CUSTOM_INFORMATION, request.getCustomInformation()); - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -447,9 +407,7 @@ public String getPostURL(ConfirmBillingAgreementRequest request) { parameters.put(ServiceConstants.ACTION, ServiceConstants.CONFIRM_BILLING_AGREEMENT_DETAILS); if (request.getAmazonBillingAgreementId() != null) parameters.put(ServiceConstants.AMAZON_BILLING_AGREEMENT_ID, request.getAmazonBillingAgreementId()); - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -460,9 +418,7 @@ public String getPostURL(CloseBillingAgreementRequest request) { parameters.put(ServiceConstants.AMAZON_BILLING_AGREEMENT_ID, request.getAmazonBillingAgreementId()); if (request.getClosureReason() != null) parameters.put(ServiceConstants.CLOSURE_REASON, request.getClosureReason()); - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -499,9 +455,7 @@ public String getPostURL(AuthorizeOnBillingAgreementRequest request) { parameters.put(ServiceConstants.BA_CUSTOM_INFORMATION, request.getCustomInformation()); if (request.getInheritShippingAddress() != null) parameters.put(ServiceConstants.INHERIT_SHIPPING_ADDRESS, Boolean.toString(request.getInheritShippingAddress())); - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -510,9 +464,7 @@ public String getPostURL(ValidateBillingAgreementRequest request) { parameters.put(ServiceConstants.ACTION, ServiceConstants.VALIDATE_BILLING_AGREEMENT_DETAILS); if (request.getAmazonBillingAgreementId() != null) parameters.put(ServiceConstants.AMAZON_BILLING_AGREEMENT_ID, request.getAmazonBillingAgreementId()); - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -551,17 +503,15 @@ public String getPostURL(CreateOrderReferenceForIdRequest request) { parameters.put(ServiceConstants.STORE_NAME, request.getStoreName()); if (request.getCustomInformation() != null) parameters.put(ServiceConstants.CUSTOM_INFORMATION, request.getCustomInformation()); - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } public String getPostURLGetServiceStatus() { final Map parameters = new TreeMap(); parameters.put(ServiceConstants.ACTION, ServiceConstants.GET_SERVICE_STATUS); - addClientParameters(parameters); + addClientParameters(parameters, null); return Util.convertParameterMapToString(parameters); } @@ -603,10 +553,8 @@ public String getPostURL(ListOrderReferenceRequest request){ count++; } } - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -616,10 +564,8 @@ public String getPostURL(ListOrderReferenceByNextTokenRequest request){ if (request.getNextPageToken() != null) parameters.put(ServiceConstants.NEXT_PAGE_TOKEN, request.getNextPageToken()); - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - addClientParameters(parameters); + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } @@ -657,10 +603,16 @@ public String getPostURL(SetOrderAttributesRequest request){ count++; } } - if (request.getMwsAuthToken() != null) - parameters.put(ServiceConstants.MWS_AUTH_TOKEN, request.getMwsAuthToken()); - addClientParameters(parameters); + addClientParameters(parameters, request); + return Util.convertParameterMapToString(parameters); + } + + public String getPostURL(GetMerchantAccountStatusRequest request){ + final Map parameters = new TreeMap(); + parameters.put(ServiceConstants.ACTION, ServiceConstants.GET_MERCHANT_ACCOUNT_STATUS); + + addClientParameters(parameters, request); return Util.convertParameterMapToString(parameters); } diff --git a/src/com/amazon/pay/request/ReverseProviderCreditRequest.java b/src/com/amazon/pay/request/ReverseProviderCreditRequest.java index 5bab2de..8beeeee 100644 --- a/src/com/amazon/pay/request/ReverseProviderCreditRequest.java +++ b/src/com/amazon/pay/request/ReverseProviderCreditRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -24,19 +24,22 @@ * https://pay.amazon.com/documentation/ * */ -public class ReverseProviderCreditRequest implements Serializable{ - +public class ReverseProviderCreditRequest extends DelegateRequest implements Serializable { + + @Override + protected ReverseProviderCreditRequest getThis() { + return this; + } + //required parameters private String amazonProviderCreditId; private String creditReversalReferenceId; private String creditReversalAmount; private CurrencyCode creditReversalAmountCurrencyCode; - private String sellerId; - + //optional parameters private String creditReversalNote ; - private String mwsAuthToken; - + /** * @param amazonProviderCreditId Provide Amazon Provider Credit ID in the request * @@ -46,15 +49,15 @@ public class ReverseProviderCreditRequest implements Serializable{ * * @param creditReversalAmount The reversal amount */ - public ReverseProviderCreditRequest(String amazonProviderCreditId, String creditReversalReferenceId, String sellerId, String creditReversalAmount){ + public ReverseProviderCreditRequest(String amazonProviderCreditId, String creditReversalReferenceId, String sellerId, String creditReversalAmount) { this.amazonProviderCreditId = amazonProviderCreditId; this.creditReversalReferenceId = creditReversalReferenceId; this.creditReversalAmount = creditReversalAmount; - this.sellerId = sellerId; + setSellerId(sellerId); } - + /** - * + * * @param currencyCode Three-digit currency code. In ISO 4217 format. * * @return the Currency Code @@ -64,9 +67,8 @@ public ReverseProviderCreditRequest setCreditReversalCurrencyCode(CurrencyCode c return this; } - /** - * + * * @param creditReversalNote Sets the credit reversal note. * * @return the credit reversal note. @@ -75,21 +77,9 @@ public ReverseProviderCreditRequest setCreditReversalNote(String creditReversalN this.creditReversalNote = creditReversalNote; return this; } - - /** - * - * @param mwsAuthToken Sets MWSAuthToken. Applicable for third-party - * solution providers only. - * - * @return the MWSAuthToken - */ - public ReverseProviderCreditRequest setMwsAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } /** - * + * * @return amazonProviderCreditId */ public String getAmazonProviderCreditId() { @@ -97,7 +87,7 @@ public String getAmazonProviderCreditId() { } /** - * + * * @return creditReversalReferenceId */ public String getCreditReversalReferenceId() { @@ -105,7 +95,7 @@ public String getCreditReversalReferenceId() { } /** - * + * * @return creditReversalAmount */ public String getCreditReversalAmount() { @@ -113,7 +103,7 @@ public String getCreditReversalAmount() { } /** - * + * * @return creditReversalAmountCurrencyCode */ public CurrencyCode getCreditReversalAmountCurrencyCode() { @@ -121,29 +111,13 @@ public CurrencyCode getCreditReversalAmountCurrencyCode() { } /** - * - * @return sellerId - */ - public String getSellerId() { - return sellerId; - } - - /** - * + * * @return creditReversalNote */ public String getCreditReversalNote() { return creditReversalNote; } - /** - * - * @return mwsAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -154,11 +128,14 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "ReverseProviderCreditRequest{" + "amazonProviderCreditId=" + amazonProviderCreditId + ", creditReversalReferenceId=" - + creditReversalReferenceId + ", creditReversalAmount=" + creditReversalAmount + ", creditReversalAmountCurrencyCode=" - + creditReversalAmountCurrencyCode + ", sellerId=" + sellerId + ", creditReversalNote=" + creditReversalNote + ", mwsAuthToken=" - + mwsAuthToken + '}'; + return "ReverseProviderCreditRequest{" + + "amazonProviderCreditId=" + amazonProviderCreditId + + ", creditReversalReferenceId=" + creditReversalReferenceId + + ", creditReversalAmount=" + creditReversalAmount + + ", creditReversalAmountCurrencyCode=" + creditReversalAmountCurrencyCode + + ", sellerId=" + getSellerId() + + ", creditReversalNote=" + creditReversalNote + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } - } diff --git a/src/com/amazon/pay/request/SetBillingAgreementDetailsRequest.java b/src/com/amazon/pay/request/SetBillingAgreementDetailsRequest.java index 4c1b5a9..39374c9 100644 --- a/src/com/amazon/pay/request/SetBillingAgreementDetailsRequest.java +++ b/src/com/amazon/pay/request/SetBillingAgreementDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -21,7 +21,12 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class SetBillingAgreementDetailsRequest implements Serializable{ +public class SetBillingAgreementDetailsRequest extends DelegateRequest implements Serializable { + + @Override + protected SetBillingAgreementDetailsRequest getThis() { + return this; + } //required parameters private String amazonBillingAgreementId; @@ -32,11 +37,10 @@ public class SetBillingAgreementDetailsRequest implements Serializable{ private String sellerBillingAgreementId; private String storeName; private String customInformation; - private String mwsAuthToken; /** * - * @param amazonBillingAgreementId The billing agreement identifier. + * @param amazonBillingAgreementId The billing agreement identifier. * This value is retrieved from the Amazon Button, AddressBook, or Wallet widgets. */ public SetBillingAgreementDetailsRequest(String amazonBillingAgreementId) { @@ -44,21 +48,9 @@ public SetBillingAgreementDetailsRequest(String amazonBillingAgreementId) { } /** - * Sets MWSAuthToken. This is applicable for third-party solution providers only - * @param mwsAuthToken Sets MWSAuthToken. Applicable for third-party - * solution providers only. - * - * @return the MWSAuthToken - */ - public SetBillingAgreementDetailsRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - - /** - * Sets the SellerId of the Solution Provider that developed the platform. - * This value should only be provided by Solution Providers. It should not be - * provided by merchants creating their own custom integration. Do not specify + * Sets the SellerId of the Solution Provider that developed the platform. + * This value should only be provided by Solution Providers. It should not be + * provided by merchants creating their own custom integration. Do not specify * the SellerId of the merchant for this request parameter. * @param platformId Represents the SellerId of the Solution Provider that developed the platform. * This value should only be provided by Solution Providers. It should @@ -94,7 +86,7 @@ public SetBillingAgreementDetailsRequest setSellerBillingAgreementId(String sell } /** - * Sets identifier of the store from which the order was placed. + * Sets identifier of the store from which the order was placed. * This overrides the default value in Seller Central under Settings > Account Settings. * @param storeName the identifier of the store from which the order was placed. * @@ -164,14 +156,6 @@ public String getCustomInformation() { return customInformation; } - /** - * - * @return mwsAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -181,8 +165,14 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "SetBillingAgreementDetailsRequest{" + "amazonBillingAgreementId=" + amazonBillingAgreementId + ", platformId=" - + platformId + ", sellerNote=" + sellerNote + ", sellerBillingAgreementId=" + sellerBillingAgreementId + ", storeName=" - + storeName + ", customInformation=" + customInformation + ", mwsAuthToken=" + mwsAuthToken + '}'; + return "SetBillingAgreementDetailsRequest{" + + "amazonBillingAgreementId=" + amazonBillingAgreementId + + ", platformId=" + platformId + + ", sellerNote=" + sellerNote + + ", sellerBillingAgreementId=" + sellerBillingAgreementId + + ", storeName=" + storeName + + ", customInformation=" + customInformation + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } + } diff --git a/src/com/amazon/pay/request/SetMWSAuthToken.java b/src/com/amazon/pay/request/SetMWSAuthToken.java deleted file mode 100644 index 5c7e775..0000000 --- a/src/com/amazon/pay/request/SetMWSAuthToken.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -package com.amazon.pay.request; - -public abstract class SetMWSAuthToken { - private String mwsAuthToken; - - /** - * Returns the MWS Auth Token - * - * @return mwsAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - - /** - *@param mwsAuthToken Sets MWSAuthToken parameter in request. MWSAuthToken is required - * only for third-party solution providers and marketplaces. Do not - * specify this parameter for merchants creating their own custom integration. - * - * @return The MWSAuthToken - */ - public SetMWSAuthToken setMwsAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } -} diff --git a/src/com/amazon/pay/request/SetOrderAttributesRequest.java b/src/com/amazon/pay/request/SetOrderAttributesRequest.java index ab45a7d..5aea33a 100644 --- a/src/com/amazon/pay/request/SetOrderAttributesRequest.java +++ b/src/com/amazon/pay/request/SetOrderAttributesRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -25,7 +25,12 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class SetOrderAttributesRequest extends SetMWSAuthToken implements Serializable { +public class SetOrderAttributesRequest extends DelegateRequest implements Serializable { + + @Override + protected SetOrderAttributesRequest getThis() { + return this; + } //required parameters private String amazonOrderReferenceId; diff --git a/src/com/amazon/pay/request/SetOrderReferenceDetailsRequest.java b/src/com/amazon/pay/request/SetOrderReferenceDetailsRequest.java index 94906bf..92ce501 100644 --- a/src/com/amazon/pay/request/SetOrderReferenceDetailsRequest.java +++ b/src/com/amazon/pay/request/SetOrderReferenceDetailsRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -22,7 +22,12 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class SetOrderReferenceDetailsRequest implements Serializable{ +public class SetOrderReferenceDetailsRequest extends DelegateRequest implements Serializable { + + @Override + protected SetOrderReferenceDetailsRequest getThis() { + return this; + } //required parameters private String amazonOrderReferenceId; @@ -35,13 +40,12 @@ public class SetOrderReferenceDetailsRequest implements Serializable{ private String sellerOrderId; private String storeName; private String customInformation; - private String mwsAuthToken; private Boolean requestPaymentAuthorization; /** * * @param amazonOrderReferenceId - * This value is retrieved from the Amazon Button widget + * This value is retrieved from the Amazon Button widget * after the buyer has successfully authenticated with Amazon. * * @param orderAmount @@ -66,9 +70,9 @@ public SetOrderReferenceDetailsRequest setOrderCurrencyCode(CurrencyCode currenc } /** - * Represents the SellerId of the Solution Provider that developed the platform. - * This value should only be provided by Solution Providers. It should not be - * provided by merchants creating their own custom integration. + * Represents the SellerId of the Solution Provider that developed the platform. + * This value should only be provided by Solution Providers. It should not be + * provided by merchants creating their own custom integration. * * @param platformId Represents the SellerId of the Solution Provider that developed the platform. * This value should only be provided by Solution Providers. It should @@ -94,7 +98,7 @@ public SetOrderReferenceDetailsRequest setSellerNote(String sellerNote) { } /** - * The merchant-specified identifier of this order. This is displayed to the + * The merchant-specified identifier of this order. This is displayed to the * buyer in their emails and transaction history on the Amazon Pay website. * * @param sellerOrderId merchant-specified identifier of the order. @@ -107,9 +111,9 @@ public SetOrderReferenceDetailsRequest setSellerOrderId(String sellerOrderId) { } /** - * The identifier of the store from which the order was placed. This overrides + * The identifier of the store from which the order was placed. This overrides * the default value in Seller Central under Settings > Account Settings. It is - * displayed to the buyer in their emails and transaction history on the + * displayed to the buyer in their emails and transaction history on the * Amazon Pay website. * * @param storeName the identifier of the store from which the order was placed. @@ -133,20 +137,6 @@ public SetOrderReferenceDetailsRequest setCustomInformation(String customInforma return this; } - /** - * Applicable only for third-party solution providers or marketplaces. It should not be - * provided by merchants creating their own custom integration. - * - * @param mwsAuthToken Sets MWSAuthToken. Applicable for third-party - * solution providers only. - * - * @return the MWSAuthToken - */ - public SetOrderReferenceDetailsRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * * @return AmazonOrderReferenceId @@ -211,14 +201,6 @@ public String getCustomInformation() { return customInformation; } - /** - * - * @return MWSAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** *Check if payment authorization has been requested or not * @@ -251,8 +233,16 @@ public SetOrderReferenceDetailsRequest setRequestPaymentAuthorization(Boolean re */ @Override public String toString() { - return "SetOrderReferenceDetailsRequest{" + "amazonOrderReferenceId=" + amazonOrderReferenceId + ", orderAmount=" + orderAmount - + ", orderCurrencyCode=" + orderCurrencyCode + ", platformId=" + platformId + ", sellerNote=" + sellerNote + ", sellerOrderId=" - + sellerOrderId + ", storeName=" + storeName + ", customInformation=" + customInformation + ", mwsAuthToken=" + mwsAuthToken + '}'; + return "SetOrderReferenceDetailsRequest{" + + "amazonOrderReferenceId=" + amazonOrderReferenceId + + ", orderAmount=" + orderAmount + + ", orderCurrencyCode=" + orderCurrencyCode + + ", platformId=" + platformId + + ", sellerNote=" + sellerNote + + ", sellerOrderId=" + sellerOrderId + + ", storeName=" + storeName + + ", customInformation=" + customInformation + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } + } diff --git a/src/com/amazon/pay/request/ValidateBillingAgreementRequest.java b/src/com/amazon/pay/request/ValidateBillingAgreementRequest.java index bd36391..c270999 100644 --- a/src/com/amazon/pay/request/ValidateBillingAgreementRequest.java +++ b/src/com/amazon/pay/request/ValidateBillingAgreementRequest.java @@ -1,5 +1,5 @@ /** - * Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. @@ -21,35 +21,25 @@ * For more information documentation, see * https://pay.amazon.com/documentation/ */ -public class ValidateBillingAgreementRequest implements Serializable{ +public class ValidateBillingAgreementRequest extends DelegateRequest implements Serializable { + + @Override + protected ValidateBillingAgreementRequest getThis() { + return this; + } //required parameters private String amazonBillingAgreementId; - //optional parameters - private String mwsAuthToken; - /** * - * @param amazonBillingAgreementId The billing agreement identifier. + * @param amazonBillingAgreementId The billing agreement identifier. * This value is retrieved from the Amazon Button, AddressBook, or Wallet widgets. */ public ValidateBillingAgreementRequest(String amazonBillingAgreementId) { this.amazonBillingAgreementId = amazonBillingAgreementId; } - /** - * Sets MWSAuthToken. This is applicable for third-party solution providers only - * @param mwsAuthToken Sets MWSAuthToken. Applicable for third-party - * solution providers only. - * - * @return the MWSAuthToken - */ - public ValidateBillingAgreementRequest setMWSAuthToken(String mwsAuthToken) { - this.mwsAuthToken = mwsAuthToken; - return this; - } - /** * * @return AmazonBillingAgreementId @@ -58,14 +48,6 @@ public String getAmazonBillingAgreementId() { return amazonBillingAgreementId; } - /** - * - * @return MWSAuthToken - */ - public String getMwsAuthToken() { - return mwsAuthToken; - } - /** * Returns a string representation of this object; useful for testing and * debugging. @@ -76,6 +58,9 @@ public String getMwsAuthToken() { */ @Override public String toString() { - return "ValidateBillingAgreementRequest{" + "amazonBillingAgreementId=" + amazonBillingAgreementId + ", mwsAuthToken=" + mwsAuthToken + '}'; + return "ValidateBillingAgreementRequest{" + + "amazonBillingAgreementId=" + amazonBillingAgreementId + + ", mwsAuthToken=" + getMwsAuthToken() + '}'; } + } diff --git a/src/com/amazon/pay/response/model/AccountStatus.java b/src/com/amazon/pay/response/model/AccountStatus.java new file mode 100644 index 0000000..7ca7e25 --- /dev/null +++ b/src/com/amazon/pay/response/model/AccountStatus.java @@ -0,0 +1,30 @@ +/** + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.pay.response.model; + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlEnumValue; +import javax.xml.bind.annotation.XmlType; + +@XmlType(name = "AccountStatus") +@XmlEnum +public enum AccountStatus { + + @XmlEnumValue("ACTIVE") + ACTIVE, + @XmlEnumValue("INACTIVE") + INACTIVE + +} diff --git a/src/com/amazon/pay/response/model/GetMerchantAccountStatusResponse.java b/src/com/amazon/pay/response/model/GetMerchantAccountStatusResponse.java new file mode 100644 index 0000000..21cb1c2 --- /dev/null +++ b/src/com/amazon/pay/response/model/GetMerchantAccountStatusResponse.java @@ -0,0 +1,65 @@ +/** + * Copyright 2016-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package com.amazon.pay.response.model; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + +/** + * This represents the parsed response from the Amazon Pay + * GetMerchantAccountStatus API. + * + *