ec51e87d2d
A generic multi-client payment gateway so FlatRender, meezi.ir and bargevasat.ir can all pay through ZarinPal's single verified callback domain (pay.flatrender.ir). New Go service services/payment (clones the notification skeleton + vendored deps): - migration 31_payment_broker.sql — `payment` schema: client_apps, transactions, webhook_deliveries. - ZarinPal v4 client ported from the proven identity PaymentService (request.json -> StartPay -> verify.json; codes 100/101). - client API: POST /v1/pay/request + /v1/pay/inquiry, authed by X-Api-Key + HMAC body signature; GET /callback/zarinpal (the single verified endpoint) verifies, then 302s the user back to the site's return_url (signed) and fires a signed, retried webhook. - per-client ZarinPal merchant override (default = shared merchant); amount stored canonically in Rial, unit to ZarinPal env-configurable. - admin API /v1/admin/* (FlatRender admin JWT): client-app CRUD + key issue/rotate + transactions list. Deploy wiring: payment-svc in docker-compose.v2.yml (host port 1607), pay.flatrender.ir server block in mirror-nginx conf, ENV_FILE + README updates (cert SAN + manual migration note). Admin UI: src/components/admin/PaymentsAdmin.tsx (client apps with one-time key reveal + rotate, transactions table) + /admin/payments page + nav link + fa/en strings; pay-admin proxy route to payment-svc. Docs/SDK: deploy/PAYMENTS.md (integration contract) + deploy/sdk/flatpay.js (zero-dep Node client + webhook verifier) for meezi/any site. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
84 lines
1.4 KiB
YAML
84 lines
1.4 KiB
YAML
run:
|
|
skip-files:
|
|
- encode_optype.go
|
|
- ".*_test\\.go$"
|
|
|
|
linters-settings:
|
|
govet:
|
|
enable-all: true
|
|
disable:
|
|
- shadow
|
|
|
|
linters:
|
|
enable-all: true
|
|
disable:
|
|
- dogsled
|
|
- dupl
|
|
- exhaustive
|
|
- exhaustivestruct
|
|
- errorlint
|
|
- forbidigo
|
|
- funlen
|
|
- gci
|
|
- gochecknoglobals
|
|
- gochecknoinits
|
|
- gocognit
|
|
- gocritic
|
|
- gocyclo
|
|
- godot
|
|
- godox
|
|
- goerr113
|
|
- gofumpt
|
|
- gomnd
|
|
- gosec
|
|
- ifshort
|
|
- lll
|
|
- makezero
|
|
- nakedret
|
|
- nestif
|
|
- nlreturn
|
|
- paralleltest
|
|
- testpackage
|
|
- thelper
|
|
- wrapcheck
|
|
- interfacer
|
|
- lll
|
|
- nakedret
|
|
- nestif
|
|
- nlreturn
|
|
- testpackage
|
|
- wsl
|
|
- varnamelen
|
|
- nilnil
|
|
- ireturn
|
|
- govet
|
|
- forcetypeassert
|
|
- cyclop
|
|
- containedctx
|
|
- revive
|
|
|
|
issues:
|
|
exclude-rules:
|
|
# not needed
|
|
- path: /*.go
|
|
text: "ST1003: should not use underscores in package names"
|
|
linters:
|
|
- stylecheck
|
|
- path: /*.go
|
|
text: "don't use an underscore in package name"
|
|
linters:
|
|
- golint
|
|
- path: rtype.go
|
|
linters:
|
|
- golint
|
|
- stylecheck
|
|
- path: error.go
|
|
linters:
|
|
- staticcheck
|
|
|
|
# Maximum issues count per one linter. Set to 0 to disable. Default is 50.
|
|
max-issues-per-linter: 0
|
|
|
|
# Maximum count of issues with the same text. Set to 0 to disable. Default is 3.
|
|
max-same-issues: 0
|