Откуда я вызываю сообщение «Платеж прошел успешно»? - PullRequest
0 голосов
/ 04 сентября 2018

Я встроил Stripe в свой сайт. Код ниже скопирован непосредственно из документации полосы. Хотя между этим кодом и моей реализацией есть незначительные различия, такие различия не имеют отношения к вопросу, так как и мой код, и показанный код работают правильно

Сначала я устанавливаю соответствующие файлы.

composer.json

{
    "require": {
        "stripe/stripe-php": "*"
    }
}

Затем я делаю заказ в JavaScript. (В этом случае взимается плата в размере 9,99 долл. За «Пример начисления», но вы поняли идею. Ниже приведена простая проверка, моя - заказная проверка, но это не должно иметь значения для вопроса.)

<form action="nextpage.php" method="POST">
  <script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="<test key here>"
    data-amount="999"
    data-name="<myName>"
    data-description="Example charge"
    data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
    data-locale="auto"
    data-currency="aud">
  </script>
</form>

Эта проверка очень хороша в обнаружении большинства ошибок, и если она не может их найти, она передает мне токен для зарядки.

Наконец, я добавил страницу для создания заряда

require 'vendor/autoload.php';
\Stripe\Stripe::setApiKey("<test key here>");
$token = $_POST['stripeToken'];
$charge = \Stripe\Charge::create([
    'amount' => 999,
    'currency' => 'aud',
    'description' => 'Example charge',
    'source' => $token,
]);

Пока это хорошо. В среде тестирования это всегда успешно. Или, если я проверяю карту, которая не должна быть успешной, она всегда дает сбой при проверке.

Тем не менее, предположим, что токен успешно создан, но тогда проблема возникает на стороне сервера. Как мне это обнаружить?

Точнее, если бы у меня была такая функция, как alert("Your payment has been successful") или echo "Your payment has been successful", Где было бы правильное место для вызова?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018
try{
  require 'vendor/autoload.php';
  \Stripe\Stripe::setApiKey("<test key here>");
  $token = $_POST['stripeToken'];
  $charge = \Stripe\Charge::create([
    'amount' => 999,
    'currency' => 'aud',
    'description' => 'Example charge',
    'source' => $token,
  ]); 

  if(isset($charge->id) && $charge->id != ''){
  echo "Payment has been made successful, Transaction ID : ".$charge->id;exit;
  }
} catch (\Stripe\Error\Base $e) {
  echo "Something went wrong with payment, Note : ".$e->getMessage();exit;

}
0 голосов
/ 04 сентября 2018

Только что понял это сразу после публикации.

Сначала я заметил, что $charge - это вывод в этом контексте, поэтому я запустил echo var_dump($charge);, который открыл огромное количество информации.

Вместо того, чтобы посмотреть там, я могу найти ссылку на API здесь , прокрутить вниз до «Объект зарядки». В этом случае status (относится к $charge['status']) может подтвердить, был ли он успешным или нет.

Рабочий код if($charge['status'] === "succeeded"){} является правильным местом для размещения сообщения об успехе.

...