Мы добавили Google Pay в наше приложение для Android и потребовали от бизнеса показывать кнопку 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 с отдельным параметром payMethodPresent, но я не вижу способа получить к нему доступ.
Есть ли что-то, что мне здесь не хватает? Любая помощь будет оценена по достоинству, спасибо
В итоге я использовал CRYPTOGRAM_3DS только как разрешенный способ оплаты для достижения необходимой функциональности. Это происходит с оговоркой о разрешении платежей через Google Pay только с карт, которые также добавлены в приложение «Кошелек» устройства, но это было то, что было необходимо для этого требования.
Для тех, кто наткнется на это, я тестировал следующим образом:
Google Pay ENVIRONMENT_PRODUCTION
Включенные способы оплаты:
Вы сейчас используете CRYPTOGRAM_3DS для разрешенных способов оплаты или PAN_ONLY? Это неясно из вашего ответа, когда вы пишете: «В итоге я использовал CRYPTOGRAM_3DS только как разрешенный способ оплаты», но затем вы также пишете: «PAN_ONLY: (это текущая реализация)»
КРИПТОГРАММА_3DS. PAN_ONLY была старой реализацией, извините.
ага. PaymentMethodPresent доступен только для веб-интеграций.