Google Pay (через API запроса платежа) - canMakePayment () не разрешается - PullRequest
0 голосов
/ 21 февраля 2019

Я перешел по этой ссылке в качестве руководства по внедрению и официальному W3C руководству .

Вот моя логика для отображения кнопки Google Payна нашем сайте:

  1. Проверьте, доступно ли window.PayentRequest, и если да, то:
  2. Метод BuildData, paymentDetails и paymentOptions.Создайте новый объект PaymentRequest с этими значениями.
  3. Вызов paymentRequest.canMakePayment().then((result)=>{ //if result is true, display the GPay the button }).catch(()=>{}}
  4. Когда кнопка появляется, обработчик 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 Ответ

0 голосов
/ 01 марта 2019

Что нужно искать в вашей скрипке?Я пробовал его на рабочем столе, и он всегда отображает текст «Показать кнопку оплаты», который, по-видимому, указывает на то, что canMakePayment () разрешен в true.

В реализации Chrome canMakePayment () может разрешить либо логическое значение,или выбросить ряд исключений, в соответствии с spec .Если у вас есть обработчики .then и .catch, один из них должен всегда срабатывать.

Если нет, это может быть ошибка в Chrome.Было бы полезно, если бы вы могли подать отчет об ошибке здесь с шагами воспроизведения и использовать Blink> Payments в качестве компонента.

...