Sign in
Thanh toán và rút tiền/Payment API

Payment API

Tạo và quản lý các phiên thanh toán tiền điện tử với Payment API của 2328.io.

Payment API cho phép bạn tạo phiên thanh toán, chuyển hướng khách hàng đến trang checkout được hosted và theo dõi trạng thái thanh toán.

Tạo thanh toán

Tạo một phiên thanh toán và trả về URL để khách hàng thanh toán.

Tham số yêu cầu

FieldTypeRequiredDescriptionValues
amountdecimalyesSố tiền thanh toán theo đơn vị tiền tệ, ví dụ 100.00
currencystringyesTiền pháp định (USD, EUR, RUB, …) hoặc tiền điện tử (USDT, TRX, BTC, …)
order_idstringyesID đơn hàng của bạn, ví dụ ORDER-12345 (tối đa 128 ký tự)
to_currencystringnoTiền điện tử được chọn trước
networkstringno*Mã mạng (bắt buộc nếu to_currency được đặt hoặc currency là tiền điện tử)
url_returnstringnoURL chuyển hướng sau khi thanh toán, ví dụ https://your-site.com/return
url_successstringnoPhương án thay thế cho url_return
url_callbackstringyesURL nhận thông báo webhook, ví dụ https://your-site.com/webhook
invite_codestringnoMã người giới thiệu
fee_splitdecimalnoTỷ lệ phí merchant chuyển sang cho người trả, 0–100 (%). 0 = merchant trả toàn bộ, 100 = người trả gánh toàn bộ. Ghi đè cài đặt cấp project. Ví dụ: 30 (người trả gánh 30% phí).
price_markupdecimalnoPhụ phí hoặc chiết khấu trên số tiền hóa đơn, −99 đến 100 (%). Ghi đè cài đặt cấp project. Ví dụ: 5 (+5%) hoặc -10 (giảm 10%).
descriptionstringnoMô tả hóa đơn tùy chọn (tối đa 200 ký tự). Hiển thị cho người trả trên trang thanh toán. Ví dụ: Premium plan — Order #12345.
ttl_secondsintnoThời gian sống của hóa đơn tính bằng giây, từ 300 (5 phút) đến 86400 (24 giờ). Sau khoảng thời gian này hóa đơn hết hạn và không thể thanh toán được nữa. Mặc định: 3600 (1 giờ). Ví dụ: 3600.

Phản hồi

JSON
{
  "state": 0,
  "result": {
    "uuid": "abc123-def456-...",
    "order_id": "ORDER-12345",
    "amount": "100.00",
    "currency": "USD",
    "amount_usd": "100.00",
    "exchange_rate": null,
    "url": "https://2328.io/pay/abc123-def456-...",
    "tg_deeplink": "https://t.me/my2328bot?start=pay_abc123-def456-...",
    "expires_at": "2026-01-11T21:00:00Z",
    "created_at": "2026-01-11T20:00:00Z",
    "payer_currency": "USDT",
    "payer_amount": "100.50",
    "network": "TRX-TRC20",
    "address": "TXYZabc123...",
    "payment_status": "check",
    "txid": null,
    "payment_amount": null,
    "qr": "data:image/png;base64,iVBORw0..."
  }
}
  • Chuyển hướng khách hàng đến result.url để hoàn tất thanh toán.
  • tg_deeplink — deeplink Telegram bot để thanh toán qua Telegram MiniApp.
  • qr — QR code mã hóa Base64 (data URI) của địa chỉ nạp tiền. Có giá trị khi địa chỉ đã được gán (khi network được đặt cùng với to_currency, hoặc khi currency là tiền điện tử); ngược lại là null.
  • txid, payment_amountnull cho đến khi khách hàng trả tiền. Được điền vào sau khi giao dịch được phát hiện trên chuỗi. Lắng nghe webhook payment_status: paid để biết thời điểm.
  • exchange_ratenull nếu việc quy đổi chưa áp dụng được (ví dụ tỷ giá fiat → crypto chưa được chốt). Được điền vào khi đã chọn được tiền của người trả.
