Я перешел по этой ссылке в качестве руководства по реализации и официальное руководство W3C.
Вот моя логика для отображения кнопки Google Pay на нашем сайте:
- Проверьте, доступен ли
window.PayentRequest
, и если да, то: - Сборка methodData, paymentDetails и paymentOptions. Создайте с ними новый объект PaymentRequest.
- Позвоните
paymentRequest.canMakePayment().then((result)=>{ //if result is true, display the GPay the button }).catch(()=>{}}
- Когда отображается кнопка, обработчик onClick создает новый объект PaymentRequest с methodData, paymentDetails и paymentOptions и вызывает
.show()
Наше приложение находится в React, и я делаю шаги 1-3 в componentDidMount. В большинстве случаев это работает отлично - страница завершает загрузку, проверяет, доступен ли PaymentRequest и поддерживается ли PaymentMethod, а затем устанавливает состояние для отображения кнопки Google Pay, и щелчок запускает собственный платежный лист браузера.
Вот проблема, которую я пытался решить:
В Google Chrome (версия 72.0.3626.109) (как на компьютере, так и на мобильном устройстве) кнопка GooglePay иногда не отображается, когда я перехожу на страницу, и появляется только после того, как я обновляюсь несколько раз. В тех случаях, когда он не отображается, из журналов я видел, что метод canMakePayment вообще не разрешается - он не входит ни в then
, ни в catch
. Я не понимаю, где может быть выбрано исключение, и где это исключение всплывает, или почему оно не работает тихо.
Любая информация будет полезна - если canMakePayment()
вернет обещание, почему и когда оно не разрешится? Где я могу проверить наличие ошибок?
Вот сценарий того, что я делаю - и я мог бы воспроизвести проблему и на этой скрипке: https://jsfiddle.net/soham_scratchpad/bzsyrjaf/5/