Skip to content
Ngôn ngữ: Tiếng Việt

API cho nhà phát triển

Gửi doanh số và dữ liệu tùy chỉnh đến LinkHarbor

Cập nhật 1 tháng 11, 2026 7 phút đọc

Dùng sale callback để gán doanh số từ cửa hàng cho lượt nhấp liên kết, và “Custom (API)” để gửi dữ liệu trực tiếp từ công cụ của bạn lên trang.

LinkHarbor cũng nhận dữ liệu từ bên ngoài. Với hai trường hợp có các endpoint riêng với secret riêng – bạn không cần khóa API cho chúng: sale callback báo doanh số từ cửa hàng, để bạn thấy trong thống kê liên kết nào mang lại doanh thu. Tích hợp “Custom (API)” đưa dữ liệu trực tiếp từ công cụ của bạn lên trang dưới dạng widget và có thể kích hoạt thông báo đẩy.

Sale callback: gán doanh số

Click ID (lt_click_id), việc gán và báo cáo phối hợp với nhau thế nào được giải thích trong Gán chuyển đổi và doanh số; ở đây bạn tìm thấy mọi trường và phản hồi dành cho nhà phát triển. Tóm lại: khi LinkHarbor chuyển hướng một lượt nhấp được đếm đến đích http hoặc https, nó gắn tham số lt_click_id; cửa hàng của bạn ghi nhớ và gửi lại sau khi mua.

Tạo mã bí mật callback

Trang “Callback & API” với thẻ “Mã bí mật callback”
Bạn tạo mã bí mật callback trên trang “Callback & API”
  1. Mở “Callback & API”
  2. Trong thẻ “Mã bí mật callback”, nhấp “+ Tạo mã bí mật mới”
  3. Nếu muốn, đặt tên, ví dụ “Callback cửa hàng”, rồi nhấp “Tạo mã bí mật”
  4. Sao chép mã bí mật ngay – nó chỉ hiển thị một lần
Ai
Chủ sở hữu và quản trị viên, từ gói Creator Pro. Ở Creator Free ghi “Mã bí mật callback có từ gói Creator Pro.”
Bao nhiêu
Tối đa 5 mã bí mật cho mỗi không gian làm việc, ví dụ mỗi cửa hàng một mã.
“Chỉnh sửa”
Đổi tên và đặt trạng thái thành “Hoạt động” hoặc “Không hoạt động”. Với mã bí mật không hoạt động, API từ chối callback.
“↺ Xoay vòng”
Tạo mã bí mật mới; mã cũ ngừng hoạt động ngay lập tức.
“Callback gần nhất:”
Cho biết lần cuối mã bí mật được dùng thành công.

Gửi callback

POST /v1/callbacks/sale
curl -X POST https://dock.at-harbor.com/v1/callbacks/sale \
  -H "Content-Type: application/json" \
  -H "X-Callback-Secret: $LH_CALLBACK_SECRET" \
  -d '{
    "click_id": "3f1c2a9e-8d4b-4a51-9f0e-6b7c1d2e3f40",
    "order_id": "A-10023",
    "amount": "49.90",
    "currency": "EUR",
    "occurred_at": "2026-11-01T10:15:00Z"
  }'
# → {"ok":true,"conversion_id":123}
TrườngBắt buộcÝ nghĩa
click_idCóGiá trị của lt_click_id (10–36 ký tự)
order_idCóMã đơn hàng của bạn (1–128 ký tự); mỗi mã đơn hàng chỉ được tính một lần trong mỗi không gian làm việc
amountCóSố tiền dạng số thập phân, ví dụ "49.90"; không có giá trị âm
currencyCóTiền tệ dạng mã ba chữ cái, ví dụ EUR; API tự chuyển chữ thường
occurred_atKhôngThời điểm mua (ISO 8601)
amount_base_minor, base_currency, fx_rateKhôngSố tiền đã quy đổi theo đơn vị nhỏ nhất, tiền tệ cơ sở và tỷ giá, nếu bạn bán bằng nhiều loại tiền tệ
metaKhôngDữ liệu bổ sung của riêng bạn dạng object phẳng: tối đa 50 khóa, mỗi khóa 1–64 ký tự; giá trị là văn bản (tối đa 500 ký tự), một số, true/false hoặc null; object lồng nhau và danh sách bị từ chối
workspace_idKhôngID không gian làm việc của bạn; có nó, API báo click_id không xác định là 404 thay vì 403
Phản hồiÝ nghĩa
200 {"ok":true,"conversion_id":…}Đã lưu doanh số – hoặc order_id này đã được lưu từ trước (khi đó là ID của chuyển đổi hiện có)
403 forbiddenSai mã bí mật hoặc chữ ký, hoặc click_id không xác định (khi không có workspace_id)
403 secret_inactiveMã bí mật đang ở trạng thái “Không hoạt động”
404 not_foundclick_id không xác định (chỉ khi có workspace_id và mã bí mật hợp lệ)
413 request_too_largePhần thân lớn hơn 1 MB
422 validation_failedThiếu một trường hoặc trường không hợp lệ, ví dụ một giá trị trong meta quá dài hoặc lồng nhau
429 rate_limitedHơn 120 callback mỗi phút từ địa chỉ IP của bạn

