Почему handleCardPayment от Stripe не выполняется в моей функции Javascript?

#javascript #php #ajax #stripe-payments

#javascript #php #ajax #stripe-платежи

Вопрос:

Я пытаюсь использовать Stripes handleCardPayment для обработки платежа, следующего за намерением платежа. Я не могу заставить функцию handleCardPayment запускаться внутри другой функции Javascript.

Я попытался отладить свой код шаг за шагом. Функция Javascript запускается и выводит предупреждение в окно.

Переменные Javascript, которые я установил в верхней части функции, также устанавливаются.

Однако функция handleCardPayment(), похоже, не запускается?

Я попытался выполнить попытку / перехват, чтобы увидеть, могу ли я перехватить ошибку, исходящую из запроса, но ничего не регистрируется.

Я немного озадачен тем, в чем проблема с этим? хотя я подозреваю, что это может быть что-то базовое, чего мне не хватает при правильном вызове функции stripe.

 function completePayment() {

 // Assign client secret from PHP session variable

 var clientSecret = "<?php echo $_SESSION['c_secret'] ?>";

 try {

  stripe.handleCardPayment(
   clientSecret, cardElement, {
    source_data: {
      owner: {email: "<?php echo $_SESSION['m_usr_email'] ?>"}
    }
   }
  ).then(function(result) {
     if (result.error) {
        alert("Error in payment");
      } else {
        alert("Success in payment");
      }
    }); 
  }
  catch(error) {
   console.log(error.message);
  } 
}
  

Мое намерение платежа создается на отдельной странице PHP. Это работает правильно, и в stripe создается намерение платежа с соответствующим секретом клиента.

Как приложение функционирует в настоящее время:

  • Пользователь нажимает кнопку «Подписаться».
  • Ajax-запрос выполняется и ОТПРАВЛЯЕТСЯ в отдельный файл PHP
  • PHP-файл создает намерение платежа и сохраняет секрет клиента в переменной сеанса PHP
  • Функция завершения Ajax ()’ затем вызывает ‘completePayment();’
  • Функция Javascript ‘completePayment();’ расположена непосредственно перед закрывающим тегом внизу страницы.
  • Отладка ‘completePayment()’ показывает, что функция выполняется после вызова Ajax ‘Complete function()’.
  • stripe.HandleCardPayment ничего не делает.
  • cardElement — это глобальная переменная Javascript, устанавливаемая при создании элемента card (создается при начальной загрузке страницы).

  • Я отладил обе переменные сеанса PHP и подтвердил, что для них обеих была установлена правильная информация, прежде чем использовать их в функции handleCardPayment.

Есть предложения о том, что я здесь делаю не так?

Комментарии:

1. Хммм, значит, ошибок в консоли браузера нет? Поскольку вы используете PHP для заполнения клиентского секрета и электронной почты: когда вы view source на своей странице, вы можете подтвердить, что эти два поля заполнены электронной почтой и клиентским секретом? PHP должен заполнять их из переменных СЕАНСА во время загрузки страницы, если вы выполняете запрос AJAX после того, как PHP отобразит страницу, они все равно могут быть пустыми.

2. Привет, я повторяю переменные сеанса, и они определенно заполнены правильно перед запуском handlecardpayment. Я тестирую запуск этой части из отдельного вызова функции на тестовой кнопке, после создания намерения платежа, и он запускается, поэтому я закрою этот вопрос, так как теперь я должен реализовать свой код обработки ошибок, чтобы попытаться выяснить, какие ошибки в обработке платежей! По какой-то причине функция не запускается из функции завершения Ajax, но я могу изменить свой код, чтобы выполнить намерение платежа перед нажатием кнопки подписки, поэтому он должен быть работоспособным.

Ответ №1:

У меня была такая же проблема. Похоже, что функция, которую он не выполняет, потому что журналы консоли не отображаются, но после поиска я увидел, что мне не хватает $intent-> client_secret, до этого консоль js ничего мне не показывала, и мне пришлось вызывать только функцию stripe.handleCardPayment без какого-либо дополнительного кода, после чего cosole показывает мне $intent-> client_secret, это было неопределенно.

Я не очень хорошо говорю по-английски, но надеюсь, что это кому-нибудь пригодится