Skip to content

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ó

ModulePackageMục đíchProvider
MQ-Pay@nx/mq-payXử lý thanh toán đa providerVNPAY (+ tiền mặt/ngân hàng nội bộ)
IIAPI@nx/iiapiPhát hành hóa đơn điện tử (viiAPI)VNPAY
T-VAN@nx/t-vanTra cứu thuế & truy vấn hóa đơnVNPAY → CQT
MQ-SMS@nx/mq-smsCổng SMS giao dịchVNPAY

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ợpPrefixVí dụ
MQ-PayAPP_ENV_MQ_PAY_*APP_ENV_MQ_PAY_POSTGRES_HOST
IIAPIAPP_ENV_IIAPI_*APP_ENV_IIAPI_API_KEY
T-VANAPP_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' });

Bước tiếp theo

  • MQ-Pay - xử lý thanh toán (VNPAY QR / Phone POS / Smart POS, tiền mặt/ngân hàng nội bộ)
  • IIAPI - phát hành hóa đơn điện tử
  • T-VAN - tra cứu thuế & truy vấn hóa đơn
  • MQ-SMS - SMS giao dịch

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