Как сделать так, чтобы обработчик ошибок Try / catch stripe отправлял пользователя на success.php, если ошибок не было? - PullRequest
0 голосов
/ 18 февраля 2019

Я создаю страницу оформления заказа для своего бизнеса, для этого я использую Stripe API.У меня возникают проблемы с тем, что мой файл charge.php не перенаправляет, когда обработчик ошибок не возвращает никаких ошибок.

Я попытался использовать функцию header (), которая успешно перенаправляет, если я ввожу правильные данные карты, но когда я пытаюсь использовать одну из карт, используемых для отображения сообщения об ошибке, она просто перенаправляет на индекс.HTML, где находится форма ввода.Если я удалю функцию заголовка, charge.php будет успешно отображать ошибки, но, очевидно, не будет перенаправления при успешной зарядке.

  // added stripe dependencies with composer
require_once('vendor/autoload.php');

  \Stripe\Stripe::setApiKey('SECRETKEY');

 // Sanitize POST Array
 $POST = filter_var_array($_POST, FILTER_SANITIZE_STRING);

 $first_name = $POST['first_name'];
 $last_name = $POST['last_name'];
 $email = $POST['email'];
 $token = $POST['stripeToken'];

// Create Customer In Stripe
try {
$customer = \Stripe\Customer::create(array(
  "email" => $email,
  "source" => $token
));

// Charge Customer

$charge = \Stripe\Charge::create(array(
  "amount" => 4999,
  "currency" => "usd",
  "description" => "Online Purchase",
  "customer" => $customer->id
));

//ERROR HANDLER
} catch ( Stripe\Error\Base $e ) {
  // Code to do something with the $e exception object when an error occurs.
  echo $e->getMessage();

  // DEBUG.
  $body = $e->getJsonBody();
  $err  = $body['error'];
  echo '<br> ——— <br>';
  echo '<br>YOU HAVE NOT BEEN CHARGED — <br>';
  echo '— Status is: ' . $e->getHttpStatus() . '<br>';
  echo '— Message is: ' . $err['message'] . '<br>';
  echo '— Type is: ' . $err['type'] . '<br>';
  echo '— Param is: ' . $err['param'] . '<br>';
  echo '— Code is: ' . $err['code'] . '<br>';
  echo '<p>If you have entered the correct details, please try DOMAIN (in Safari or Chrome). If the error persists, please screenshot this message and send it to me alongside your email address.</p>';
  echo '<br> ——— <br>';

// Catch any other non-Stripe exceptions.
} catch ( Exception $e ) {
    $body = $e->getJsonBody();
    $err  = $body['error'];
    echo '<br> ——— <br>';
    echo '<br>Error — <br>';
    echo '— Status is: ' . $e->getHttpStatus() . '<br>';
    echo '— Message is: ' . $err['message'] . '<br>';
    echo '— Type is: ' . $err['type'] . '<br>';
    echo '— Param is: ' . $err['param'] . '<br>';
    echo '— Code is: ' . $err['code'] . '<br>';
    echo '<p>If you have entered the correct details, please try DOMAIN (in Safari or Chrome). If the error persists, please screenshot this message and send it to me alongside your email address.</p>'; 
    echo '<br> ——— <br>';
}

header('Location: success.php?tid='.$charge->id.'&product='.$charge->description);

Я ожидаю, что charge.php перенаправит на success.phpна успешной зарядке и отображать ошибки на неисправной зарядке.

1 Ответ

0 голосов
/ 18 февраля 2019

Выполняет перенаправление, потому что идет после блоков catch.Эти блоки выполняются, и поскольку там нет оператора return, он будет продолжать и выполнять следующую строку после блока (ов) - строку заголовка вашего перенаправления.

Вы можете либо:

  1. Переместите строку header(....) в свой блок try сразу после создания заряда
  2. Сделайте определенный тип return или exit в ваших catch блоках.

Оба являются жизнеспособными решениями.

...