Когда клиент платит, в базу данных сохраняется следующая запись:
DB::table('subscriptions')->insert([
'user_id' => $user->id,
'quantity' => 1,
'stripe_id' => $request->paymentIntent,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
]);
Запись успешно сохранена. При прослушивании веб-крюка Stripe payment_intent.succeeded
я хочу получить идентификатор платежного намерения из веб-крючка и найти запись в моей базе данных:
$paymentInstance = DB::table('subscriptions')->where('stripe_id',$paymentIntent->id)->first();
Переменная $paymentIntent
инициализируется непосредственно в веб-крюке:
$event = \Stripe\Webhook::constructEvent(
$payload, $sig_header, $endpoint_secret
);
...
switch ($event->type) {
case 'payment_intent.succeeded':
$paymentIntent = $event->data->object;
// Usage of $paymentIntent->id....
Первый вызов отвечает null
(echo $ paymentInstance). Когда я нажимаю «Переслать» на панели инструментов Stripe, я получаю желаемый результат. Как это возможно? Хранение исходной записи должно быть быстрее, чем веб-крючок, впервые достигающий сервера - или я ошибаюсь?