Credentials
RequestPOST/v1/payment
curl -X POST https://api.2328.io/api/v1/payment \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.

Thanh toán được lưu trữ, H2H, và số lượng tiền điện tử chính xác

Cùng một điểm cuối hỗ trợ ba kiểu hóa đơn khác nhau. Chọn một cách có chủ đích; không trộn lẫn ngữ nghĩa số lượng của chúng.

Thanh toán được lưu trữ với lựa chọn người thanh toán

Gửi amount, currency, order_id, và url_callback, nhưng bỏ qua to_currencynetwork. Phản hồi chứa result.url; address, qr, và đôi khi các trường người thanh toán vẫn null cho đến khi người thanh toán chọn hướng trên trang được lưu trữ.

JSON
{
  "amount": "125.00",
  "currency": "EUR",
  "order_id": "ORDER-2026-1042",
  "url_callback": "https://merchant.example/webhooks/2328",
  "url_return": "https://merchant.example/orders/ORDER-2026-1042"
}

Hóa đơn H2H trực tiếp

Gửi cả to_currencynetwork. 2328.io tạo hóa đơn blockchain trong quá trình gọi API, vì vậy một phản hồi thành công có thể được hiển thị trong trang thanh toán của bạn mà không cần chuyển hướng khách hàng.

JSON
{
  "amount": "100.00",
  "currency": "USD",
  "to_currency": "USDT",
  "network": "TRX-TRC20",
  "order_id": "ORDER-2026-1043",
  "url_callback": "https://merchant.example/webhooks/2328"
}

Hiển thị các giá trị này chính xác như được trả về:

  • payer_amountpayer_currency — hướng dẫn thanh toán;
  • networkaddress — điểm đến duy nhất cho hóa đơn này;
  • qr — một URI dữ liệu cho cùng địa chỉ;
  • expires_at — hạn chót của hóa đơn;
  • url — một phương án dự phòng hữu ích được lưu trữ khi trang thanh toán tùy chỉnh không thể hoàn tất.

Không bao giờ tạo hoặc thay thế một địa chỉ, tái sử dụng địa chỉ từ hóa đơn khác, hoặc tính toán payer_amount từ giá công khai. Phản hồi API là có thẩm quyền.

Hóa đơn cho một số tiền crypto chính xác

Đặt tiền điện tử vào currency khi chính hóa đơn được định giá bằng crypto:

JSON
{
  "amount": "25.000000",
  "currency": "USDT",
  "network": "TRX-TRC20",
  "order_id": "ORDER-2026-1044",
  "url_callback": "https://merchant.example/webhooks/2328"
}

Giá trị crypto yêu cầu được giữ nguyên trong payer_currency / payer_amount. Dịch vụ cũng có thể duy trì giá trị USD nội bộ cho mục kế toán và trường tỷ giá; không thay thế hướng dẫn crypto chính xác đó bằng giá trị này. Giữ nguyên chuỗi số thập phân trả về, bao gồm cả số thập phân cuối.

Đối với một loại tiền điện tử chỉ có một mạng được hỗ trợ, mạng có thể được chọn tự động. Vẫn nên cung cấp network một cách rõ ràng để có sự tích hợp xác định. Đối với các tài sản đa mạng như stablecoin, luôn luôn gửi nó.

Tính đơn nhất và các lần thử lại

order_id áp dụng cho dự án thương gia đã xác thực và đóng vai trò như khóa đơn nhất khi tạo. Nếu một khoản thanh toán đã tồn tại, API sẽ trả về phiên đó cùng với state: 0.

Một lần thử lại với cùng order_idnot nghĩa là “cập nhật hóa đơn này.” Các trường thay đổi về số tiền, tiền tệ, callback, đánh dấu thêm, TTL hoặc hướng có thể bị bỏ qua vì phiên hiện tại được trả về. Lưu giữ yêu cầu đầu tiên và từ chối các lần thử lại xung đột trong ứng dụng của bạn.

