Applications
DaxPay is built from sub-projects in multiple independent git repositories working together: the main application calls the independent channel sub-services over HTTP, and the various front ends connect to the main application through RESTful APIs. Each application is introduced below.
Main Application dax-pay-open
The payment core backend, hosting the payment business, channel routing orchestration, risk control, and system administration.
| Module | Responsibility |
|---|---|
daxpay-platform | Base layer — common contracts / technical infrastructure / platform capabilities / business services |
daxpay-payment | Payment business — domain core / operator and merchant portals / unified acquiring / two mobile apps |
daxpay-channel | Channel business — orchestration layer for 20+ channel capabilities (routing / strategies / config CRUD, no SDKs) |
daxpay-plugin | Payment plugins — EasyPay protocol, risk-control blacklist |
daxpay-demo | Feature demo module |
daxpay-start | Startup entry |
Tech stack: Java 25 · Spring Boot 4.1.1 · PostgreSQL 14+ · Redis 7+ · Apache Artemis · MyBatis-Plus 3.5 · Sa-Token 1.46 · SpringDoc 3.0 · MapStruct 1.6 · Hutool 5.8 · Caffeine 3.2 · BouncyCastle 1.84
Port: 9999
Startup:
cd dax-pay-open/daxpay-start
mvnd spring-boot:run -Dspring-boot.run.profiles=devChannel Adapter Sub-application dax-pay-channel-one
An independently deployed microservice integrating direct channels such as Alipay, WeChat, Douyin, UMS, and UnionPay (QuickPass). It hosts the direct calls into third-party SDKs.
| Module | Description |
|---|---|
daxpay-platform | Base layer — core + common (util/json/i18n) + service-system |
daxpay-channel-impl | Channel implementations — alipay / wechat / douyin / ums / union, five sub-modules |
daxpay-channel-start | Startup entry |
SDK versions: alipay-sdk 4.40.272.ALL · weixin-java-pay (wxjava) 4.8.4.B · douyinpay 1.0.6 · UMS via in-house HTTP integration · UnionPay (QuickPass) via in-house HTTP + RSA2 certificate signing
Communication with the main application — the main application calls it through declarative @HttpExchange clients, with AES-GCM encryption on the link and unified {code, msg, data} responses
Port: 20100
Channel Adapter Sub-application dax-pay-channel-two
An independently deployed microservice integrating aggregate channels. Architecturally identical to channel-one; the only difference is the set of channels it hosts.
| Module | Description |
|---|---|
daxpay-platform | Base layer (isomorphic with channel-one) |
daxpay-channel-impl | Channel implementations — nine aggregate channel sub-modules (see the integrated channels below) |
daxpay-channel-start | Startup entry |
Integrated channels — Lakala, Haikerongtong, Dougong (Huifu), Leshua, Suixingfu, HemaPay (Shande), Adapay, Fuyou, YeePay (all nine channels implemented and enabled)
SDK versions — each aggregate channel's own SDK, plus yeepay 4.4.15
Port: 20200
Channel Adapter Sub-application dax-pay-channel-three
An independently deployed microservice integrating the international payment channel. Architecturally identical to channel-one; the only difference is the set of channels it hosts.
| Module | Description |
|---|---|
daxpay-platform | Base layer (isomorphic with channel-one) |
daxpay-channel-impl | Channel implementations — the stripe sub-module |
daxpay-channel-start | Startup entry |
SDK versions — stripe-java 29.2.0
Communication with the main application — same as channel-one: an AES-GCM encrypted link, with the main application routing calls through daxpay.channel.three
Port: 20300
Go Experimental Copies
dax-pay-channel-one-go and dax-pay-channel-two-go are Go (Gin) implementations of channel-one / channel-two respectively. They are experimental copies: experimental in nature, outside the mainline support scope and the main documentation flow. Use the Java versions for production deployment.
- Their ports fully overlap the Java versions (20100 / 20200) — pick one, never start both at the same time
- They do not depend on third-party SDKs; every channel is integrated through in-house HTTP signing. See each repository's README for the implemented channels
- Build with
go build ./cmd/server/; configuration is read fromconfigs/config.yaml
Web Admin Front End dax-pay-ui
The admin front end: a monorepo built on top of Vue Vben Admin 5 that compiles from a single source into two independent applications — the operator portal and the merchant portal.
| App | Role | dev port | VITE_APP_CLIENT_CODE |
|---|---|---|---|
apps/daxpay-admin | Operator (admin) portal — used by platform operators | 6999 | admin |
apps/daxpay-merchant | Merchant portal — merchant self-service | 7999 | merchant |
Both apps share the framework packages under packages/ (@core / effects / locales / stores / utils, etc.) and the packages/business/ui-biz business component library; portal-level isolation is achieved through menu client_code and permission codes.
dax-pay-ui/
├── apps/
│ ├── daxpay-admin/ # Operator portal app
│ └── daxpay-merchant/ # Merchant portal app
├── packages/ # Core packages (@core / effects / business / locales ...)
├── internal/ # Internal tooling (lint / tsconfig / vite-config)
└── scripts/ # Scripts (deploy / turbo-run / vsh)Tech stack — Vue 3.5 · Vite 8 · TypeScript 5.9 · antdv-next · vxe-table 4 · Vben Admin 5 · TailwindCSS 4 · vue-i18n 11 · pnpm 10 + Turbo 2.9
Internationalization — 10 locales (Chinese, Japanese, Korean + four ASEAN languages + Traditional Chinese for Taiwan/Hong Kong), with framework-layer and app-layer messages merged at load time
Startup:
pnpm run dev:admin # Operator portal, port 6999
pnpm run dev:merchant # Merchant portal, port 7999Mobile H5 Gateway dax-pay-h5
The mobile gateway application: a single app carries two fully independent page sets for PC and mobile, dispatched by device detection at the entry.
- Device detection —
index.htmlwriteswindow.__DEVICE__('pc' | 'mobile') before Vue mounts, with zero flicker - Directory separation — mobile code lives in
src/mobile/, PC code insrc/pc/, shared code insrc/shared/ - Mobile adaptation —
postcss-mobile-foreverfor vw adaptation; PC source is excluded from vw conversion and uses native px + media queries - Three route buckets — real routes / opposite-end-only stubs / catch-all 404; a single URL space resolved independently by each end
Tech stack — Vue 3.5 · Vite 8 · Vue Router 5 · Vant 4 (mobile) · UnoCSS 66 · Pinia 3 · vue-i18n 11
Port (dev): 9500
Internationalization — 10 locales
Startup: pnpm run dev
Operator Cross-Platform App dax-pay-app-admin
A management-oriented uni-app application for platform operators, built on top of unibest 4 (uni-app + Vue 3): develop once, compile to multiple platforms. It corresponds to the Web operator portal (apps/daxpay-admin) and calls the /app-admin/ APIs to manage merchants, stores, users, apps, and other resources.
| Aspect | Implementation |
|---|---|
| UI library | @wot-ui/ui (wot-ui v2, component prefix wd-*) |
| Lists | z-paging |
| Styling | UnoCSS (carbon icon set) |
| Internationalization | vue-i18n |
Compile targets — H5 / WeChat mini-program / Alipay mini-program / Douyin mini-program / App (Android / iOS)
Page structure — a three-item tabBar (Workbench / Apps / Me) + merchant management subpackage (pages-merchant) + payment configuration subpackage (pages-payment) + system settings subpackage (pages-system)
Internationalization — 10 locales on all ends; mini-program builds include only Chinese and English via conditional compilation (Traditional Chinese / Japanese / Korean / ASEAN languages are bundled only for H5 and App)
Startup and build: see Cross-Platform Apps.
Merchant Cross-Platform App dax-pay-app-merchant
A management-oriented uni-app application for merchant self-service, a counterpart to dax-pay-app-admin (operator end) on the same stack (unibest 4 + wot-ui v2). Merchants use it to manage their own orders, stores, users, apps, and payment configuration.
| Aspect | Implementation |
|---|---|
| UI library | @wot-ui/ui (wot-ui v2, component prefix wd-*) |
| Lists | z-paging |
| Styling | UnoCSS (carbon icon set) |
| Internationalization | vue-i18n |
Compile targets — H5 / WeChat mini-program / Alipay mini-program / Douyin mini-program / App (Android / iOS)
Page structure — a three-item tabBar (Workbench / Apps / Me) + authentication subpackage + agreement pages (privacy policy / user agreement)
Startup and build: see Cross-Platform Apps.
Cashier Mini-Program dax-pay-mini-cashier
A cashier mini-program for end consumers. The stack is the same as dax-pay-app-admin, but it is positioned as a minimal cashier.
| Aspect | Implementation |
|---|---|
| Compile targets | WeChat mini-program / Alipay mini-program / Douyin mini-program (no App / H5) |
| Pages | Home / authentication / pay / result (4 pages, all with custom navigation) |
| Subpackages | None (minimal) |
| Internationalization | Chinese and English only |
Differences from dax-pay-app-admin — the latter is a full-featured operator management app (30+ pages); the former is a minimal cashier for end consumers, with no tabBar, no subpackages, and a trimmed dependency set.
Startup: pnpm run dev:mp-weixin (WeChat mini-program by default)