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.
Luồng hoạt động hệ thống
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. 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ấy mã truy cập (Cho lớp quản trị)
JWT AuthSử 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 RequiredBạ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 ApiKey và SecretKey riêng biệt cho từng Merchant.
Liên kết tài khoản ngân hàng
Secure BankUISử 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)
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 TenantKeyRequired Headers:
| Header | Mô tả |
|---|---|
| Content-Type | application/json |
| X-Platform-Auth | Mã 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": "... "
}
}
HostedLinkUrl duy nhất.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 + RSAYêu cầu Headers:
| Header | Giá trị |
|---|---|
| X-Api-Key | API Key được cấp trong trang quản trị Merchant. |
| X-Timestamp | Thời gian hiện tại (Unix timestamp - Đơn vị: Giây). |
| X-Signature | Chữ ký điện tử RSA (Xem mục Bảo mật). |
Request Body (JSON):
| Trường | Kiểu | Yêu cầu | Mô tả |
|---|---|---|---|
| OrderCode | string | Bắt buộc | Mã đơn hàng duy nhất trong hệ thống của bạn. |
| Amount | decimal | Bắt buộc | Số tiền thanh toán (VND). |
| Content | string | Bắt buộc | Nộ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-KeyDữ liệu yêu cầu:
| Tham số / Header | Kiểu | Mô tả |
|---|---|---|
| X-Api-Key | Header | Khóa định danh Merchant (Bắt buộc). |
| paymentCode | Query | Mã 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 |
|---|---|
| COMPLETED | Thành công. Tiền đã về tài khoản và hệ thống đã ghi nhận. |
| PENDING | Chưa thanh toán. Đang chờ khách hàng quét mã QR. |
| FAILED | Thấ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)
Cấu trúc Gói tin Webhook PayLoad
Webhook SystemKhi 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ường | Kiểu | Mô tả |
|---|---|---|
| order_code | string | Mã đơn hàng phía Merchant gửi lúc tạo. |
| payment_code | string | Mã thanh toán định danh phía Gateway. |
| amount | decimal | Số tiền thực nhận tại ngân hàng (Đơn vị: VNĐ). |
| transaction_id | string | Mã giao dịch thực tế trên ngân hàng (FT...). |
| status | string | Mã 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.
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}.
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.
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.
- 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ỗi | Mô tả | Cách xử lý |
|---|---|---|
AUTH_FAILED | Sai Token hoặc API Key. | Kiểm tra lại Header Authorization. |
INVALID_SIGNATURE | Chữ ký RSA không hợp lệ. | Kiểm tra lại quy trình ký RSA. |
INSUFFICIENT_BALANCE | Quỹ ký quỹ không đủ để thực hiện GD. | Nạp thêm tiền vào ví Merchant. |
ORDER_CONFLICT | Mã đơn hàng đã tồn tại. | Sử dụng OrderCode duy nhất. |