Tích hợp Bên thứ ba
BANA tích hợp với dịch vụ ngoài qua các component IGNIS module hóa. Mỗi tích hợp là một component khép kín, gắn vào một service application. Cả bốn hiện đều được triển khai với VNPAY là provider duy nhất.
Các tích hợp hiện có
| Module | Package | Mục đích | Provider |
|---|---|---|---|
| MQ-Pay | @nx/mq-pay | Xử lý thanh toán đa provider | VNPAY (+ tiền mặt/ngân hàng nội bộ) |
| IIAPI | @nx/iiapi | Phát hành hóa đơn điện tử (viiAPI) | VNPAY |
| T-VAN | @nx/t-van | Tra cứu thuế & truy vấn hóa đơn | VNPAY → CQT |
| MQ-SMS | @nx/mq-sms | Cổng SMS giao dịch | VNPAY |
Các package này nằm trong
third-parties/và được dùng như thư viện (gắn qua component), không triển khai như service độc lập.
Kiến trúc tích hợp
Mọi tích hợp theo cùng một hình dạng component IGNIS:
Mẫu cấu hình chung
Bind options trong preConfigure(), rồi load component (ví dụ mq-pay):
typescript
import { MQPayComponent, BindingKeys, IOptions } from '@nx/mq-pay';
class MyApplication extends BaseApplication {
preConfigure() {
this.bind<IOptions>({ key: BindingKeys.OPTIONS }).toValue({
enableControllers: true, // tự đăng ký REST endpoint
clients: [{ name: 'default', provider: 'VNPAY_QR_MMS' /* cấu hình provider */ }],
});
this.component(MQPayComponent);
}
}Biến môi trường
Mỗi tích hợp dùng một prefix riêng:
| Tích hợp | Prefix | Ví dụ |
|---|---|---|
| MQ-Pay | APP_ENV_MQ_PAY_* | APP_ENV_MQ_PAY_POSTGRES_HOST |
| IIAPI | APP_ENV_IIAPI_* | APP_ENV_IIAPI_API_KEY |
| T-VAN | APP_ENV_TVAN_* | APP_ENV_TVAN_TAX_CODE |
Truy cập service tích hợp
Qua dependency injection
typescript
import { inject } from '@venizia/ignis';
import { PaymentService } from '@nx/mq-pay';
export class SaleOrderService {
constructor(
@inject({ key: 'services.PaymentService' })
private paymentService: PaymentService,
) {}
async checkout(orderId: string) {
return this.paymentService.makePayment({
source: { type: 'SaleOrder', id: orderId },
payment: { provider: 'VNPAY_QR_MMS', total: 100000 },
});
}
}Qua AppRegistry (Redis, provider)
typescript
import { AppRegistry } from '@nx/mq-pay';
const registry = AppRegistry.getInstance();
const redis = registry.getRedis({ name: 'redis:@nx/mq-pay/redis-queue' });
const provider = registry.getPaymentProvider({ name: 'VNPAY_QR_MMS' });