Я внедряю API без gocard на моем сайте. Я застрял в webhook. Когда я отправляю webhook из тестовой среды песочницы на мой сайт, он показывает 200 ответов, но после этого никакой код не выполняется. а также я не вижу ничего в теле ответа, оно показывает ноль.
Для этого я использую Laravel 5.7. Вот мой код
route.php
Route :: post (‘/ webhook’, ‘HomeController @ webhook’);
HomeController.php
public function webhook()
{
$webhook_endpoint_secret = env("GOCARDLESS_WEBHOOK_ENDPOINT_SECRET");
$request_body = file_get_contents('php://input');
$headers = getallheaders();
$signature_header = $headers["Webhook-Signature"];
try {
$events = Webhook::parse($request_body, $signature_header, $webhook_endpoint_secret);
foreach ($events as $event) {
print("Processing event " . $event->id . "\n");
switch ($event->resource_type) {
case "mandates":
$this->process_mandate_event($event);
break;
default:
print("Don't know how to process an event with resource_type " . $event->resource_type . "\n");
break;
}
}
header("HTTP/1.1 204 OK");
} catch(InvalidSignatureException $e) {
header("HTTP/1.1 498 Invalid Token");
}
}
public function process_mandate_event($event)
{
switch ($event->action) {
case "cancelled":
print("Mandate " . $event->links["mandate"] . " has been cancelled!\n");
break;
default:
print("Don't know how to process a mandate " . $event->action . " event\n");
break;
}
}
Я пытался выполнить какой-то запрос к базе данных, все равно ничего не работает. Может кто-нибудь указать мне, что и где я делаю неправильно?
$responseBody = file_get_contents('php://input');
if ($responseBody <> "") {
$response_new = json_decode($responseBody, true);
foreach ($response_new["events"] as $event) {
print_r($event); // you will see all the data which you want
//if($event['resource_type'] == 'subscriptions')
//payments,mandates or etc...
//
}
}
используйте электронную почту, отправляя код для отладки, когда webhook вызывается, электронная почта отправляет на ваш адрес с телом ответа, а затем вы отправляете данные в теле письма.
Надеюсь, вы понимаете
Получил решение. У меня была проблема при получении значений заголовков. В laravel вы не можете получить значение заголовка, используя $headers = getallheaders();
Вам нужно использовать use Request;
а потом Request::header("Webhook-Signature");
который тогда решил мою проблему.