Skip to content

Tích hợp

1. Sister Service

SisterHướngBề mặtAuthKịch bản lỗi
@nx/sale (payment dispatch)HTTP webhook tới POST /v1/api/sale/webhooks/paymentnone (Cilium network policy)Retry theo WebhookConfig.metadata.maxRetries; dispatch lỗi được log
@nx/sale (initiator) (sale gọi)HTTP — khởi tạo transaction qua controller @nx/mq-payJWTsale xử lý lỗi
@nx/identity (verify)HTTP — JWKS tại /jw-certsnoneCache cục bộ
@nx/identity (Casbin)HTTP — PolicyDefinitionServiceJWTCache Redis
@nx/signalWebSocket emitterbest-effort

2. Hệ thống bên ngoài

Hệ thốngHướngBề mặtAuthGhi chú
VN Pay (QR MMS)HTTPS REST + IPNCredential mã hóa theo merchantNhà cung cấp @nx/mq-pay
VN Pay (PhonePOS)HTTPS REST + IPNTương tự
VN Pay (SmartPOS) (placeholder)HTTPS RESTTương tựProvider đã khai báo, tích hợp đang làm
PostgreSQLDBpassword từ envSchema: mq_pay, Configuration chia sẻ + WebhookConfig
RedisTCPpassword từ envBullMQ queue + cache

3. Luồng cross-service quan trọng

3.1 Sale → Payment → Provider → Sale (vòng đời đầy đủ)

3.2 Đăng ký webhook subscriber

3.3 Topology triển khai theo Mode

Mỗi pod WORKER phải có APP_ENV_NODE_ID (Snowflake worker ID) duy nhất để tránh xung đột id.

4. Chi tiết cầu nối MQ-Pay

@nx/mq-pay không phải là service riêng — nó là package bên thứ ba được tiêu thụ bởi @nx/payment qua MQPayComponent. Vòng đời:

BướcDiễn ra
BootApplicationPaymentComponent.binding() đọc APP_ENV_MQ_PAY_MODE
ConfigureBuild IMQPayOptions với: mode, credentialGetter, vnpay configs (đã giải mã), eventHandler
RegisterGọi application.component(MQPayComponent)
Boot MQPayComponentXác minh mode; setup Redis/BullMQ; đăng ký TransactionRepository, v.v.; đăng ký có điều kiện controller (FULL/API) và worker (FULL/WORKER)
Đặt event handlerAppRegistry.setEventHandler(WebhookEventHandlerHelper)
RuntimeWorker emit event → AppRegistry.emit → WebhookEventHandlerHelper.handle

AppRegistry là một singleton riêng (KHÔNG phải IGNIS DI) quản lý trạng thái xuyên suốt cho MQ-Pay (Redis, BullMQ, providers, event handler).

5. Tính ổn định của hợp đồng

Bề mặtTính ổn địnhVersioning
Webhook payload (sự kiện mq-pay:*)ổn địnhchỉ thêm
REST WebhookConfig (/webhook-configs)ổn địnhtiền tố URL /v1/
Bảng Configuration (row payment)ổn địnhnamespace code thuộc payment
Endpoint MQ-Payổn địnhtiền tố URL /v1/ (đường dẫn controller thuộc @nx/mq-pay)
Topic WebSocket observation/payment/*ổn địnhchỉ thêm

6. Mối quan tâm xuyên suốt

Mối quan tâmCách xử lý
Tin cậyIPN ký bởi nhà cung cấp (xác minh trong MQ-Pay); webhook đến subscriber ký qua HMAC nếu WebhookConfig.signingMethod được đặt
Mã hóa khi lưuCredential nhà cung cấp mã hóa AES-256-GCM trong Configuration.credential; key từ APP_ENV_APPLICATION_SECRET
Mã hóa khi truyềnTLS tại gateway; lưu lượng nội cluster plaintext
Điều phối ModePod API + WORKER chia sẻ Redis (BullMQ) và PostgreSQL — phải dùng cùng khóa mã hóa
Webhook retryWebhookDispatcherService theo WebhookConfig.metadata.maxRetries (mặc định 3) với exponential backoff

7. Trang liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.