v26 Standard
← Về trang chủ
Hotline: (028) 710 66 777

Tài liệu nhà phát triển

Chào mừng bạn đến với cổng thông tin dành cho lập trình viên tích hợp vào DIP Payment Gateway. Tài liệu này cung cấp các thông số kỹ thuật, hướng dẫn cấu hình và mẫu mã nguồn để bạn có thể tích hợp tính năng thanh toán QR tự động vào hệ thống ERP, Web hoặc App của mình.

DIP Payment Gateway là giải pháp quản trị dòng tiền vô hình, cho phép dòng tiền đi thẳng từ người mua về tài khoản ngân hàng của người bán mà không qua tài khoản trung gian, đảm bảo an toàn tuyệt đối.

Luồng hoạt động hệ thống

BANK (NGÂN HÀNG) DIP GATEWAY Processing Engine CLIENT SYSTEM 1. Notify Money In 2. Webhook Callback

Sơ đồ: Quy trình xử lý thông báo gạch nợ tự động qua DIP Gateway

Quy trình 7 bước tích hợp

Để hệ thống của bạn (App/Web/ERP) có thể thực hiện thanh toán và gạch nợ tự động, vui lòng thực hiện đúng theo các bước sau:

1
Khởi tạo Workplace
Đăng ký tài khoản công ty (Tenant) trên Portal để quản lý tập trung.
2
Xác thực hệ thống
Lấy mã JWT Auth hoặc TenantKey để bắt đầu gọi các API hệ thống.
3
Thiết lập Merchant
Tạo từng điểm bán/tòa nhà cụ thể cần thu tiền QR tự động.
4
Liên kết Ngân hàng
Nối tài khoản ngân hàng thực của Merchant vào Gateway qua HostedLink.
5
Ký quỹ SaaS
Nạp một khoản nhỏ (8% VAT) để duy trì dịch vụ gạch nợ tự động.
6
Tích hợp tạo QR
Sử dụng API tạo mã QR động kèm nội dung thanh toán định danh.
7
Cấu hình Webhook
Nhận thông báo IPN tức thì và tự động gạch nợ hóa đơn phía ERP/App.

1. Xác thực API (Authentication)

DIP Gateway sử dụng hai cơ chế xác thực riêng biệt tùy theo mục đích sử dụng của bạn:

🚀 Lớp giao dịch (Transaction)
Dùng cho các ứng dụng cần tạo mã QR thanh toán nhanh cho khách hàng.
🔑 X-Api-Key + RSA Signature
✅ Không yêu cầu JWT Token
⚙️ Lớp quản trị (Management)
Dùng cho việc tra soát, báo cáo, điều chuyển tiền và quản lý Merchants.
🔑 Bearer JWT Token
⚠️ Cần gọi API Đăng nhập trước
🔑

Lấy mã truy cập (Cho lớp quản trị)

JWT Auth
POST /api/auth/login

Sử dụng Email và Password của tài khoản Admin/User đã đăng ký trên Portal để lấy Token.

{
  "Email": "admin@your-company.com",
  "Password": "••••••••"
}

2. Thiết lập Merchant & Ngân hàng

Trước khi tạo thanh toán, bạn cần cấu hình điểm bán (Merchant) và liên kết tài khoản ngân hàng thực tế để nhận tiền.

🏢

Khởi tạo Merchant

X-Api-Key Required

Bạn có thể tạo Merchant mới thông qua giao diện Portal hoặc API quản trị. Hệ thống sẽ cấp một cặp ApiKeySecretKey riêng biệt cho từng Merchant.

Mẹo: Trong môi trường Sandbox, hãy sử dụng Merchant mặc định đã được cấu hình sẵn để test nhanh.
🏦

Liên kết tài khoản ngân hàng

Secure BankUI

Sử dụng tính năng BankHub trong Portal để quét mã QR liên kết ứng dụng ngân hàng (MB, VPBank, OCB...). Sau khi liên kết, Gateway sẽ tự động nhận được thông báo mỗi khi có biến động số dư.

3. Đăng ký Merchant tự động (Cho Đối tác phần mềm)

🚀
Dành cho Enterprise: Nếu bạn là đơn vị cung cấp phần mềm Quản lý tòa nhà và muốn khách hàng của mình kích hoạt thanh toán ngay trên App của bạn, hãy dùng API này.

