Проблема в том, что если я запускаю одно и то же событие несколько раз, я получаю разные результаты.
У меня три терминала открыто:
- Прослушивание с использованием:
listen --forward-to localhost:8888/my-endpoint.php
Запуск с использованием
stripe trigger + event
(например, полосовой триггер payment_intent.succeeded)
Ведение журнала ошибки от localhost
Устранение неполадок
Я могу активировать, выполнив проверку Stripe тоже. Оформление заказа работает, но результаты в терминале аналогичны описанным.
Я также запустил триггер, пока xdebug прослушивает и может видеть шаги кода в ожидаемом порядке (ie присваивает телу простые текстовые ответы и вызывает коды 200/400).
Важные примечания
На снимке экрана ниже показан журнал (слева), прослушивание (вверху справа) и запуск события (внизу справа).
(1-я и 4-я попытки работают. 2-я и 3-я не работают. Они не включают журналы или:
2020-04-24 16:17:16 --> payment_intent.succeeded [evt_1GbMikFOnngxtrI1EfZyfaNo]
2020-04-24 16:17:16 <-- [200] POST http://localhost:8888/scripts/stripe/webhook-endpoint.php [evt_1GbMikFOnngxtrI1EfZyfaNo]
Обратите внимание на вас в правом верхнем углу отображаются временные коды различных событий.
И журнал обновляется только один раз, при первом запуске.
Другая забавная вещь заключается в том, что иногда ответы появляются в Полоска приборной панели, иногда нет.
Есть идеи?
Код Webhooks (ключи подписи и API установлены выше, но спрятано здесь)
$payload = @file_get_contents('php://input'); //get json POST data stripe sends
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
$event = null;
try {
$event = \Stripe\Webhook::constructEvent(
$payload, $sig_header, $endpoint_secret, //get data
);
} catch(\UnexpectedValueException $e) {
// Invalid payload
printf("Invalid payload");
http_response_code(400);
exit();
} catch(\Stripe\Exception\SignatureVerificationException $e) {
// Invalid signature
printf("Invalid signature.");
http_response_code(400);
exit();
}
// Handle the event(s)
switch ($event->type) {
case 'checkout.session.completed':
$session = $event->data->object;
printf("Checkout Session Completed");
http_response_code(200);
break;
case 'payment_intent.succeeded':
$paymentIntent = $event->data->object;
$intent = $event->data->object;
printf("Payment Intent Succeeded: %s", $intent->id);
http_response_code(200);
error_log( json_encode( $intent, JSON_PRETTY_PRINT ) );
break;
case 'payment_intent.payment_failed':
$paymentMethod = $event->data->object;
$intent = $event->data->object;
$error_message = $intent->last_payment_error ? $intent->last_payment_error->message : "";
printf("Failed: %s, %s", $intent->id, $error_message);
http_response_code(200);
break;
case 'payment_intent.processing':
printf("Payment Intent Processing: %s", $intent->id);
http_response_code(200);
break;
case 'payment_intent.canceled':
printf("Payment Intent canceled: %s", $intent->id);
http_response_code(200);
break;
default:
http_response_code(400);
exit();
}
http_response_code(200);
return false;