Gói dịch vụ & thanh toán

Chọn gói & tạo hoá đơn

Chủ cửa hàng chọn gói trả phí và chu kỳ, hệ thống tạo hoá đơn chuyển khoản

Chỉ có trên Hubport SaaS

Trên bản cài đặt riêng (máy chủ riêng), endpoint trả HTTP 404 error_saas_mode_inactive.

Endpoint

POST /v1/platformsubscriptions/checkout

Chỉ chủ cửa hàng được gọi (trường is_owner của Gói của tôi). Endpoint tạo một hoá đơn chờ thanh toán (status = open) cho gói đã chọn; gói chỉ được kích hoạt khi Hubport ghi nhận đủ số tiền chuyển khoản của hoá đơn.

Request Body

TênKiểuBắt buộcMô tả
plan_codestringCóMã gói trả phí (trường code trong Danh sách gói). Không phân biệt hoa thường
cyclestringKhôngChu kỳ thanh toán: month hoặc year. Mặc định: month
noncestringKhôngChuỗi ngẫu nhiên khác nhau cho mỗi lần gọi. Nên gửi để request không bị chặn bởi cơ chế chống gửi trùng (HTTP 409 error_idempotent_check_duplicate_found) khi chọn lại cùng gói
{
  "plan_code": "PRO",
  "cycle": "year",
  "nonce": "1760317200123"
}

Response Schema

HTTP 201 - Created (tạo hoá đơn mới) / HTTP 200 (dùng lại hoá đơn đang chờ)

TrườngKiểuMô tả
invoiceobjectInvoice Object cần thanh toán
bank_infoobjectThông tin tài khoản nhận chuyển khoản của Hubport: bank_name, bank_code (tên ngắn ngân hàng dùng cho VietQR, vd MBBank), account_no, account_name, branch
existingbooltrue nếu đã có hoá đơn chờ thanh toán cho đúng gói và chu kỳ này (trả lại hoá đơn cũ, HTTP 200); false nếu vừa tạo hoá đơn mới (HTTP 201)

Workflow & Logic

  1. Kiểm người gọi là chủ cửa hàng.
  2. Kiểm gói: phải đang mở bán công khai và là gói trả phí (không phải gói dùng thử / miễn phí), có giá cho chu kỳ đã chọn. Giá năm = price_year (hoặc price_month * 12 nếu gói không đặt giá năm).
  3. Nếu đã có hoá đơn chờ thanh toán cho đúng gói và chu kỳ → trả lại hoá đơn đó (existing = true).
  4. Ngược lại tạo hoá đơn mới loại new, đồng thời huỷ (void) các hoá đơn mua gói đang chờ khác của cửa hàng.
  5. Chủ cửa hàng quét ảnh invoice.payment_qr_url bằng app ngân hàng, hoặc chuyển khoản số tiền amount_due tới bank_info với nội dung ghi đúng transfer_code của hoá đơn.
  6. Hubport tự đối soát chuyển khoản trong vài giây đến vài phút: đủ tiền thì hoá đơn chuyển paid và gói được kích hoạt; chuyển thiếu thì hoá đơn vẫn open với amount_due là phần còn thiếu. Theo dõi bằng Chi tiết hoá đơn (gọi lại định kỳ, vd 5 giây một lần) hoặc Gói của tôi.

Error Codes

HTTPMã lỗiMô tả
403error_company_owner_requiredNgười gọi không phải chủ cửa hàng
403error_company_requiredPhiên đăng nhập không gắn với công ty nào
404error_saas_mode_inactiveKhông phải Hubport SaaS
409error_idempotent_check_duplicate_foundGửi trùng nội dung request trong thời gian ngắn (dùng nonce khác nhau)
422error_plan_not_foundGói không tồn tại, không mở bán hoặc không phải gói trả phí
422error_cycle_invalidcycle không phải month hoặc year
422error_plan_price_not_setGói chưa có giá cho chu kỳ đã chọn
422error_company_hard_deletedCửa hàng đã bị xoá vĩnh viễn
422error_invoice_create_failedKhông tạo được hoá đơn

Ví dụ

curl -X POST "https://api.hubport.vn/v1/platformsubscriptions/checkout" \
  -H "Authorization: <JWT>" \
  -H "Content-Type: application/json" \
  -d '{"plan_code":"PRO","cycle":"month","nonce":"1760317200123"}'
{
  "invoice": {
    "id": 1201,
    "company_id": 12,
    "subscription_id": 0,
    "kind": "new",
    "plan_id": 3,
    "plan_code": "PRO",
    "cycle": "month",
    "number": "HP-202610-0012",
    "transfer_code": "HPK7M2Q9XA",
    "amount": 499000,
    "amount_paid": 0,
    "amount_refunded": 0,
    "amount_due": 499000,
    "payment_qr_url": "https://qr.sepay.vn/img?acc=0000000000&bank=MBBank&amount=499000&des=HPK7M2Q9XA",
    "status": "open",
    "overdue": false,
    "lines": [
      {
        "type": "subscription",
        "description": "Gói Pro (month)",
        "plan_id": 3,
        "plan_code": "PRO",
        "cycle": "month",
        "cycles": 1,
        "quantity": 1,
        "unit_price": 499000,
        "amount": 499000,
        "period_start": 0,
        "period_end": 0
      }
    ],
    "period_start": 0,
    "period_end": 0,
    "due_at": 1760922000,
    "paid_at": 0,
    "date_created": 1760317200,
    "date_modified": 1760317200
  },
  "bank_info": {
    "bank_name": "Ngân hàng ABC",
    "bank_code": "MBBank",
    "account_no": "0000000000",
    "account_name": "TEN CHU TAI KHOAN",
    "branch": "Chi nhánh XYZ"
  },
  "existing": false
}

On this page