Cơ chế này sử dụng X-Platform-Auth (Header) và TenantKey (JSON Body) để xác thực 2 lớp, đảm bảo an toàn tuyệt đối ngay cả khi lộ mã công ty.

⚙️

API Tự động Onboarding Merchant

Auth by TenantKey
POST /api/merchants/register

Required Headers:

HeaderMô tả
Content-Typeapplication/json
X-Platform-AuthMã xác thực hệ thống (Cấp khi đăng ký Partner)

Request JSON:

{
  "Name": "Cửa hàng Chi nhánh Quận 1",
  "TenantKey": "EXT_A1B2C3D4",
  "NotifyUrl": "https://api.your-app.com/webhook"
}

Response Success (200): Trả về các khóa bảo mật riêng cho tòa nhà này và link liên kết ngân hàng.

{
  "success": true,
  "data": {
    "ApiKey": "GA_XYZ789...",
    "SecretKey": "ecc012...",
    "HostedLinkUrl": "https://bankhub.dip.vn/link/...",
    "PrivateKey": "..."
  }
}
Lấy Link liên kết
Khách hàng gọi API để nhận về HostedLinkUrl duy nhất.
Xác thực phía người dùng
Mở link trong WebView để người dùng thực hiện liên kết ngân hàng.
Hoàn tất tự động
Hệ thống của bạn nhận Webhook báo thành công và bắt đầu nhận tiền.

4. Khởi tạo thanh toán (Tạo QR Code)

Đây là API quan trọng nhất để ứng dụng của bạn yêu cầu DIP Gateway sinh mã QR thanh toán động cho khách hàng.

📱

API Tạo lệnh thanh toán mới

X-Api-Key + RSA
POST /api/payments/create

Yêu cầu Headers:

HeaderGiá trị
X-Api-KeyAPI Key được cấp trong trang quản trị Merchant.
X-TimestampThời gian hiện tại (Unix timestamp - Đơn vị: Giây).
X-SignatureChữ ký điện tử RSA (Xem mục Bảo mật).

Request Body (JSON):

TrườngKiểuYêu cầuMô tả
OrderCodestringBắt buộcMã đơn hàng duy nhất trong hệ thống của bạn.
AmountdecimalBắt buộcSố tiền thanh toán (VND).
ContentstringBắt buộcNội dung hiển thị cho khách hàng.

Response (Success 200):

{
  "PaymentCode": "PMT1715077421234",
  "OrderCode": "INV-1002",
  "Amount": 500000.0,
  "QrContent": "00020101021238580010A000000727...",
  "QrLink": "https://img.vietqr.io/image/ICB-123456...png?addInfo=PMT1715",
  "Deeplink": "https://bankhub.dip.vn/pay/PMT1715077421234"
}

🚨 Lưu ý cho App Mobile: Hãy sử dụng trường Deeplink để mở cổng thanh toán. Link này đã được tối ưu hóa để tự động điều hướng và mở App ngân hàng, điền sẵn 100% thông tin thanh toán cho người dùng.

5. Kiểm tra trạng thái giao dịch

Dùng để truy vấn trạng thái thanh toán của một hóa đơn thủ công (Polling) nếu cần thiết.

🔍

Truy vấn trạng thái đơn hàng (Polling)

X-Api-Key
GET /api/payments/status?paymentCode={code}

Dữ liệu yêu cầu:

Tham số / HeaderKiểuMô tả
X-Api-KeyHeaderKhóa định danh Merchant (Bắt buộc).
paymentCodeQueryMã thanh toán do Gateway cấp lúc tạo đơn.

Kết quả trả về (JSON):

{
  "Status": "COMPLETED"
}

Danh sách Trạng thái:

Mã trạng tháiÝ nghĩa
COMPLETEDThành công. Tiền đã về tài khoản và hệ thống đã ghi nhận.
PENDINGChưa thanh toán. Đang chờ khách hàng quét mã QR.
FAILEDThất bại. Giao dịch bị lỗi hoặc đã quá thời gian chờ.

6. Webhook thông báo kết quả (Gạch nợ tự động)

🚨 Khuyên dùng: Thay vì liên tục Polling API (mục 5), bạn nên cấu hình Webhook để nhận thông báo tức thời ngay khi khách chuyển khoản thành công.
📦

