PHPackages                             rasuvaeff/yii3-webhooks-db - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. rasuvaeff/yii3-webhooks-db

ActiveLibrary[Database &amp; ORM](/categories/database)

rasuvaeff/yii3-webhooks-db
==========================

Database-backed delivery and nonce storage for rasuvaeff/yii3-webhooks

v1.0.1(1mo ago)00BSD-3-ClausePHPPHP 8.3 - 8.5CI passing

Since Jun 19Pushed 2w agoCompare

[ Source](https://github.com/rasuvaeff/yii3-webhooks-db)[ Packagist](https://packagist.org/packages/rasuvaeff/yii3-webhooks-db)[ Docs](https://github.com/rasuvaeff/yii3-webhooks-db)[ RSS](/packages/rasuvaeff-yii3-webhooks-db/feed)WikiDiscussions master Synced 2w ago

READMEChangelogDependencies (31)Versions (4)Used By (0)

rasuvaeff/yii3-webhooks-db
==========================

[](#rasuvaeffyii3-webhooks-db)

[![Stable Version](https://camo.githubusercontent.com/163ef790fe293616a35c39c2999ac971c9220514f38a87a732cd38f1f4a6081b/68747470733a2f2f706f7365722e707567782e6f72672f7261737576616566662f796969332d776562686f6f6b732d64622f762f737461626c65)](https://packagist.org/packages/rasuvaeff/yii3-webhooks-db)[![Total Downloads](https://camo.githubusercontent.com/d4493362b51305bfeac6f3d1ed1fda9ac92aa843db1c33900fe8f070dcdddecb/68747470733a2f2f706f7365722e707567782e6f72672f7261737576616566662f796969332d776562686f6f6b732d64622f646f776e6c6f616473)](https://packagist.org/packages/rasuvaeff/yii3-webhooks-db)[![Build](https://github.com/rasuvaeff/yii3-webhooks-db/actions/workflows/build.yml/badge.svg)](https://github.com/rasuvaeff/yii3-webhooks-db/actions)[![Static analysis](https://github.com/rasuvaeff/yii3-webhooks-db/actions/workflows/static-analysis.yml/badge.svg)](https://github.com/rasuvaeff/yii3-webhooks-db/actions)[![Psalm Level](https://camo.githubusercontent.com/7c56cd542eade41607fb0dc22270ba558679002e33c5736b1f5d22798ef2fa0b/68747470733a2f2f73686570686572642e6465762f6769746875622f7261737576616566662f796969332d776562686f6f6b732d64622f6c6576656c2e737667)](https://shepherd.dev/github/rasuvaeff/yii3-webhooks-db)[![License](https://camo.githubusercontent.com/1911e7cae7742ab292eda536de84b8a34bbcf348fb37318ed0a7265a49981ac0/68747470733a2f2f706f7365722e707567782e6f72672f7261737576616566662f796969332d776562686f6f6b732d64622f6c6963656e7365)](https://packagist.org/packages/rasuvaeff/yii3-webhooks-db)[Русская версия](README.ru.md)

База данных для хранения доставок и nonce в `rasuvaeff/yii3-webhooks`. Обеспечивает production-хранилище попыток доставки и атомарную защиту от повторного воспроизведения.

> Используете AI-ассистент для написания кода? В [llms.txt](llms.txt) есть компактный справочник по API.

Требования
----------

[](#требования)

- PHP 8.3+
- `rasuvaeff/yii3-webhooks` ^1.0
- `yiisoft/db` ^2.0
- `yiisoft/db-migration` ^2.0
- `psr/clock` ^1.0

Установка
---------

[](#установка)

```
composer require rasuvaeff/yii3-webhooks-db
```

Использование
-------------

[](#использование)

Запустите миграцию `M260612000000CreateWebhookTables` для создания таблиц `webhook_deliveries` и `webhook_nonces`.

```
use Psr\Clock\ClockInterface;
use Rasuvaeff\Yii3Webhooks\WebhookDelivery;
use Rasuvaeff\Yii3WebhooksDb\DbNonceStorage;
use Rasuvaeff\Yii3WebhooksDb\DbWebhookDeliveryStorage;

$deliveries = new DbWebhookDeliveryStorage(db: $db);
$nonces = new DbNonceStorage(db: $db, clock: $clock);

$delivery = WebhookDelivery::create(event: $event, endpoint: $endpoint);
$deliveries->save(delivery: $delivery);
$accepted = $nonces->add(nonce: $signature->getValue());
```

При использовании `yiisoft/config` этот пакет биндит только `WebhookDeliveryStorage` и `NonceStorage`.

Справочник API
--------------

[](#справочник-api)

### DbWebhookDeliveryStorage

[](#dbwebhookdeliverystorage)

МетодОписание`save(delivery)`Вставляет или обновляет запись доставки`findPending(limit)`Возвращает ожидающие доставки, отсортированные по времени создания`markDelivered(delivery)`Сохраняет доставку как успешно выполненную`markFailed(delivery)`Сохраняет доставку как неуспешную`getById(id)`Загружает доставку по ID### DbNonceStorage

[](#dbnoncestorage)

МетодОписание`has(nonce)`Проверяет, существует ли nonce`add(nonce)`Атомарная вставка; возвращает false при дубликате`deleteOlderThan(threshold)`Удаляет устаревшие nonce для очистки по сроку храненияБезопасность
------------

[](#безопасность)

- `DbNonceStorage::add()` опирается на первичный ключ и перехватывает ошибки дублирования ключа.
- `DbWebhookDeliveryStorage` сохраняет только данные `WebhookDelivery`, секреты endpoint'ов не хранятся.
- Держите записи nonce не менее времени, равного допустимому окну временно́й метки webhook'а.

Примеры
-------

[](#примеры)

Смотрите [examples/](examples/) для запускаемого примера на SQLite.

Разработка
----------

[](#разработка)

```
make install
make build
make cs-fix
make test
make test-coverage
make mutation
make release-check
```

Лицензия
--------

[](#лицензия)

BSD-3-Clause. Смотрите [LICENSE.md](LICENSE.md).

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance95

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~7 days

Total

2

Last Release

38d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/b0812d5572a7041dfe36e222d295b2e6dc55833a605350fcde58a51a5965ed30?d=identicon)[rasuvaeff](/maintainers/rasuvaeff)

---

Top Contributors

[![rasuvaeff](https://avatars.githubusercontent.com/u/1352718?v=4)](https://github.com/rasuvaeff "rasuvaeff (13 commits)")

---

Tags

databasephpwebhooksyii3databasedbwebhookyii3replay-protection

###  Code Quality

TestsPHPUnit

Static AnalysisPsalm, Rector

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/rasuvaeff-yii3-webhooks-db/health.svg)

```
[![Health](https://phpackages.com/badges/rasuvaeff-yii3-webhooks-db/health.svg)](https://phpackages.com/packages/rasuvaeff-yii3-webhooks-db)
```

###  Alternatives

[kreait/firebase-php

Firebase Admin SDK

2.4k46.0M90](/packages/kreait-firebase-php)[robmorgan/phinx

Phinx makes it ridiculously easy to manage the database migrations for your PHP app.

4.5k49.7M482](/packages/robmorgan-phinx)[spatie/laravel-translation-loader

Store your language lines in the database, yaml or other sources

8513.4M77](/packages/spatie-laravel-translation-loader)[tempest/framework

The PHP framework that gets out of your way.

2.3k37.6k19](/packages/tempest-framework)[aura/sqlquery

Object-oriented query builders for MySQL, Postgres, SQLite, and SQLServer; can be used with any database connection library.

4573.2M40](/packages/aura-sqlquery)[sonata-project/entity-audit-bundle

Audit for Doctrine Entities

6421.1M1](/packages/sonata-project-entity-audit-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
