IsReadyToPayRequest.existingPaymentMethodRequired 未按预期工作

问题描述 投票:0回答:1

我们在 Android 应用程序中添加了 Google Pay,并且企业要求仅当用户在其 Google Pay 帐户中添加了受支持的卡时才显示 Google Pay 按钮(在 Google.com 上,不一定在设备的电子钱包应用程序中) .

对于支持的付款方式,我们只有 PAN_ONLY、Google.com 上存档的卡(此处未添加带有 CRYTOGRAM_3DS 的设备令牌) 对于支持的支付网络,我们有 AMEX、MASTERCARD、VISA。

我尝试利用的参数是将“existingPaymentMethodRequired”添加到 isReadyToPay JSONObject 中,并具有“true”值。

JSONObject isReadyToPayRequest = getBaseRequest();
isReadyToPayRequest.put("allowedPaymentMethods", new JSONArray().put(getBaseCardPaymentMethod()));
isReadyToPayRequest.put("existingPaymentMethodRequired", true);
return Optional.of(isReadyToPayRequest);

问题:

  • task.getResult() 未按预期返回布尔值。文档提到,上述参数只会在 TEST 环境中返回 true,但相反,对于上述选项,它似乎在 TEST 环境中总是返回 false,而在 PROD 环境中总是返回 true(我们的应用程序已获得批准),无论是否用户的 Google.com 付款方式中是否有银行卡。

我还使用严格的 CRYPTOGRAM_3DS 和直接添加到设备钱包中的卡进行了测试,这似乎工作正常,但当您同时拥有 PAN_ONLY 和 CRYPTOGRAM_3D 时,再次停止工作,无论如何,我只对 PAN_ONLY 感兴趣,因为这是要求。

  • 我实现这个的方式是通过这个(根据示例应用程序调整):
IsReadyToPayRequest request = IsReadyToPayRequest.fromJson(isReadyToPayJson.get().toString());
Task<Boolean> task = paymentsClient.isReadyToPay(request);
task.addOnCompleteListener(activity,
    new OnCompleteListener<Boolean>() {
        @Override
        public void onComplete(@NonNull Task<Boolean> task) {
            if (task.isSuccessful()) {
                if (task.getResult()) {
                    Logger.debug(getClass(), "GPay Debug isReadyToPay success");
                    initStatus = InitStatus.SUCCESS;
                } else {
                    Logger.debug(getClass(), "GPay Debug isReadyToPay failed - task result false");
                    initStatus = InitStatus.FAILED;
                }

                onShowGooglePayComplete(task.getResult());

            } else {
                initStatus = InitStatus.FAILED;
                onShowGooglePayComplete(false);
                Logger.debug(getClass(), "GPay Debug isReadyToPay failed" + (task.getException() != null ? task.getException().getMessage() : "null"));

            }
         }
      });

我开始认为这仅适用于保存在用户设备上的付款方式,而不是 Google.com 上的付款方式,并且会在 Google Pay 底部表格打开时显示。

文档还提到 IsReadyToPayResponse 带有单独的参数 paymentMethodPresent 但我没有看到任何方法来访问它。

我在这里缺少什么吗?任何帮助将不胜感激,谢谢

android google-pay
1个回答
0
投票

我最终仅使用 CRYPTOGRAM_3DS 作为允许的付款方式来实现所需的功能。这样做的前提是只允许通过 Google Pay 使用设备钱包应用程序中添加的卡进行付款,但这正是此要求所需要的。

对于任何偶然发现这一点的人,我已经进行了这样的测试:

Google Pay 环境_生产

  • 签名的prodRelease apk
  • 现有付款方式必需 true

已启用付款方式:

  • CRYPTOGRAM_3DS:
    • Google.com 中提供卡 + 钱包中未添加任何卡 按钮不显示
    • Google.com 中提供的卡 + 添加到电子钱包的卡 按钮显示 - 可用卡是钱包中的卡
    • 任何地方都没有可用卡 按钮不显示
  • CRYPTOGRAM_3DS + PAN_ONLY:
    • Google.com 中提供卡 + 钱包中未添加任何卡 按钮显示
    • Google.com 中提供的卡 + 添加到电子钱包的卡 按钮显示
    • 任何地方都没有可用卡 按钮显示 - 用户需要添加新卡
  • PAN_ONLY:(这是旧的/初始的实现)
    • Google.com 中提供卡 + 钱包中未添加任何卡 按钮显示
    • Google.com 中提供的卡 + 添加到电子钱包的卡 按钮显示
    • 任何地方都没有可用卡 按钮不显示
© www.soinside.com 2019 - 2024. All rights reserved.