Cấu trúc Gói tin Webhook PayLoad

Webhook System

Khi có tiền về, DIP Gateway sẽ bắn nội dung JSON sau về hệ thống của bạn kèm Header X-Signature:

TrườngKiểuMô tả
order_codestringMã đơn hàng phía Merchant gửi lúc tạo.
payment_codestringMã thanh toán định danh phía Gateway.
amountdecimalSố tiền thực nhận tại ngân hàng (Đơn vị: VNĐ).
transaction_idstringMã giao dịch thực tế trên ngân hàng (FT...).
statusstringMã trạng thái giao dịch (PAID).
{
  "merchant_id": 105,
  "order_code": "INV-2024-001",
  "payment_code": "PMT1715077421",
  "amount": 1500000.0,
  "status": "PAID",
  "transaction_id": "FT24042399182"
}

7. Cơ chế bảo mật & Chữ ký số

Để đảm bảo an toàn, các API của DIP Payment Gateway yêu cầu ký gói tin hoặc xác thực mã băm.

🔒
Lưu ý bảo mật RSA: Để đảm bảo an toàn tuyệt đối, DIP Gateway yêu cầu bạn phải ký số (Sign) vào các yêu cầu giao dịch quan trọng.

Hướng dẫn Ký số RSA (X-Signature)

Chuỗi cần ký được tạo bằng cách nối Body và Timestamp bằng dấu gạch đứng: {body_content}|{timestamp}.

🔑
Quan trọng về định dạng RSA: DIP Gateway sử dụng định dạng XML String (.NET Standard). Nếu bạn đang sử dụng OpenSSL/PEM, vui lòng chuyển đổi sang XML trước khi upload khóa lên hệ thống.

Hướng dẫn Xác thực Webhook (X-Signature)

Mọi Webhook từ DIP Gateway đều gửi kèm Header X-Signature chứa mã băm HMAC-SHA256 của gói tin JSON. Bạn nên kiểm tra mã này bằng công thức:

Dùng SecretKey làm khóa băm và RawBody làm dữ liệu đầu vào.

Code mẫu C#:
using (var hmac = new HMACSHA256(keyBytes)) {
    var hash = hmac.ComputeHash(bodyBytes);
    return BitConverter.ToString(hash).Replace("-", "").ToLower();
}

8. Nạp tiền & Quản lý ký quỹ (SaaS Billing)

Nhằm đảm bảo dịch vụ thông báo (SMS/Webhook) hoạt động ổn định, mỗi Merchant cần duy trì một số dư ký quỹ nhất định. Hệ thống sử dụng mô hình Ký quỹ trước. Bạn cần nạp tiền vào ví của Merchant để hệ thống có thể khấu trừ phí giao dịch tự động.

Cơ chế phí & Thuế:
  • Phí giao dịch: Cố định 1.000 VNĐ cho mỗi giao dịch thành công (không trừ thêm thuế tại bước này).
  • Thuế VAT: Thuế 8% chỉ áp dụng một lần khi bạn thực hiện Nạp tiền ký quỹ vào hệ thống.

* Đơn vị tiền tệ áp dụng thống nhất trên toàn hệ thống là Việt Nam Đồng (VNĐ).

💳

Nạp tiền vào ví (Top-up)

1. Truy cập Sandbox hoặc Admin Portal.
2. Chọn "Nạp tiền ký quỹ".
3. Quét mã QR để chuyển khoản. Hệ thống sẽ tự động cộng số dư ví ngay khi giao dịch được ghi nhận thành công.

9. Bảng mã lỗi (Error Codes)

Danh sách các mã phản hồi từ hệ thống để bạn xử lý logic phía ứng dụng.

Mã lỗiMô tảCách xử lý
AUTH_FAILEDSai Token hoặc API Key.Kiểm tra lại Header Authorization.
INVALID_SIGNATUREChữ ký RSA không hợp lệ.Kiểm tra lại quy trình ký RSA.
INSUFFICIENT_BALANCEQuỹ ký quỹ không đủ để thực hiện GD.Nạp thêm tiền vào ví Merchant.
ORDER_CONFLICTMã đơn hàng đã tồn tại.Sử dụng OrderCode duy nhất.