Laravel возвращает пустой HTTP-ответ - PullRequest
0 голосов
/ 12 декабря 2018

Итак, я настраиваю webhook с Xero API, и он ожидает пустой ответ без файлов cookie, gzip и т. Д. Я не могу понять, как отправить полностью пустой ответ.

Вот пример моего ответа от ngrok:

HTTP/1.1 401 Unauthorized
Server: nginx/1.13.3
Date: Wed, 12 Dec 2018 02:11:07 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive

0

Вот код, который выполняет HTTP-ответ:

http_response_code(401);
exit;

Я также пробовал это:

return response(null, 401);

Но на панели настройки webhook он показывает эту ошибку:

Intent To Receive required
Last attempt at 2018-12-12 02:15:57 UTC
Failed to respond in timely manner

Несмотря на то, что время отклика составляет <0,5 с.Я отправил кучу экранных записей в Xero, но их поддержка, кажется, думает, что это будет работать. </p>

1 Ответ

0 голосов
/ 11 января 2019

Как говорит ошибка. В вашем коде вы не можете ответить вовремя (5сек).передайте это Не удалось своевременно ответить на вопрос .Я также сталкивался с этой проблемой при разработке интеграции Xero с использованием laravel.удалось исправить эту проблему с помощью очередей, если хэш-совпадения отправляют событие Xero в задание, в противном случае возвращают 400. Поскольку событие обрабатывается в очереди, оно своевременно возвращает ответ.

use App\Jobs\XeroWebhook;
public function getUpdatedInvoiceInXero(Request $request)
{
    $paylod = file_get_contents('php://input');
    $events = json_decode($request->getContent())->events;
    $XeroWebhookKey= "your_webhook_key";
    $Hash = base64_encode(hash_hmac('sha256', $paylod, $XeroWebhookKey, true));

    if ($Hash === $_SERVER['HTTP_X_XERO_SIGNATURE']) {
        XeroWebhook::dispatch($events);
    } else {
        return response(null, 401);
    }
}

Как вы можете видеть здесь, я проверяю только совпадение хешей, я включил другие функции в работу под названием "XeroWebhook". очереди Laravel

namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class XeroWebhook implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    protected $events;
    public function __construct($events, $tenantId)
    {
        $this->events = $events;
    }

    public function handle()
    {
      // rest of the code
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...