PHP code example of cline / webhook
1. Go to this page and download the library: Download cline/webhook library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
cline / webhook example snippets
use Cline\Webhook\Server\WebhookCall;
WebhookCall::create()
->url('https://example.com/webhooks')
->payload(['event' => 'user.created', 'user_id' => 123])
->dispatch();
use Cline\Webhook\Server\WebhookCall;
use Cline\Webhook\Enums\SignatureVersion;
WebhookCall::create()
->url('https://example.com/webhooks')
->payload([
'event' => 'order.completed',
'order_id' => 456,
'total' => 99.99
])
->useSecret('your-secret-key')
->signatureVersion(SignatureVersion::V1_HMAC)
->withHeaders(['X-Custom-Header' => 'value'])
->meta(['internal_ref' => 'ABC123'])
->tags(['orders', 'high-priority'])
->maximumTries(5)
->timeoutInSeconds(10)
->onQueue('webhooks')
->dispatch();
WebhookCall::create()
->url('https://example.com/webhooks')
->payload(['event' => 'user.updated'])
->dispatchIf($user->shouldNotifyWebhook());
WebhookCall::create()
->url('https://example.com/webhooks')
->payload(['event' => 'critical.alert'])
->dispatchSync();
use Cline\Webhook\Enums\SignatureVersion;
WebhookCall::create()
->url('https://example.com/webhooks')
->payload(['event' => 'secure.event'])
->signatureVersion(SignatureVersion::V1A_ED25519)
->useEd25519Key(env('WEBHOOK_ED25519_PRIVATE_KEY'))
->dispatch();
use Illuminate\Support\Facades\Route;
Route::webhooks('webhooks/github', 'github');
Route::webhooks('webhooks/stripe', 'stripe');
'client' => [
'configs' => [
'github' => [
'signing_secret' => env('GITHUB_WEBHOOK_SECRET'),
'signature_validator' => HmacValidator::class,
'webhook_profile' => ProcessEverything::class,
'webhook_response' => DefaultResponse::class,
'webhook_model' => WebhookCall::class,
'process_webhook_job' => ProcessWebhookJob::class,
'store_headers' => ['X-GitHub-Event', 'X-GitHub-Delivery'],
'delete_after_days' => 30,
'timestamp_tolerance_seconds' => 300,
],
'stripe' => [
'signing_secret' => env('STRIPE_WEBHOOK_SECRET'),
// ... similar configuration
],
],
],
namespace App\Webhooks;
use Cline\Webhook\Client\Contracts\ProcessesWebhook;
use Cline\Webhook\Client\Models\WebhookCall;
class GitHubWebhookProcessor implements ProcessesWebhook
{
public function process(WebhookCall $webhookCall): void
{
$payload = $webhookCall->payload;
match($payload['event']) {
'push' => $this->handlePush($payload),
'pull_request' => $this->handlePullRequest($payload),
default => null,
};
}
private function handlePush(array $payload): void
{
// Handle push event
}
private function handlePullRequest(array $payload): void
{
// Handle PR event
}
}
'github' => [
// ...
'webhook_processor' => \App\Webhooks\GitHubWebhookProcessor::class,
],
namespace App\Webhooks;
use Cline\Webhook\Client\Contracts\WebhookProfile;
use Illuminate\Http\Request;
class OnlyProductionWebhooks implements WebhookProfile
{
public function shouldProcess(Request $request): bool
{
$payload = json_decode($request->getContent(), true);
return $payload['environment'] === 'production';
}
}
use Cline\Webhook\Client\Events\WebhookReceivedEvent;
use Cline\Webhook\Client\Events\WebhookProcessedEvent;
use Cline\Webhook\Server\Events\WebhookCallFailedEvent;
Event::listen(WebhookReceivedEvent::class, function ($event) {
Log::info('Webhook received', [
'id' => $event->webhookCall->webhook_id,
'config' => $event->configName,
]);
});
Event::listen(WebhookCallFailedEvent::class, function ($event) {
Log::error('Webhook dispatch failed', [
'url' => $event->url,
'attempt' => $event->attempt,
]);
});
use Cline\Webhook\Client\Models\WebhookCall;
// Get pending webhooks
$pending = WebhookCall::pending()->get();
// Get webhooks for specific config
$githubWebhooks = WebhookCall::forConfig('github')->get();
// Find by webhook ID (idempotency)
$webhook = WebhookCall::byWebhookId('01HQWE...')->first();
// Retry failed webhook
$webhook = WebhookCall::failed()->first();
$webhook->clearException();
$webhook->update(['status' => WebhookStatus::PENDING]);
dispatch(new ProcessWebhookJob($webhook));
protected function schedule(Schedule $schedule): void
{
$schedule->command('model:prune', ['--model' => \Cline\Webhook\Client\Models\WebhookCall::class])
->daily();
}
'server' => [
'queue' => env('WEBHOOK_QUEUE'), // Queue for async dispatch
'http_verb' => 'POST', // HTTP method
'timeout_in_seconds' => 3, // Request timeout
'tries' => 3, // Max retry attempts
'backoff_strategy' => ExponentialBackoffStrategy::class,
'verify_ssl' => true, // Verify SSL certificates
'throw_exception_on_failure' => false, // Throw on final failure
'signature_version' => SignatureVersion::V1_HMAC->value,
'signing_secret' => env('WEBHOOK_SIGNING_SECRET'),
'ed25519_private_key' => env('WEBHOOK_ED25519_PRIVATE_KEY'),
],
'client' => [
'configs' => [
'default' => [
'signing_secret' => env('WEBHOOK_SECRET'),
'signature_validator' => HmacValidator::class,
'ed25519_public_key' => env('WEBHOOK_ED25519_PUBLIC_KEY'),
'webhook_profile' => ProcessEverything::class,
'webhook_response' => DefaultResponse::class,
'webhook_model' => WebhookCall::class,
'process_webhook_job' => ProcessWebhookJob::class,
'store_headers' => ['*'], // Or specific headers
'delete_after_days' => 30,
'timestamp_tolerance_seconds' => 300,
],
],
],
bash
php artisan vendor:publish --tag="webhook-config"
bash
php artisan migrate