Cấu hình
1. Biến môi trường
Nguồn:
EnvironmentKeystrong@nx/core/src/common/environments.ts+@nx/mq-pay/src/common/environments.ts.
Core runtime
| Tên | Kiểu | Mặc định | Bắt buộc | Mô tả |
|---|---|---|---|---|
APP_ENV_PORT | number | 3000 | Cổng HTTP listen | |
APP_ENV_HOST | string | 0.0.0.0 | Địa chỉ bind | |
APP_ENV_BASE_PATH | string | /v1/api/payment | Tiền tố route | |
APP_ENV_NODE_ID | number | — | ✓ | Snowflake worker ID — 4 (FULL) / 8 (API) / 91+ (WORKER) |
APP_ENV_LOG_LEVEL | info|debug|warn|error | info | — | |
APP_ENV_NODE_ENV | string | development | dotenv-flow loader | |
RUN_MODE | migrate|startup | startup kích hoạt setup MQ-Pay component; non-startup bỏ qua MQ-Pay (ví dụ trong migrations) |
Triển khai theo Mode
| Tên | Kiểu | Mặc định | Bắt buộc | Mô tả |
|---|---|---|---|---|
APP_ENV_MQ_PAY_MODE | FULL|API|WORKER | FULL | Điều khiển đăng ký controller + worker. Xem Kiến trúc §3 |
Database
| Tên | Kiểu | Mặc định | Bắt buộc | Mô tả |
|---|---|---|---|---|
APP_ENV_DB_URL | string | — | ✓ | URL kết nối PostgreSQL |
APP_ENV_DB_POOL_MAX | number | 10 | — |
Redis (BullMQ + cache)
| Tên | Kiểu | Mặc định | Bắt buộc | Mô tả |
|---|---|---|---|---|
APP_ENV_REDIS_HOST | string | — | ✓ | BullMQ yêu cầu Redis (khi MQ-Pay được kích hoạt) |
APP_ENV_REDIS_PORT | number | 6379 | — | |
APP_ENV_REDIS_PASSWORD | string | — | — | |
APP_ENV_REDIS_DB | number | 0 | — | |
APP_ENV_WEBSOCKET_REDIS_MODE | SINGLE|CLUSTER | SINGLE | Mode Redis cho WS emitter |
Mã hóa
| Tên | Kiểu | Mặc định | Bắt buộc | Mô tả |
|---|---|---|---|---|
APP_ENV_APPLICATION_SECRET | string | — | ✓ | Khóa AES-256-GCM cho CryptoUtility; phải khớp giữa tất cả các pod |
Xác thực
| Tên | Kiểu | Mặc định | Bắt buộc | Mô tả |
|---|---|---|---|---|
APP_ENV_JWKS_URL | url | — | ✓ | Endpoint JWKS của identity service |
2. Feature Flags
| Flag | Lưu trữ | Mặc định | Mô tả |
|---|---|---|---|
Provider enable | Configuration.tValue | true | Cờ enable theo từng nhà cung cấp (trong JSON config đã mã hóa) |
Provider enableController | Configuration.tValue | true | Có đăng ký HTTP controller của nhà cung cấp hay không |
Provider isProduction | Configuration.tValue | false | Chuyển đổi giữa URL sandbox và prod của VN Pay |
3. Dữ liệu Seed
3 migration process trong
src/migrations/processes/. Chạy khi bootstrap.
| File | Phạm vi | Ghi chú |
|---|---|---|
payment-0001-seed-vnpay-qr-mms-configuration.ts | Cấu hình nhà cung cấp VNPAY QR MMS | Mã hóa { enable, isDefault, enableController, appId: 'MERCHANT', masterMerchantCode: 'A000000775', isProduction: false } và lưu trong Configuration (code: VNPAY_QR_MMS, group: INTEGRATION, environment: DEVELOPMENT) |
payment-0002-seed-vnpay-phone-pos-configuration.ts | Cấu hình nhà cung cấp VNPAY PhonePOS | Mã hóa { enable, isDefault: false, enableController, isProduction: false } và lưu tương tự |
payment-0003-seed-permissions.ts | Toàn bộ PaymentPermissions | alwaysRun: true — chạy lại trên mỗi migration. Tổng hợp WebhookConfigPermissions (8 mã CRUD) + 5 bộ từ @nx/mq-pay (Transaction, TransactionItem, PaymentAttempt, PaymentResult, PaymentOperation) |
Credential theo từng merchant KHÔNG được seed — chúng được merchant tạo khi onboarding qua Configuration API hoặc admin UI.
4. Cách payment dùng bảng Configuration
| Loại Configuration | Code | Group | Mã hóa | Nguồn |
|---|---|---|---|---|
| Nhà cung cấp VNPAY QR MMS | VNPAY_QR_MMS | INTEGRATION | tValue (AES-256-GCM) | seed payment-0001 |
| Nhà cung cấp VNPAY PhonePOS | VNPAY_PHONE_POS | INTEGRATION | tValue (AES-256-GCM) | seed payment-0002 |
| Credential thanh toán theo merchant | code per-merchant | INTEGRATION, principalType=MERCHANT, principalId=<merchantId> | credential (AES-256-GCM) | runtime qua getPaymentCredential |
getPaymentCredential truy vấn bảng trực tiếp (bỏ qua CRUD repo) vì cột credential được ẩn khỏi các thao tác đọc CRUD chuẩn.