From f2fb8611f5191e5823322138cc7f7c67687e3dec Mon Sep 17 00:00:00 2001 From: Kravets <57632712+kravetsone@users.noreply.github.com> Date: Wed, 10 Jul 2024 23:56:44 +0300 Subject: [PATCH] chore: improve README --- README.md | 57 ++++++++++++++++++++++++++++++++++++++++++++++ examples/simple.ts | 3 +-- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 359302b..ea4b48b 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,69 @@ console.log(result); ### Фичи - Генерируется исходя из **OpenAPI** спецификации +- Очень удобная работа с нотификацией (webhook) с умными фильтрами +- Имеет в себе [webhook адаптеры для самых популярных фреймворков](#поддерживаемые-webhook-адаптеры) - Отличная документация кода с помощью **JSDoc** (сгенерировано из **OpenAPI**) - Современная и **type-safe** - 0 зависимостей - Берёт работу с [подписью запроса](https://www.tbank.ru/kassa/dev/payments/index.html#section/Podpis-zaprosa) на себя - [Есть на JSR](https://jsr.io/@kravets/t-kassa-api) +### Webhook + +Пример использования webhook с фреймворком [Hono](https://hono.dev/) + +```ts +import { Hono } from "hono"; +import { TKassa, webhookHandler, filters } from "t-kassa-api"; + +const ткасса = new TKassa(process.env.TERMINAL_KEY, process.env.PASSWORD); + +ткасса.on( + filters.and( + filters.equal("Status", "SUCCESS"), + filters.notNullable("RebillId") + ), + (context) => { + // при этом типы понимают фильтры + } +); + +const app = new Hono(); + +app.get("/", webhookHandler("hono")); +``` + +### Поддерживаемые webhook адаптеры + +- [Elysia](https://elysiajs.com/) +- [Fastify](https://fastify.dev/) +- [Hono](https://hono.dev/) +- [Express](https://expressjs.com/) +- [Koa](https://koajs.com/) +- [node:http](https://nodejs.org/api/http.html) +- [Bun.serve](https://bun.sh/docs/api/http) +- [std/http (Deno.serve)](https://docs.deno.com/runtime/manual/runtime/http_server_apis#http-server-apis) + +или любой другой фреймворк + +```ts +// a non-existing framework for the example +import { App } from "some-http-framework"; +import { TKassa } from "t-kassa-api"; + +const ткасса = new TKassa(process.env.TERMINAL_KEY, process.env.PASSWORD, { + server: "https://rest-api-test.tinkoff.ru", +}); + +const app = new App().post("/t-kassa", async (req) => { + // req.body must be json equivalent to Webhook notification body + await ткасса.emit(req.body); +}); + +app.listen(80); +``` + ### TODO: - поддержать `application/x-www-form-urlencoded` diff --git a/examples/simple.ts b/examples/simple.ts index 8536878..ef7bb72 100644 --- a/examples/simple.ts +++ b/examples/simple.ts @@ -11,8 +11,7 @@ const ткасса = new TKassa( ткасса.on( filters.and( filters.equal("Status", "SUCCESS"), - filters.equal("ErrorCode", "1"), - filters.notNullable("FnNumber"), + filters.notNullable("RebillId"), ), (context) => { // ^?