Commit 2f9b4987 authored by Liquan (Max) Gu's avatar Liquan (Max) Gu Committed by Commit Bot

[PRImpl] Replace 4 requested information with PaymentOptions

Change:
* Replace the four requested information in PRParams with a
PaymentOptions.
* Create a utility class PaymentOptionsUtils to simplify that code where
4 individual requested information are used.
* PaymentAppFactoryParams extends PRParams. So PRImpl does not need to
implement both params.

Bug: 1102522

Change-Id: I59656137f0ec80f9eb29edf12b29d1c5cfc5c52f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2310896Reviewed-by: default avatarDanyao Wang <danyao@chromium.org>
Commit-Queue: Liquan (Max) Gu <maxlg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#790607}
parent 240816dd
...@@ -23,6 +23,7 @@ import org.chromium.components.payments.PaymentFeatureList; ...@@ -23,6 +23,7 @@ import org.chromium.components.payments.PaymentFeatureList;
import org.chromium.components.payments.PaymentManifestDownloader; import org.chromium.components.payments.PaymentManifestDownloader;
import org.chromium.components.payments.PaymentManifestParser; import org.chromium.components.payments.PaymentManifestParser;
import org.chromium.components.payments.PaymentManifestWebDataService; import org.chromium.components.payments.PaymentManifestWebDataService;
import org.chromium.components.payments.PaymentOptionsUtils;
import org.chromium.components.payments.SupportedDelegations; import org.chromium.components.payments.SupportedDelegations;
import org.chromium.components.payments.intent.WebPaymentIntentHelper; import org.chromium.components.payments.intent.WebPaymentIntentHelper;
import org.chromium.payments.mojom.PaymentDetailsModifier; import org.chromium.payments.mojom.PaymentDetailsModifier;
...@@ -300,7 +301,9 @@ public class AndroidPaymentAppFinder implements ManifestVerifyCallback { ...@@ -300,7 +301,9 @@ public class AndroidPaymentAppFinder implements ManifestVerifyCallback {
// and, consequently, the {@link PaymentRequest} object. // and, consequently, the {@link PaymentRequest} object.
ChromeActivity activity = ChromeActivity activity =
ChromeActivity.fromWebContents(mFactoryDelegate.getParams().getWebContents()); ChromeActivity.fromWebContents(mFactoryDelegate.getParams().getWebContents());
if (!mFactoryDelegate.getParams().requestShippingOrPayerContact() && activity != null) { if (!PaymentOptionsUtils.requestAnyInformation(
mFactoryDelegate.getParams().getPaymentOptions())
&& activity != null) {
findAppStoreBillingApp(activity, allInstalledPaymentApps); findAppStoreBillingApp(activity, allInstalledPaymentApps);
} }
......
...@@ -19,6 +19,7 @@ import org.chromium.components.payments.PaymentFeatureList; ...@@ -19,6 +19,7 @@ import org.chromium.components.payments.PaymentFeatureList;
import org.chromium.content_public.browser.RenderFrameHost; import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.payments.mojom.PaymentMethodData; import org.chromium.payments.mojom.PaymentMethodData;
import org.chromium.payments.mojom.PaymentOptions;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -140,6 +141,11 @@ public class AutofillPaymentAppFactory implements PaymentAppFactoryInterface { ...@@ -140,6 +141,11 @@ public class AutofillPaymentAppFactory implements PaymentAppFactoryInterface {
return null; return null;
} }
@Override
public PaymentOptions getPaymentOptions() {
return null;
}
@Override @Override
public Map<String, PaymentMethodData> getMethodData() { public Map<String, PaymentMethodData> getMethodData() {
return methodData; return methodData;
......
...@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.payments; ...@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.payments;
import org.chromium.components.autofill.Completable; import org.chromium.components.autofill.Completable;
import org.chromium.components.payments.PaymentApp; import org.chromium.components.payments.PaymentApp;
import org.chromium.components.payments.PaymentRequestParams; import org.chromium.components.payments.PaymentRequestParams;
import org.chromium.payments.mojom.PaymentOptions;
import java.util.Comparator; import java.util.Comparator;
...@@ -77,30 +78,34 @@ import java.util.Comparator; ...@@ -77,30 +78,34 @@ import java.util.Comparator;
int completeness = compareCompletablesByCompleteness(b, a); int completeness = compareCompletablesByCompleteness(b, a);
if (completeness != 0) return completeness; if (completeness != 0) return completeness;
// Payment apps which handle shipping address before others. PaymentOptions options = mParams.getPaymentOptions();
if (mParams.requestShipping()) { if (options != null) {
int canHandleShipping = // Payment apps which handle shipping address before others.
(b.handlesShippingAddress() ? 1 : 0) - (a.handlesShippingAddress() ? 1 : 0); if (options.requestShipping) {
if (canHandleShipping != 0) return canHandleShipping; int canHandleShipping =
} (b.handlesShippingAddress() ? 1 : 0) - (a.handlesShippingAddress() ? 1 : 0);
if (canHandleShipping != 0) return canHandleShipping;
}
// Payment apps which handle more contact information fields come first. // Payment apps which handle more contact information fields come first.
int aSupportedContactDelegationsNum = 0; int aSupportedContactDelegationsNum = 0;
int bSupportedContactDelegationsNum = 0; int bSupportedContactDelegationsNum = 0;
if (mParams.requestPayerName()) { if (options.requestPayerName) {
if (a.handlesPayerName()) aSupportedContactDelegationsNum++; if (a.handlesPayerName()) aSupportedContactDelegationsNum++;
if (b.handlesPayerName()) bSupportedContactDelegationsNum++; if (b.handlesPayerName()) bSupportedContactDelegationsNum++;
} }
if (mParams.requestPayerEmail()) { if (options.requestPayerEmail) {
if (a.handlesPayerEmail()) aSupportedContactDelegationsNum++; if (a.handlesPayerEmail()) aSupportedContactDelegationsNum++;
if (b.handlesPayerEmail()) bSupportedContactDelegationsNum++; if (b.handlesPayerEmail()) bSupportedContactDelegationsNum++;
} }
if (mParams.requestPayerPhone()) { if (options.requestPayerPhone) {
if (a.handlesPayerPhone()) aSupportedContactDelegationsNum++; if (a.handlesPayerPhone()) aSupportedContactDelegationsNum++;
if (b.handlesPayerPhone()) bSupportedContactDelegationsNum++; if (b.handlesPayerPhone()) bSupportedContactDelegationsNum++;
} }
if (bSupportedContactDelegationsNum != aSupportedContactDelegationsNum) { if (bSupportedContactDelegationsNum != aSupportedContactDelegationsNum) {
return bSupportedContactDelegationsNum - aSupportedContactDelegationsNum > 0 ? 1 : -1; return bSupportedContactDelegationsNum - aSupportedContactDelegationsNum > 0 ? 1
: -1;
}
} }
// Preselectable apps before non-preselectable apps. // Preselectable apps before non-preselectable apps.
......
...@@ -75,7 +75,7 @@ import org.chromium.components.payments.PaymentDetailsConverter; ...@@ -75,7 +75,7 @@ import org.chromium.components.payments.PaymentDetailsConverter;
import org.chromium.components.payments.PaymentDetailsUpdateServiceHelper; import org.chromium.components.payments.PaymentDetailsUpdateServiceHelper;
import org.chromium.components.payments.PaymentFeatureList; import org.chromium.components.payments.PaymentFeatureList;
import org.chromium.components.payments.PaymentHandlerHost; import org.chromium.components.payments.PaymentHandlerHost;
import org.chromium.components.payments.PaymentRequestParams; import org.chromium.components.payments.PaymentOptionsUtils;
import org.chromium.components.payments.PaymentRequestSpec; import org.chromium.components.payments.PaymentRequestSpec;
import org.chromium.components.payments.PaymentRequestUpdateEventListener; import org.chromium.components.payments.PaymentRequestUpdateEventListener;
import org.chromium.components.payments.PaymentValidator; import org.chromium.components.payments.PaymentValidator;
...@@ -134,7 +134,7 @@ public class PaymentRequestImpl ...@@ -134,7 +134,7 @@ public class PaymentRequestImpl
PaymentApp.InstrumentDetailsCallback, PaymentApp.InstrumentDetailsCallback,
PaymentResponseHelper.PaymentResponseRequesterDelegate, FocusChangedObserver, PaymentResponseHelper.PaymentResponseRequesterDelegate, FocusChangedObserver,
NormalizedAddressRequestDelegate, PaymentDetailsConverter.MethodChecker, NormalizedAddressRequestDelegate, PaymentDetailsConverter.MethodChecker,
PaymentHandlerUiObserver, PaymentRequestParams, PaymentUIsManager.Delegate { PaymentHandlerUiObserver, PaymentUIsManager.Delegate {
/** /**
* A delegate to ask questions about the system, that allows tests to inject behaviour without * A delegate to ask questions about the system, that allows tests to inject behaviour without
* having to modify the entire system. This partially mirrors a similar C++ * having to modify the entire system. This partially mirrors a similar C++
...@@ -522,8 +522,8 @@ public class PaymentRequestImpl ...@@ -522,8 +522,8 @@ public class PaymentRequestImpl
* Called by the merchant website to initialize the payment request data. * Called by the merchant website to initialize the payment request data.
*/ */
@Override @Override
public void init(PaymentMethodData[] methodData, PaymentDetails details, PaymentOptions options, public void init(PaymentMethodData[] methodData, PaymentDetails details,
boolean googlePayBridgeEligible) { @Nullable PaymentOptions options, boolean googlePayBridgeEligible) {
assert getClient() != null; assert getClient() != null;
mMethodData = new HashMap<>(); mMethodData = new HashMap<>();
mComponentPaymentRequestImpl.registerPaymentRequestLifecycleObserver(mPaymentUIsManager); mComponentPaymentRequestImpl.registerPaymentRequestLifecycleObserver(mPaymentUIsManager);
...@@ -592,9 +592,8 @@ public class PaymentRequestImpl ...@@ -592,9 +592,8 @@ public class PaymentRequestImpl
&& PaymentFeatureList.isEnabledOrExperimentalFeaturesEnabled( && PaymentFeatureList.isEnabledOrExperimentalFeaturesEnabled(
PaymentFeatureList.STRICT_HAS_ENROLLED_AUTOFILL_INSTRUMENT)) { PaymentFeatureList.STRICT_HAS_ENROLLED_AUTOFILL_INSTRUMENT)) {
PaymentMethodData paymentMethodData = new PaymentMethodData(); PaymentMethodData paymentMethodData = new PaymentMethodData();
paymentMethodData.stringifiedData = String.format( paymentMethodData.stringifiedData =
"{payerEmail:%s,payerName:%s,payerPhone:%s,shipping:%s}", mRequestPayerEmail, PaymentOptionsUtils.stringifyRequestedInformation(mPaymentOptions);
mRequestPayerName, mRequestPayerPhone, mRequestShipping);
mQueryForQuota.put("basic-card-payment-options", paymentMethodData); mQueryForQuota.put("basic-card-payment-options", paymentMethodData);
} }
...@@ -616,7 +615,7 @@ public class PaymentRequestImpl ...@@ -616,7 +615,7 @@ public class PaymentRequestImpl
.onPaymentRequestParamsInitiated( .onPaymentRequestParamsInitiated(
/*params=*/this); /*params=*/this);
if (mRequestShipping || mRequestPayerName || mRequestPayerPhone || mRequestPayerEmail) { if (PaymentOptionsUtils.requestAnyInformation(mPaymentOptions)) {
mAutofillProfiles = Collections.unmodifiableList( mAutofillProfiles = Collections.unmodifiableList(
PersonalDataManager.getInstance().getProfilesToSuggest( PersonalDataManager.getInstance().getProfilesToSuggest(
false /* includeNameInLabel */)); false /* includeNameInLabel */));
...@@ -1242,36 +1241,6 @@ public class PaymentRequestImpl ...@@ -1242,36 +1241,6 @@ public class PaymentRequestImpl
return true; return true;
} }
// Implement PaymentRequestParams:
@Override
public Map<String, PaymentMethodData> getMethodDataMap() {
return getMethodData();
}
// Implement PaymentRequestParams:
@Override
public boolean requestShipping() {
return mRequestShipping;
}
// Implement PaymentRequestParams:
@Override
public boolean requestPayerName() {
return mRequestPayerName;
}
// Implement PaymentRequestParams:
@Override
public boolean requestPayerEmail() {
return mRequestPayerEmail;
}
// Implement PaymentRequestParams:
@Override
public boolean requestPayerPhone() {
return mRequestPayerPhone;
}
/** /**
* Called to open a new PaymentHandler UI on the showing PaymentRequest. * Called to open a new PaymentHandler UI on the showing PaymentRequest.
* @param url The url of the payment app to be displayed in the UI. * @param url The url of the payment app to be displayed in the UI.
...@@ -1351,7 +1320,7 @@ public class PaymentRequestImpl ...@@ -1351,7 +1320,7 @@ public class PaymentRequestImpl
return; return;
} }
if (!mRequestShipping && !mRequestPayerName && !mRequestPayerEmail && !mRequestPayerPhone if (!PaymentOptionsUtils.requestAnyInformation(mPaymentOptions)
&& (mInvokedPaymentApp == null && (mInvokedPaymentApp == null
|| !mInvokedPaymentApp.isWaitingForPaymentDetailsUpdate())) { || !mInvokedPaymentApp.isWaitingForPaymentDetailsUpdate())) {
mJourneyLogger.setAborted(AbortReason.INVALID_DATA_FROM_RENDERER); mJourneyLogger.setAborted(AbortReason.INVALID_DATA_FROM_RENDERER);
...@@ -2539,11 +2508,6 @@ public class PaymentRequestImpl ...@@ -2539,11 +2508,6 @@ public class PaymentRequestImpl
} }
// PaymentAppFactoryParams implementation. // PaymentAppFactoryParams implementation.
@Override
public boolean requestShippingOrPayerContact() {
return mRequestShipping || mRequestPayerName || mRequestPayerPhone || mRequestPayerEmail;
}
@Override @Override
public PaymentOptions getPaymentOptions() { public PaymentOptions getPaymentOptions() {
return mPaymentOptions; return mPaymentOptions;
......
...@@ -274,7 +274,7 @@ public class PaymentUIsManager ...@@ -274,7 +274,7 @@ public class PaymentUIsManager
public void onPaymentRequestParamsInitiated(PaymentRequestParams params) { public void onPaymentRequestParamsInitiated(PaymentRequestParams params) {
// Checks whether the merchant supports autofill cards before show is called. // Checks whether the merchant supports autofill cards before show is called.
mMerchantSupportsAutofillCards = mMerchantSupportsAutofillCards =
AutofillPaymentAppFactory.merchantSupportsBasicCard(params.getMethodDataMap()); AutofillPaymentAppFactory.merchantSupportsBasicCard(params.getMethodData());
// If in strict mode, don't give user an option to add an autofill card during the checkout // If in strict mode, don't give user an option to add an autofill card during the checkout
// to avoid the "unhappy" basic-card flow. // to avoid the "unhappy" basic-card flow.
......
...@@ -34,6 +34,7 @@ import org.chromium.content_public.browser.test.util.CriteriaHelper; ...@@ -34,6 +34,7 @@ import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.net.test.EmbeddedTestServer; import org.chromium.net.test.EmbeddedTestServer;
import org.chromium.payments.mojom.PaymentDetailsModifier; import org.chromium.payments.mojom.PaymentDetailsModifier;
import org.chromium.payments.mojom.PaymentMethodData; import org.chromium.payments.mojom.PaymentMethodData;
import org.chromium.payments.mojom.PaymentOptions;
import org.chromium.url.GURL; import org.chromium.url.GURL;
import org.chromium.url.Origin; import org.chromium.url.Origin;
...@@ -107,7 +108,7 @@ public class AndroidPaymentAppFinderTest ...@@ -107,7 +108,7 @@ public class AndroidPaymentAppFinderTest
private List<PaymentApp> mPaymentApps; private List<PaymentApp> mPaymentApps;
private boolean mAllPaymentAppsCreated; private boolean mAllPaymentAppsCreated;
private Map<String, PaymentMethodData> mMethodData; private Map<String, PaymentMethodData> mMethodData;
private boolean mRequestShippingOrPayerContact; private PaymentOptions mPaymentOptions;
// PaymentAppFactoryDelegate implementation. // PaymentAppFactoryDelegate implementation.
@Override @Override
...@@ -175,8 +176,12 @@ public class AndroidPaymentAppFinderTest ...@@ -175,8 +176,12 @@ public class AndroidPaymentAppFinderTest
// PaymentAppFactoryParams implementation. // PaymentAppFactoryParams implementation.
@Override @Override
public boolean requestShippingOrPayerContact() { public PaymentOptions getPaymentOptions() {
return mRequestShippingOrPayerContact; return mPaymentOptions;
}
public void setRequestShipping(boolean requestShipping) {
mPaymentOptions.requestShipping = requestShipping;
} }
@Before @Before
...@@ -187,6 +192,7 @@ public class AndroidPaymentAppFinderTest ...@@ -187,6 +192,7 @@ public class AndroidPaymentAppFinderTest
mDownloader.setTestServerUrl(new GURL(mServer.getURL("/components/test/data/payments/"))); mDownloader.setTestServerUrl(new GURL(mServer.getURL("/components/test/data/payments/")));
mPaymentApps = new ArrayList<>(); mPaymentApps = new ArrayList<>();
mAllPaymentAppsCreated = false; mAllPaymentAppsCreated = false;
mPaymentOptions = new PaymentOptions();
} }
@After @After
...@@ -1300,7 +1306,7 @@ public class AndroidPaymentAppFinderTest ...@@ -1300,7 +1306,7 @@ public class AndroidPaymentAppFinderTest
Set<String> methods = new HashSet<>(); Set<String> methods = new HashSet<>();
methods.add("https://play.google.com/billing"); methods.add("https://play.google.com/billing");
methods.add("https://bobpay.com/webpay"); methods.add("https://bobpay.com/webpay");
mRequestShippingOrPayerContact = true; setRequestShipping(true);
mPackageManager.installPaymentApp("MerchantTwaApp", "com.merchant.twa", mPackageManager.installPaymentApp("MerchantTwaApp", "com.merchant.twa",
"https://play.google.com/billing", "https://play.google.com/billing",
/*signature=*/"01020304050607080900"); /*signature=*/"01020304050607080900");
......
...@@ -90,6 +90,7 @@ android_library("java") { ...@@ -90,6 +90,7 @@ android_library("java") {
"java/src/org/chromium/components/payments/PaymentManifestDownloader.java", "java/src/org/chromium/components/payments/PaymentManifestDownloader.java",
"java/src/org/chromium/components/payments/PaymentManifestParser.java", "java/src/org/chromium/components/payments/PaymentManifestParser.java",
"java/src/org/chromium/components/payments/PaymentManifestWebDataService.java", "java/src/org/chromium/components/payments/PaymentManifestWebDataService.java",
"java/src/org/chromium/components/payments/PaymentOptionsUtils.java",
"java/src/org/chromium/components/payments/PaymentRequestLifecycleObserver.java", "java/src/org/chromium/components/payments/PaymentRequestLifecycleObserver.java",
"java/src/org/chromium/components/payments/PaymentRequestParams.java", "java/src/org/chromium/components/payments/PaymentRequestParams.java",
"java/src/org/chromium/components/payments/PaymentRequestSpec.java", "java/src/org/chromium/components/payments/PaymentRequestSpec.java",
......
...@@ -9,26 +9,18 @@ import androidx.annotation.Nullable; ...@@ -9,26 +9,18 @@ import androidx.annotation.Nullable;
import org.chromium.content_public.browser.RenderFrameHost; import org.chromium.content_public.browser.RenderFrameHost;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.payments.mojom.PaymentDetailsModifier; import org.chromium.payments.mojom.PaymentDetailsModifier;
import org.chromium.payments.mojom.PaymentMethodData;
import org.chromium.payments.mojom.PaymentOptions;
import org.chromium.url.Origin; import org.chromium.url.Origin;
import java.util.Map; import java.util.Map;
/** Interface for providing information to a payment app factory. */ /** Interface for providing information to a payment app factory. */
public interface PaymentAppFactoryParams { public interface PaymentAppFactoryParams extends PaymentRequestParams {
/** @return The web contents where the payment is being requested. */ /** @return The web contents where the payment is being requested. */
WebContents getWebContents(); WebContents getWebContents();
/** @return The RenderFrameHost for the frame that initiates the payment request. */ /** @return The RenderFrameHost for the frame that initiates the payment request. */
RenderFrameHost getRenderFrameHost(); RenderFrameHost getRenderFrameHost();
/**
* @return The unmodifiable mapping of payment method identifier to the method-specific data in
* the payment request.
*/
Map<String, PaymentMethodData> getMethodData();
/** @return The PaymentRequest object identifier. */ /** @return The PaymentRequest object identifier. */
default String getId() { default String getId() {
return null; return null;
...@@ -91,21 +83,6 @@ public interface PaymentAppFactoryParams { ...@@ -91,21 +83,6 @@ public interface PaymentAppFactoryParams {
return null; return null;
} }
/**
* @return The PaymentOptions of the payment request.
*/
default PaymentOptions getPaymentOptions() {
return null;
}
/**
* @return Whether the PaymentRequest is requesting delegation of either shipping or payer
* contact.
*/
default boolean requestShippingOrPayerContact() {
return false;
}
/** @return The Payment Request information received from the merchant. */ /** @return The Payment Request information received from the merchant. */
default PaymentRequestSpec getSpec() { default PaymentRequestSpec getSpec() {
return null; return null;
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.components.payments;
import androidx.annotation.Nullable;
import org.chromium.payments.mojom.PaymentOptions;
/**
* A collection of utility methods for PaymentOptions.
*/
public class PaymentOptionsUtils {
/**
* @param options Any PaymentOption, can be null.
* @return Whether a PaymentOptions has requested any information (shipping, payer's email,
* payer's phone, payer's name).
*/
public static boolean requestAnyInformation(@Nullable PaymentOptions options) {
if (options == null) return false;
return options.requestShipping || options.requestPayerEmail || options.requestPayerPhone
|| options.requestPayerName;
}
/**
* @param options Any PaymentOptions, can be null.
* @return Return a JSON string indicating whether each information is requested in the
* PaymentOptions.
*/
public static String stringifyRequestedInformation(@Nullable PaymentOptions options) {
boolean requestPayerEmail = false;
boolean requestPayerName = false;
boolean requestPayerPhone = false;
boolean requestShipping = false;
if (options != null) {
requestPayerEmail = options.requestPayerEmail;
requestPayerName = options.requestPayerName;
requestPayerPhone = options.requestPayerPhone;
requestShipping = options.requestShipping;
}
return String.format("{payerEmail:%s,payerName:%s,payerPhone:%s,shipping:%s}",
requestPayerEmail, requestPayerName, requestPayerPhone, requestShipping);
}
}
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package org.chromium.components.payments; package org.chromium.components.payments;
import org.chromium.payments.mojom.PaymentMethodData; import org.chromium.payments.mojom.PaymentMethodData;
import org.chromium.payments.mojom.PaymentOptions;
import java.util.Map; import java.util.Map;
...@@ -12,21 +13,12 @@ import java.util.Map; ...@@ -12,21 +13,12 @@ import java.util.Map;
* The parameters of PaymentRequest specified by the merchant. * The parameters of PaymentRequest specified by the merchant.
*/ */
public interface PaymentRequestParams { public interface PaymentRequestParams {
/** @return The requestShipping set by the merchant. */ /** @return The PaymentOptions set by the merchant. */
boolean requestShipping(); PaymentOptions getPaymentOptions();
/** @return The requestPayerName set by the merchant. */
boolean requestPayerName();
/** @return The requestPayerEmail set by the merchant. */
boolean requestPayerEmail();
/** @return The requestPayerPhone set by the merchant. */
boolean requestPayerPhone();
/** /**
* @return The unmodifiable mapping of payment method identifier to the method-specific data in * @return The unmodifiable mapping of payment method identifier to the method-specific data in
* the payment request. * the payment request.
*/ */
Map<String, PaymentMethodData> getMethodDataMap(); Map<String, PaymentMethodData> getMethodData();
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment