IsReadyToPayRequest.existingPaymentMethodRequired не работает должным образом

Мы добавили 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);

Проблема:

  • Task.getResult() не возвращает логическое значение, как ожидалось. В документации упоминается, что указанный выше параметр будет возвращать true только для среды TEST, но, напротив, для вышеуказанных параметров он, похоже, всегда возвращает false в среде TEST и всегда возвращает true в среде PROD (наше приложение уже одобрено), независимо от того, В способах оплаты 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 с отдельным параметром payMethodPresent, но я не вижу способа получить к нему доступ.

Есть ли что-то, что мне здесь не хватает? Любая помощь будет оценена по достоинству, спасибо

ага. PaymentMethodPresent доступен только для веб-интеграций.

Domi 17.04.2024 14:26
0
1
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В итоге я использовал CRYPTOGRAM_3DS только как разрешенный способ оплаты для достижения необходимой функциональности. Это происходит с оговоркой о разрешении платежей через Google Pay только с карт, которые также добавлены в приложение «Кошелек» устройства, но это было то, что было необходимо для этого требования.

Для тех, кто наткнется на это, я тестировал следующим образом:

Google Pay ENVIRONMENT_PRODUCTION

  • подписанный apk prodRelease
  • существующийPaymentMethodRequired true

Включенные способы оплаты:

  • КРИПТОГРАММА_3DS:
    • Карты доступны на Google.com + карты не добавлены в Кошелек Кнопка не отображается
    • Карты доступны на Google.com + карта добавлена ​​в Кошелек Кнопка показывает: доступна карта из Кошелька.
    • карты нигде нет Кнопка не отображается
  • CRYPTOGRAM_3DS + PAN_ONLY:
    • Карты доступны на Google.com + карты не добавлены в Кошелек Кнопка показывает
    • Карты доступны на Google.com + карта добавлена ​​в Кошелек Кнопка показывает
    • карты нигде нет Кнопка показывает — пользователю необходимо добавить новую карту.
  • PAN_ONLY: (это старая/начальная реализация)
    • Карты доступны на Google.com + карты не добавлены в Кошелек Кнопка показывает
    • Карты доступны на Google.com + карта добавлена ​​в Кошелек Кнопка показывает
    • карты нигде нет Кнопка не отображается

Вы сейчас используете CRYPTOGRAM_3DS для разрешенных способов оплаты или PAN_ONLY? Это неясно из вашего ответа, когда вы пишете: «В итоге я использовал CRYPTOGRAM_3DS только как разрешенный способ оплаты», но затем вы также пишете: «PAN_ONLY: (это текущая реализация)»

Domi 17.04.2024 14:27

КРИПТОГРАММА_3DS. PAN_ONLY была старой реализацией, извините.

Cosmin C. 04.05.2024 15:57

Другие вопросы по теме