payment-idempotency — скилл для Claude Code: защита от двойных
Скилл для кода платёжного коннектора: не даёт повторным запросам Gateway создать второе списание у эквайера.
npx skills add vtex/skills --skill payment-idempotency -a claude-codeЧто делает payment-idempotency
Скилл включается, когда вы пишете обработчики Create Payment, Cancel, Capture и Refund в платёжном коннекторе или разбираетесь с дублирующимися запросами. Он задаёт правила идемпотентности: paymentId служит ключом для Create Payment, requestId — для отмены, подтверждения и возврата. Повторный вызов с тем же paymentId должен вернуть сохранённый ответ, а не идти в эквайер заново.
Внутри — разбор состояний платежа (undefined → approved → settled, undefined → denied, approved → cancelled) и примеры кода на TypeScript: как проверить хранилище перед обработкой и как отдать тот же ответ. Отдельно сказано про асинхронные методы вроде Boleto и Pix: до подтверждения эквайером статус остаётся undefined, синхронное одобрение недопустимо.
Хранить ответы нужно в постоянном хранилище — PostgreSQL, DynamoDB или VBase для VTEX IO. In-memory не подходит: после перезапуска записи пропадут, и Gateway, который повторяет запросы со статусом undefined до 7 дней, снова дойдёт до эквайера. Если два повтора приходят одновременно, обычная запись «последний победил» теряет обновление статуса — нужен etag или ifMatch. Это повод проверить свой слой хранения до релиза.
Скилл не покрывает формы ответов и HTTP-методы PPP, логику асинхронных callback-уведомлений, PCI-требования и терминальные платежи POS — для них есть отдельные скиллы.
Какие задачи решает
- вернуть тот же ответ на повторный Create Payment вместо нового списания
- проверить
paymentIdв хранилище до вызова эквайера - не допустить недопустимых переходов состояний платежа
- удержать статус
undefinedдля Boleto и Pix до подтверждения - защитить обновление статуса от перезаписи при параллельных повторах
Примеры запросов агенту
- проверь мой обработчик Create Payment на идемпотентность по
paymentId - почему повторный запрос Gateway создаёт второе списание и как это исправить
- добавь проверку
requestIdв обработчик Refund
Как установить payment-idempotency
1Через Skills CLI (Vercel)
npx skills add vtex/skills --skill payment-idempotency -a claude-code2Вручную: положить файлы
~/.claude/skills/payment-idempotency/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/payment-idempotency/
1Через Skills CLI (Vercel)
npx skills add vtex/skills --skill payment-idempotency -a codex2Вручную: положить файлы
.agents/skills/payment-idempotency/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add vtex/skills --skill payment-idempotency -a cursor2Вручную: положить файлы
.cursor/skills/payment-idempotency/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install vtex/skills payment-idempotency2Вручную: положить файлы
.github/skills/payment-idempotency/SKILL.md1Через Skills CLI (Vercel)
npx skills add vtex/skills --skill payment-idempotency -a gemini-cli2Командой платформы
gemini skills install https://github.com/vtex/skills --path skills/payment-idempotencyВручную: положить файлы
.devin/skills/payment-idempotency/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add vtex/skills --skill payment-idempotency -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о payment-idempotency
Как установить payment-idempotency в Claude?
Выполните npx skills add vtex/skills --skill payment-idempotency -a claude-code. Файл скилла появится по пути ~/.claude/skills/payment-idempotency/SKILL.md.
Что делает payment-idempotency?
Задаёт правила идемпотентности для платёжного коннектора: ключи paymentId и requestId, допустимые переходы состояний, семантику повторов для отмены и возврата. Помогает не допустить двойных списаний при повторных запросах Gateway.
С какими скиллами он сочетается?
Для терминальных платежей POS его берут вместе с payment-ppp-pos. Формы ответов PPP, асинхронные callback-уведомления и PCI-требования вынесены в отдельные скиллы.