我们在 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);
问题:
我还使用严格的 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 但我没有看到任何方法来访问它。
我在这里缺少什么吗?任何帮助将不胜感激,谢谢
我最终仅使用 CRYPTOGRAM_3DS 作为允许的付款方式来实现所需的功能。这样做的前提是只允许通过 Google Pay 使用设备钱包应用程序中添加的卡进行付款,但这正是此要求所需要的。
对于任何偶然发现这一点的人,我已经进行了这样的测试:
Google Pay 环境_生产
已启用付款方式: