Gocardless не выполняет программу после разбора webhook

Я внедряю 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;
}
}

Я пытался выполнить какой-то запрос к базе данных, все равно ничего не работает. Может кто-нибудь указать мне, что и где я делаю неправильно?

0

Решение

 $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 вызывается, электронная почта отправляет на ваш адрес с телом ответа, а затем вы отправляете данные в теле письма.
Надеюсь, вы понимаете

1

Другие решения

Получил решение. У меня была проблема при получении значений заголовков. В laravel вы не можете получить значение заголовка, используя $headers = getallheaders(); Вам нужно использовать use Request; а потом Request::header("Webhook-Signature"); который тогда решил мою проблему.

0

По вопросам рекламы [email protected]