웹훅: 파트 III

10271 단어 webhookintegration
이제 Webhook: Part I에서와 같이 Webhook에 대한 기본적인 이해가 있으며 Webhook: Part II에서와 같이 첫 번째 Webhook 공급자를 생성합니다.

Webhook 소비자 애플리케이션 생성



먼저 응용 프로그램에 대한 데이터베이스를 생성했는지 확인하고 이름을 webhook_client로 지정했습니다.

그런 다음 프로젝트를 만들고 패키지를 설치하고 큐 데이터베이스를 설정합니다.

laravel new webhook-client --git --jet --stack=livewire 
composer require spatie/laravel-webhook-client
php artisan vendor:publish --provider="Spatie\WebhookClient\WebhookClientServiceProvider" --tag="webhook-client-config"
php artisan vendor:publish --provider="Spatie\WebhookClient\WebhookClientServiceProvider" --tag="webhook-client-migrations"
php artisan queue:table
php artisan migrate


데이터베이스 대기열을 사용하도록 .env를 업데이트합니다.

QUEUE_CONNECTION=database


웹후크 끝점



Laravel Webhook 클라이언트는 경로를 설정하는 쉬운 방법을 제공합니다. routes/web.php에 다음을 추가하기만 하면 됩니다.

Route::webhooks('webhook/handler');


이전 섹션과 같이 CSRF 토큰 확인을 비활성화하는 것을 잊지 마십시오.

페이로드 처리



구성에서 Spatie Laravel Webhook 클라이언트가 제공하는 내용을 살펴보겠습니다.

<?php

return [
    'configs' => [
        [
            'name' => 'default',
            'signing_secret' => env('WEBHOOK_CLIENT_SECRET'),
            'signature_header_name' => 'Signature',
            'signature_validator' => \Spatie\WebhookClient\SignatureValidator\DefaultSignatureValidator::class,
            'webhook_profile' => \Spatie\WebhookClient\WebhookProfile\ProcessEverythingWebhookProfile::class,
            'webhook_response' => \Spatie\WebhookClient\WebhookResponse\DefaultRespondsTo::class,
            'webhook_model' => \Spatie\WebhookClient\Models\WebhookCall::class,
            'store_headers' => [],
            'process_webhook_job' => '',
        ],
    ],
];


위는 기본 구성이며 기본적으로 웹후크 핸들러에는 수신 페이로드 서명에 사용할 WEBHOOK_CLIENT_SECRET가 필요합니다.

나만의 비밀 키를 가질 수 있습니다. 제가 가장 좋아하는 비밀 키는 항상 무작위로 생성합니다. 이는 tinker를 통해 달성할 수 있습니다.

php artisan tinker
Psy Shell v0.11.7 (PHP 8.1.3 — cli) by Justin Hileman
>>> str()->random(32)
=> "8pZAOAyXfYKd3aAqdxYHsJf4oSTWafaG"


생성 키를 복사하고 저장합니다.env 파일:

WEBHOOK_CLIENT_SECRET=8pZAOAyXfYKd3aAqdxYHsJf4oSTWafaG


그런 다음 들어오는 페이로드를 처리하기 위한 Queue Job 클래스가 필요합니다.

php artisan make:job WebhookHandler

app/Jobs/WebhookHandler.php를 열고 확장 클래스를 다음과 같이 업데이트합니다.

<?php

namespace App\Jobs;

class WebhookHandler extends \Spatie\WebhookClient\Jobs\ProcessWebhookJob
{
    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // do your things here with $this->webhookCall
        logger()->info($this->webhookCall->payload);
    }
}


그리고 config/webhook-client.php를 업데이트합니다.

'process_webhook_job' => \App\Jobs\WebhookHandler::class,


Webhook Provider의 설정 개선



Webhook Provider에서 페이로드를 보낼 때 useSecret() 메서드가 있다는 것을 기억하십니까? 예, Webhook Provider에서 공유하려면 이 비밀 키가 필요합니다. 그렇지 않으면 서명이 유효하지 않으면 페이로드를 처리할 수 없습니다.

Webhook Provider에 대한 빠른 업데이트를 수행해 보겠습니다.
app/Models/User.php에서 url() 헬퍼를 사용하여 useSecret()config()에 언급된 사용자 정의webhook 구성을 호출합니다.

static::created(function(User $model) {
    WebhookCall::create()
        ->url(config('webhook.user.url'))
        ->payload($model->toArray())
        ->throwExceptionOnFailure()
        ->useSecret(config('webhook.user.secret'))
        ->dispatch();
});


웹후크 제공자config/webhook.php:

<?php 

return [
    'user' => [
        'name' => 'Webhook Consumer: User',
        'url' => env('WEBHOOK_CONSUMER_URL'),
        'secret' => env('WEBHOOK_CONSUMER_SECRET')
    ],
];


그런 다음 .env에서:

WEBHOOK_CONSUMER_URL=http://127.0.0.1:8001/webhook/handler
WEBHOOK_CONSUMER_SECRET=8pZAOAyXfYKd3aAqdxYHsJf4oSTWafaG


Webhook Consumer URL에 유의하십시오. 빠른 설정 및 테스트를 위해 php artisan serve를 사용하여 실행했습니다.

웹후크 테스트



이제 Webhook Provider 및 Webhook Consumer를 테스트할 준비가 되었습니다.

애플리케이션과 대기열을 실행해 보겠습니다.

php artisan serve
php artisan queue:work


Webhook 공급자와 소비자 모두에서 실행합니다.

그런 다음 http://localhost:8000에 새 계정을 등록하십시오.

이제 Webhook Consumer 로그 파일을 검사하면 다음과 같은 내용이 표시되어야 합니다.

[2022-07-12 04:07:52] local.INFO: array (
  'id' => 2,
  'name' => 'Malik Rich',
  'email' => '[email protected]',
  'created_at' => '2022-07-12T04:07:48.000000Z',
  'updated_at' => '2022-07-12T04:07:48.000000Z',
  'profile_photo_url' => 'https://ui-avatars.com/api/?name=M+R&color=7F9CF5&background=EBF4FF',
)  


이것을 올바르게 이해하면 올바른 길을 가고 있는 것입니다. 그렇지 않은 경우 대기열 및 경로를 조사할 수 있습니다. 제대로 구성되었는지 확인하십시오.

좋은 웹페이지 즐겨찾기