Google Pay (через API запроса платежа) - canMakePayment() не разрешается
Я перешел по этой ссылке в качестве руководства по внедрению и официального руководства W3C.
Вот моя логика для отображения кнопки Google Pay на нашем сайте:
- Проверить, если
window.PayentRequest
доступно, и если да, то: - Метод BuildData, 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 (v 72.0.3626.109) (как на настольном, так и на мобильном устройстве) кнопка GooglePay иногда не отображается при переходе на страницу, а отображается только при обновлении пару раз. Для случаев, когда он не обнаруживается, из журналов я видел, что метод canMakePayment не разрешается вообще - он не входит в then
ни catch
, Я не понимаю, где оно может вызывать исключение, и куда оно пузырится, или почему оно молча терпит неудачу.
Любое понимание было бы полезно - если canMakePayment()
возвращает обещание, почему и когда оно не будет выполнено? Где я могу проверить ошибки?
Вот скрипка того, что я делаю - и я мог бы повторить проблему на этой скрипке - https://jsfiddle.net/soham_scratchpad/bzsyrjaf/5/
1 ответ
Что нужно искать в вашей скрипке? Я пробовал это на рабочем столе, и он всегда отображает текст "Показать кнопку оплаты", который, кажется, указывает, что canMakePayment() разрешен в true.
В реализации Chrome canMakePayment() может либо разрешить логическое значение, либо выдать ряд исключений в соответствии со спецификацией. Если у вас есть оба .then
а также .catch
обработчики, один из них должен всегда срабатывать.
Если нет, то это может быть ошибка в Chrome. Было бы полезно, если бы вы могли подать здесь отчет об ошибке с шагами воспроизведения и использовать Blink>Payments в качестве компонента.