Skip to content
语言: 中文(简体)

开发者 API

向 LinkHarbor 发送销售和自有数据

更新于 2026年11月1日 阅读约 5 分钟

用销售回调把网店中的销售归因到链接点击,用“Custom (API)”把你自己工具中的实时数据发送到你的页面上。

LinkHarbor 也接收来自外部的数据。有两种情况提供专用端点和各自的密钥,你不需要为此使用 API 密钥:销售回调用于上报网店中的销售,让你在统计中看到哪个链接带来了收入。“Custom (API)”集成会把你自己工具中的实时数据作为小组件显示在你的页面上,并能触发推送通知。

销售回调:归因销售

点击 ID(lt_click_id)、归因和上报如何配合,请参阅归因转化和销售;这里列出面向开发者的所有字段和响应。简而言之:LinkHarbor 把一次被计数的点击重定向到 http 或 https 目标时,会附加参数 lt_click_id;你的网店记住它,并在购买完成后把它发回来。

创建回调密钥

“回调与 API”页面上的“回调密钥”卡片
你在“回调与 API”页面上创建回调密钥
  1. 打开“回调与 API”
  2. 在“回调密钥”卡片中点击“+ 创建新密钥”
  3. 可以填写一个名称,例如“商店回调”,然后点击“创建密钥”
  4. 立即复制密钥,它只会显示一次
谁可以创建
所有者和管理员,Creator Pro 起。在 Creator Free 中显示“回调密钥自 Creator Pro 起提供。”
数量
每个工作区最多 5 个密钥,例如每个网店一个。
“编辑”
修改名称,并把状态设为“已启用”或“未启用”。密钥未启用时,API 会拒绝回调。
“↺ 轮换”
生成新密钥;旧密钥立即失效。
“最后回调:”
显示该密钥最后一次成功使用的时间。

发送回调

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}
字段必填含义
click_id是lt_click_id 的值(10–36 个字符)
order_id是你的订单号(1–128 个字符);每个订单号在每个工作区中只计一次
amount是金额,以十进制数表示,例如 "49.90";不能为负数
currency是三字母货币代码,例如 EUR;API 会转换小写字母
occurred_at否购买时间(ISO 8601)
amount_base_minor, base_currency, fx_rate否以最小单位表示的换算金额、基础货币和汇率,适用于你以多种货币销售的情况
meta否你自己的附加数据,为扁平对象:最多 50 个键,每个键 1–64 个字符;值可以是文本(最多 500 个字符)、数字、true/false 或 null;嵌套对象和列表会被拒绝
workspace_id否你的工作区 ID;带上它时,API 会把未知的 click_id 报告为 404 而不是 403
响应含义
200 {"ok":true,"conversion_id":…}销售已保存,或该 order_id 之前已保存过(此时返回现有转化的 ID)
403 forbidden密钥或签名错误,或 click_id 未知(未带 workspace_id 时)
403 secret_inactive密钥被设为“未启用”
404 not_foundclick_id 未知(仅在带有 workspace_id 且密钥有效时)
413 request_too_large请求体大于 1 MB
422 validation_failed某个字段缺失或无效,例如 meta 中的某个值过长或有嵌套
429 rate_limited你的 IP 地址每分钟发送了超过 120 次回调

可选签名

除了密钥之外,你还可以发送 X-Callback-Signature 请求头。它包含 sha256= 以及原始请求体的十六进制 HMAC-SHA256 签名。签名用的密钥不是回调密钥本身,而是它的二进制 SHA-256 哈希。如果你发送了这个请求头,它就必须正确,否则回调会被拒绝。

计算签名(PHP)
<?php
$body = json_encode($payload);
$key  = hash('sha256', getenv('LH_CALLBACK_SECRET'), true); // 密钥的二进制哈希
$sig  = 'sha256=' . hash_hmac('sha256', $body, $key);
// 请求头:X-Callback-Secret 和 X-Callback-Signature: $sig,请求体:$body

在哪里查看销售

上报的销售会作为转化出现在你的统计中,参见归因转化和销售。通过 API,你可以用 read:stats 在 /v1/stats/…/conversions/breakdown 下读取它们。

Custom (API):你自己的实时数据

借助“Custom (API)”集成,任何能发送 HTTP 请求的程序(例如游戏服务器插件、机器人或 cron 脚本)都可以向 LinkHarbor 发送数据。这些数据会变成你页面上的实时小组件,推送规则还可以通知你的关注者。

连接

  1. 在工作区中打开“集成”
  2. 选择“Custom (API)”并输入名称
  3. 连接后,对话框会显示“接入 URL”和“密钥”(可用“显示密钥”查看)
  4. 把两者保存在你的工具中

集成自 Creator Pro 起提供。只有所有者和管理员能看到接入 URL 和密钥,之后在集成的详情视图中也是如此。断开后重新连接会生成新的密钥。一般如何连接集成,请参阅连接集成。

发送数据

发送事件和小组件状态
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
自由命名的事件名,例如 player.joined。它会被转换为小写,推送规则就是根据这个名称触发的。没有 event 时,事件名为 state.updated。
event_id
可选的键,用于防止重复处理。如果再次发送相同的 event_id,LinkHarbor 会返回 duplicate: true,并且不做任何处理。
data
推送文本中占位符的值,例如 {player}。最多 40 个键,只能是简单值。
state
小组件的完整状态,会完全替换之前的状态。type 为 game_server(游戏服务器卡片)或 status(状态卡片)。

除了 Authorization: Bearer,你也可以在 X-LinkHarbor-Secret 请求头中发送密钥。每个 IP 地址每分钟允许 120 次调用。你还可以选择为请求体签名:X-LinkHarbor-Signature 请求头包含 sha256= 以及以密钥为密钥计算出的原始请求体 HMAC-SHA256 签名。如果你发送了它,它就必须正确。

响应含义
200 {"ok":true,…}事件已保存;对于已知的 event_id,返回 duplicate: true
400 invalid_json请求体不是 JSON 对象
401 invalid_secret密钥错误或接入 URL 未知
401 signature_invalidX-LinkHarbor-Signature 与请求体不匹配
413 request_too_large请求体大于 64 KB
422 validation_failed请求体中既没有 event 也没有 state
429 rate_limited你的 IP 地址每分钟调用超过 120 次

没找到答案?

告诉我们你需要什么,我们的客服团队会亲自帮你。

联系客服