Действительная подпись веб-перехватчика не означает, что вы уже обработали ее.
Вебхук может иметь действительную подпись и при этом быть дубликатом. Это различие было исследовано на бесплатном образце Stripe Digital Seller Kit. Образец включает PHP-файлы для проверки подписи вебхука и вспомогательную функцию для подписанных ссылок на скачивание. Локальные тесты проводились на PHP 8.5.4 без реальных запросов Stripe или платежей.Основной тест вебхука показал, что оба вызова функции verify_webhook вернули событие. Это произошло потому, что тела и подписи совпали, а временные метки находились в пределах допустимого пятиминутного окна. Предоставленный проверщик подписи не сохраняет в памяти ранее обработанные события. Изменение тела или превышение лимита временной метки корректно привело к отклонению, демонстрируя проверки целостности и актуальности подписи.Однако эти проверки не предотвращают обработку дублирующихся событий. Обработка дубликатов требует отдельного механизма для отслеживания уже выполненных заказов. Может возникнуть состояние гонки, если два запроса поступают одновременно, и оба могут не увидеть предыдущей записи до того, как один из них запишет. Чтобы предотвратить это, проверка и запись выполнения должны быть атомарно защищены, возможно, с использованием транзакций базы данных или блокировок файлов.Полный Stripe Digital Seller Kit, как сообщается, предлагает отдельную безопасную обработку заказов от дубликатов, которая не тестировалась в данном анализе. Вспомогательная функция для ссылок на скачивание также была протестирована и показала корректное поведение для действительных токенов, неверных идентификаторов, неправильных секретов и истекших ссылок. Эти тесты не охватывают более широкие функциональные возможности, такие как обработка возвратов или количество скачиваний. Автор подчеркивает необходимость отдельно тестировать "одно и то же действительное событие дважды" от "неверной подписи", чтобы избежать путаницы и обеспечить правильную обработку дубликатов.
verify_webhookвернули событие. Это произошло потому, что тела и подписи совпали, а временные метки находились в пределах допустимого пятиминутного окна. Предоставленный проверщик подписи не сохраняет в памяти ранее обработанные события. Изменение тела или превышение лимита временной метки корректно привело к отклонению, демонстрируя проверки целостности и актуальности подписи.Однако эти проверки не предотвращают обработку дублирующихся событий. Обработка дубликатов требует отдельного механизма для отслеживания уже выполненных заказов. Может возникнуть состояние гонки, если два запроса поступают одновременно, и оба могут не увидеть предыдущей записи до того, как один из них запишет. Чтобы предотвратить это, проверка и запись выполнения должны быть атомарно защищены, возможно, с использованием транзакций базы данных или блокировок файлов.Полный Stripe Digital Seller Kit, как сообщается, предлагает отдельную безопасную обработку заказов от дубликатов, которая не тестировалась в данном анализе. Вспомогательная функция для ссылок на скачивание также была протестирована и показала корректное поведение для действительных токенов, неверных идентификаторов, неправильных секретов и истекших ссылок. Эти тесты не охватывают более широкие функциональные возможности, такие как обработка возвратов или количество скачиваний. Автор подчеркивает необходимость отдельно тестировать "одно и то же действительное событие дважды" от "неверной подписи", чтобы избежать путаницы и обеспечить правильную обработку дубликатов.