Chữ ký tùy chọn

Ngoài mã bí mật, bạn có thể gửi header X-Callback-Signature. Header chứa sha256= và chữ ký HMAC-SHA256 của phần thân thô dạng hex. Khóa không phải chính mã bí mật mà là hash SHA-256 của nó ở dạng nhị phân. Nếu bạn gửi header, nó phải đúng – nếu không callback bị từ chối.

Tính chữ ký (PHP)
<?php
$body = json_encode($payload);
$key  = hash('sha256', getenv('LH_CALLBACK_SECRET'), true); // hash nhị phân của secret
$sig  = 'sha256=' . hash_hmac('sha256', $body, $key);
// Header: X-Callback-Secret và X-Callback-Signature: $sig, phần thân: $body

Xem doanh số ở đâu

Doanh số được báo về xuất hiện dưới dạng chuyển đổi trong thống kê, xem Gán chuyển đổi và doanh số. Qua API, bạn đọc chúng bằng read:stats dưới /v1/stats/…/conversions/breakdown.

Custom (API): dữ liệu trực tiếp của riêng bạn

Với tích hợp “Custom (API)”, mọi chương trình gửi được yêu cầu HTTP – plugin máy chủ game, bot, script cron – đều có thể gửi dữ liệu đến LinkHarbor. Dữ liệu trở thành widget trực tiếp trên trang của bạn, và quy tắc thông báo đẩy có thể báo cho người theo dõi.

Kết nối

  1. Mở “Tích hợp” trong không gian làm việc
  2. Chọn “Custom (API)” và nhập tên
  3. Sau khi kết nối, hộp thoại hiển thị “URL ingest” và “Secret” (với “Hiện secret”)
  4. Lưu cả hai trong công cụ của bạn

Tích hợp có từ gói Creator Pro. Chỉ chủ sở hữu và quản trị viên mới thấy URL ingest và secret, kể cả sau này trong trang chi tiết của tích hợp. Ngắt kết nối rồi kết nối lại sẽ tạo secret mới. Cách kết nối tích hợp nói chung được giải thích trong Kết nối tích hợp.

Gửi dữ liệu

Gửi sự kiện và trạng thái widget
curl -X POST "$INGEST_URL" \
  -H "Authorization: Bearer $INGEST_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "event": "player.joined",
    "event_id": "join-2026-11-01T20:01:02Z-steve",
    "data": { "player": "Steve" },
    "state": {
      "type": "game_server",
      "name": "Survival SMP",
      "online": true,
      "players_online": 3,
      "players_max": 20
    }
  }'
# → {"ok":true,"event_id":4711,"duplicate":false,"event_type":"player.joined"}
event
Tên sự kiện tự do, ví dụ player.joined. Tên được chuyển thành chữ thường và là tên mà quy tắc thông báo đẩy phản ứng theo. Không có event, sự kiện được gọi là state.updated.
event_id
Khóa tùy chọn ngăn xử lý hai lần. Nếu cùng event_id được gửi lại, LinkHarbor phản hồi duplicate: true và không làm gì.
data
Giá trị cho các phần giữ chỗ trong văn bản thông báo đẩy, ví dụ {player}. Tối đa 40 khóa, chỉ giá trị đơn giản.
state
Trạng thái đầy đủ của widget. Nó thay thế hoàn toàn trạng thái trước. type là game_server (thẻ máy chủ game) hoặc status (thẻ trạng thái).

Thay vì Authorization: Bearer, bạn cũng có thể gửi secret trong header X-LinkHarbor-Secret. Cho phép 120 lệnh gọi mỗi phút cho mỗi địa chỉ IP. Nếu muốn, bạn ký phần thân: header X-LinkHarbor-Signature chứa sha256= và chữ ký HMAC-SHA256 của phần thân thô với secret làm khóa. Nếu bạn gửi nó, nó phải đúng.

Phản hồiÝ nghĩa
200 {"ok":true,…}Đã lưu sự kiện, với duplicate: true cho event_id đã biết
400 invalid_jsonPhần thân không phải object JSON
401 invalid_secretSai secret hoặc URL ingest không xác định
401 signature_invalidX-LinkHarbor-Signature không khớp với phần thân
413 request_too_largePhần thân lớn hơn 64 KB
422 validation_failedPhần thân không có event lẫn state
429 rate_limitedHơn 120 lệnh gọi mỗi phút từ địa chỉ IP của bạn

Không tìm thấy?

Hãy cho chúng tôi biết bạn cần gì, đội hỗ trợ sẽ trực tiếp giúp bạn.

Liên hệ hỗ trợ