Features
These are the core feature highlights implemented in the DaxPay open-source edition, covering payment capabilities, unified channel encapsulation, pay methods, security mechanisms, and internationalization with time zones.
Core Payment Capabilities
DaxPay covers the full lifecycle of payment transactions:
- Pay — unified order creation, supporting mainstream pay providers and multiple pay methods
- Refund — full / partial refunds, with refund sync and discrepancy handling
- Transfer — merchant transfer disbursement over the Alipay / WeChat / Douyin direct channels, transfer scenes and initiating-app configuration, and WeChat confirm-payment links
- Allocation — allocation orders; open APIs to initiate / query / sync allocations; allocation receiver binding management
- Query — order status, transaction details, and channel flow queries
- Callback — asynchronous payment result notification to business systems, no polling required
- Sync — actively query order status from the channel to compensate for lost callbacks
- Close — order timeout closing, with gateway-timeout fallback
- Merchant notify — merchant callback message dispatching, retry strategy, and notify task scheduling
- EasyPay protocol compatibility — a built-in EasyPay universal merchant access module compatible with mainstream EasyPay protocols; V1 (MD5) kept for legacy compatibility, V2 (RSA) recommended — small merchants and individual developers can integrate quickly
Channel Architecture: Orchestration Separated from Integration
DaxPay's channel system uses a layered architecture of main-app orchestration + sub-app integration — the core design that distinguishes it from a monolithic payment system:
| Layer | Responsibility | Implementation |
|---|---|---|
Orchestration layer (main app daxpay-channel) | Channel declaration, channel routing, payment strategy orchestration, configuration data CRUD, callback assembly | Contains no third-party SDKs |
Integration layer (sub-apps channel-one / channel-two / channel-three) | Direct third-party SDK calls, signing/verification, channel-specific protocol adaptation | Independently deployed |
The main app and the sub-apps communicate over internal HTTP interfaces, with AES-GCM transport encryption on the whole path and a unified response format. Benefits of this design:
- SDK dependency isolation — third-party SDKs never pollute the main app, avoiding version conflicts
- Independent upgrades — sub-apps can release per channel without affecting the main payment path
- Elastic scaling — high-volume channels (Alipay, WeChat) can scale out independently with multiple instances
Channel Count and Distribution
DaxPay ships 20+ payment channel capabilities across three categories — direct, aggregate, and international; the exact availability follows the corresponding extension packages, delivery versions, and license terms:
- Direct channels (
channel-one) — Alipay, WeChat Pay, Douyin Pay, UMS, UnionPay (Cloud QuickPass) - Aggregate channels (
channel-two) — Lakala, HKRT, Dougong (Huifu), Leshua, VBILL (Suixingfu), HMPay (Sand), Adapay, Fuiou, Yeepay, etc., provided per version through channel extension packages - International channels (
channel-three) — Stripe and other international channels, provided per version through the corresponding channel extension packages
Pay Methods
Covering mainstream payment scenarios:
- Aggregate pay — one QR for multiple wallets, automatically routed to the user's wallet
- QR code payment — user-scan and merchant-scan modes
- JSAPI payment — invoked inside WeChat / Alipay / Douyin official accounts and mini-programs
- H5 payment — invokes the wallet from a mobile browser
- APP payment — invoked through native SDKs
- Mini-program payment — WeChat / Alipay / Douyin
- Barcode payment — the merchant scans the user's dynamic payment code
- Douyin payment — QR / JSAPI / H5 / APP
- International card payment — Visa / MasterCard and other international cards, in two modes: Stripe Checkout and Stripe.js Elements
Multi-Merchant and Multi-Client Management
- Dual-portal architecture — an admin portal (for platform operators) and a merchant portal (for merchant self-service): two independent portals compiled from the same codebase, with menus and data fully isolated
- Multi-app management — a single merchant can configure multiple payment apps, each with independent credentials and callback URLs
- Row-level data isolation — each merchant's data is isolated automatically by merchant number and is invisible to other merchants
Channel Routing and Risk Control
- Dynamic routing — matches the final channel dynamically by conditions such as pay product, pay method, and merchant app
- Product strategy — automatically matches the corresponding payment flow per pay method (QR / JSAPI, etc.)
- Environment consistency check — the routing layer double-checks that the merchant environment matches the product's current environment (sandbox/production)
- Basic risk checks —
daxpay-plugin-riskprovides IP blacklists, overseas IP blocking, province/city region lists, pre-payment risk checks, and hit records; user-identity blacklists, store geofencing, and post-payment backfill are enhanced capabilities outside the open-source defaults
Security Mechanisms
DaxPay builds its defenses across the API, transport, storage, and authentication layers:
- Tamper-proof signing — API requests and responses support RSA signatures
- Field-level encryption — sensitive fields encrypted at rest with AES-256-GCM
- Transport encryption — AES-GCM encryption on every hop between the main app and the channel sub-apps
- Authentication and authorization — role-based access control built on Sa-Token and RBAC, with menus and data isolated by role
- Two-factor authentication — TOTP one-time passwords + backup codes, compatible with Google Authenticator
- Social login — OAuth login with 11 third-party platforms: WeCom, DingTalk, Feishu, Alipay, WeChat Official Account (QR code on PC / in-app authorization on WeChat), WeChat Open Platform, GitHub, and more
- Sandbox / production isolation — deployment switches separate the environments completely; on startup, a production deployment automatically resets any leftover sandbox configuration back to production, so test data can never leak in
Internationalization and Time Zones
- 10 languages — Simplified Chinese, Traditional Chinese (Taiwan / Hong Kong), English, Japanese, and Korean, plus Indonesian, Vietnamese, Thai, and Malay; switchable at any time in both the admin console and the merchant portal
- Unified time zones — all transaction times are stored in Coordinated Universal Time (UTC); pages convert them to the viewer's time zone automatically, so operators and merchants in different countries always see their own local time
- Translation fallback — texts temporarily missing in a language automatically fall back to Simplified Chinese — no blank pages or raw translation keys
Full Client Coverage
| Client | App | Tech Stack |
|---|---|---|
| Admin Web | daxpay-admin | Vue 3.5 · Vite 8 · antdv-next · Vben Admin 5 |
| Merchant Web | daxpay-merchant | Same as above, compiled from the same source |
| Mobile H5 | dax-pay-h5 | Vue 3.5 · Vant 4 · UnoCSS (PC + mobile dual-endpoint) |
| Admin cross-platform app | dax-pay-app-admin | uni-app · wot-ui v2 (H5 / WeChat / Alipay / Douyin / App) |
| Merchant cross-platform app | dax-pay-app-merchant | uni-app · wot-ui v2 (H5 / WeChat / Alipay / Douyin / App) |
| Cashier mini-program | dax-pay-mini-cashier | uni-app · wot-ui v2 (WeChat / Alipay / Douyin) |
Observability and Operations
- Tracing — OpenTelemetry integration: all logs of one request carry the same trace ID, so cross-service troubleshooting chains up in one click
- Audit logs — critical operations are fully recorded, with operator, time, IP, and IP geolocation
- In-app notifications — announcements, personal messages, and real-time SSE push
- One-click deployment — a single-binary operations panel guides you through installation, build, deployment, and daily operations
- Graceful shutdown — on release or restart, in-flight requests are drained before the service goes down, never interrupting ongoing transactions