Thuật toán tạo được khuyến nghị:

  1. Chèn nỗ lực thanh toán cục bộ của bạn và order_id duy nhất vào một giao dịch cơ sở dữ liệu.
  2. Gửi yêu cầu API đã ký.
  3. Lưu lại uuid được trả về và phản hồi đầy đủ.
  4. Nếu kết quả HTTP bị mất, thử lại yêu cầu giống hệt hoặc truy vấn /v1/payment/info bằng order_id.
  5. Không bao giờ tạo đơn hàng cục bộ thứ hai chỉ vì yêu cầu từ phía trên bị hết thời gian.

Các trường hợp thanh toán đặc biệt

Tình huốngXử lý chính xác
address / qrnullHướng người trả tiền chưa được khởi tạo. Chuyển hướng đến url, hoặc tạo hóa đơn H2H mới được chỉ định chính xác với một order_id mới.
Lỗi xác thực HTTP 400Đọc trường cấp errors; không thử lại với dữ liệu đầu vào không thay đổi.
HTTP 429Thử lại với độ trễ lũy thừa kèm nhiễu (jittered exponential backoff) và giữ nguyên order_id.
HTTP 503 / direction_disabledLàm mới /v1/directions; tạm thời ẩn hướng hoặc thử lại sau.
Yêu cầu của client hết thời gian chờXem kết quả là không xác định. Tra cứu bằng order_id trước khi tạo bất cứ thứ gì khác.
underpaid_checkLưu sự kiện một phần và chờ nạp thêm hoặc trạng thái sau. Không ghi có hai lần khi có thêm txid.
underpaidTrạng thái thanh toán thiếu cuối cùng. Áp dụng chính sách hoàn thành/kiểm tra thủ công đã cấu hình cho số tiền thực tế được ghi có.
overpaidThanh toán thành công với số dư dư thừa. Thực hiện một cách idempotent và giữ số tiền thực tế để đối chiếu/chính sách hoàn trả.
aml_lockKhông thực hiện hoặc giải phóng tiền tự động; chuyển hướng đến quy trình tuân thủ/hỗ trợ.
cancelHóa đơn đã hết hạn hoặc bị hủy. Không suy luận rằng việc chuyển khoản chậm trên chuỗi là không thể; đối chiếu bất kỳ sự kiện sau này nào với bộ phận hỗ trợ.

URL trả về của trình duyệt chỉ để điều hướng. Khách hàng có thể mở nó mà không cần thanh toán, đóng nó sau khi thanh toán, hoặc phát lại sau. Chỉ trạng thái API/webhook đã được xác minh mới có thể xử lý đơn hàng của thương nhân.

Thông tin thanh toán

Lấy trạng thái thanh toán hiện tại theo uuid hoặc order_id.

Tham số yêu cầu

FieldTypeRequiredDescriptionValues
uuidstringyes*UUID của thanh toán (lấy từ result.uuid khi tạo)
order_idstringyes*ID đơn hàng của bạn

Phải cung cấp ít nhất một trong uuid hoặc order_id.

RequestPOST/v1/payment/info
curl -X POST https://api.2328.io/api/v1/payment/info \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.

Danh sách thanh toán

Lấy danh sách tất cả thanh toán có hỗ trợ lọc và phân trang.

Tham số yêu cầu

FieldTypeRequiredDescriptionValues
statusstringnoLọc theo trạng thái thanh toán (xem References)
date_fromdatenoNgày bắt đầu (YYYY-MM-DD), ví dụ 2026-01-01
date_todatenoNgày kết thúc (YYYY-MM-DD), ví dụ 2026-01-31
pageintnoSố trang, mặc định 1
per_pageintnoSố mục mỗi trang, mặc định 15, tối đa 5000
RequestPOST/v1/payment/list
curl -X POST https://api.2328.io/api/v1/payment/list \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.