feat(payments): per-channel Robokassa shops on the direct rail #266
Reference in New Issue
Block a user
Delete Branch "feature/robokassa-multishop"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Split the single Robokassa direct rail into one merchant shop per channel (
web/android;ioslater), chosen by the trustedX-Platformsubtype, while every shop still credits the onedirectwallet. Merchant-account separation for accounting / receipts — not a new wallet.Changes
robokassa.Shopsregistry:webseeds from the legacyBACKEND_ROBOKASSA_*(or_WEB_*),androidfrom_ANDROID_*; an empty shop leaves the rail dormant; per-shop validation.X-Platformsubtype (unknown → web fallback); the per-shop Result callback is verified by that shop's own Password2 at/pay/robokassa/result/<channel>. The gateway extracts the channel from the path suffix; Caddy's/pay/*glob already forwards it — no Caddyfile change.shopcolumn on the order (migration00015), recorded from the payment context and surfaced per entry in the admin financial report.PAYMENTS.md(+_ru) topology, deploy env vars + compose mapping, the decisions log (D41 revised for the ИП / 54-ФЗ move; D42-D44), the plan.Safety
shop text NOT NULL DEFAULT '') — applies forward via goose, no contour wipe, image-rollback ignores it.Verification
go build/vet ./backend/... ./gateway/...,gofmtclean; all backend + gateway unit tests green; payments integration green (migration00015+ intake on real Postgres).Follow-ups (out of scope here)
Receipt+Email, 54-ФЗ) — when the owner's ИП / ОФД / СНО are live.direct/androidfor the native build — only matters once android payments are un-hidden.