概述

Webhook 是一种事件驱动的消息推送机制,可用于保持应用与 SHOPLINE 店铺之间的数据同步,或在店铺发生特定事件后触发相应处理操作的执行。相比于持续轮询,Webhook 提供了一种更高效、低延迟的方法来获取店铺数据的更改信息。

当店铺发生特定事件时(如商品更新),SHOPLINE 会立即向你的应用服务器发送 HTTP 请求。你的服务器收到请求后可及时更新数据,从而确保应用数据与 SHOPLINE 一致。


准备工作

为确保你的应用能收到 Webhook 通知,需满足以下条件:

  • 目标店铺已安装了你的应用。
  • 你的应用已订阅了对应 API 版本的目标事件。

应用订阅事件

按照以下步骤完成事件订阅:

  1. 前往 合作伙伴后台 申请开发者账号。
  2. 创建一个应用
  3. 调用 订阅 Webhook 接口订阅目标事件。

Webhook 推送请求格式

当 SHOPLINE 店铺内发生你已订阅的事件时(如订单、商品等实体的变更),SHOPLINE 会主动以 HTTP POST 请求的方式将消息发送到你为事件配置的接收端点上。

请求头

参数类型必填描述
X-Shopline-Topicstring事件的唯一标识。
例子:orders/update
X-Shopline-Hmac-Sha256string该请求的签名。收到请求后,你需要对该签名进行 验签 以验证数据的真实性和完整性。
X-Shopline-Shop-Domainstring店铺域名。
X-Shopline-Shop-Idstring店铺 ID。
X-Shopline-Merchant-Idstring商家 ID。
X-Shopline-API-VersionstringAPI 版本号。
例子:v20260901
X-Shopline-Webhook-Idstring该 Webhook 事件的 ID。当触发重试机制时,该 ID 保持不变。

示例:

{
"X-Shopline-Topic":"orders/edited",//事件的唯一标识。
"X-Shopline-Hmac-Sha256":"XWmrwMey6OsLMeiZKwP4FppHH3cmAiiJJAweH5Jo4bM=",//该请求的签名。
"X-Shopline-Shop-Domain":"yourhandle.myshopline.com",//店铺的域名。
"X-Shopline-Shop-Id":"*******123456",//店铺 ID。
"X-Shopline-Merchant-Id":"*******234",//商家 ID。
"X-Shopline-API-Version":"v20260901",//API 版本号。
"X-Shopline-Webhook-Id":"b54557e48a5fbf7d70bcd043" //该 Webhook 事件的 ID。
}

请求体

请求体内容以事件定义为准,以下以 客户新增 事件为例展示请求体的数据格式。

注意

你在合作伙伴后台订阅事件时选择的 API 版本号决定了系统推送的事件定义。你的应用对 Webhook 事件的解析和处理逻辑,必须与该版本对应的事件定义保持一致。

示例:

{
"total_spent":"0",
"addresses":[
{
"zip":"",
"country":"",
"address2":"",
"city":"",
"address1":"",
"last_name":"",
"province_code":"",
"country_code":"",
"default":true,
"province":"",
"phone":"",
"company":"",
"id":"SL201UA592875161232815849",
"customer_id":"******390",
"first_name":""
}
],
"gender":"others",
"last_order_id":"1001",
"created_at":"2023-05-10T17:00:01+08:00",
"language":"en",
"verified_email":false,
"accepts_mobile_marketing":false,
"accepts_marketing_updated_at":"2023-05-10T17:00:01+08:00",
"orders_count":1,
"default_address":{
"zip":"",
"country":"",
"address2":"",
"city":"",
"address1":"",
"last_name":"",
"province_code":"",
"country_code":"",
"default":true,
"province":"",
"phone":"",
"company":"",
"id":"SL201UA592875161228158749",
"customer_id":"******390",
"first_name":""
},
"updated_at":"2023-05-26T19:25:47+08:00",
"accepts_marketing":true,
"email_subscribe_flag":1,
"nick_name":"test1",
"currency":"CLP",
"id":"******390",
"state":3,
"first_name":"test1",
"email":"****@example.com",
"mobile_subscribe_flag":2
}

事件推送和重试规约

为了保证事件通知的实时性,SHOPLINE 建立了标准的推送机制与失败重试策略。

推送与响应机制

SHOPLINE 通过 HTTP POST 方式推送事件,请求头 Content-Typeapplication/json,事件数据以 JSON 格式置于请求体中。系统发出事件推送后,你的应用必须在 5 秒内按照示例格式进行应答,以告知 SHOPLINE 事件推送成功。否则,SHOPLINE 将判定推送失败并触发重试。

成功应答示例:

HTTP/1.1 200 OK

重试策略

当事件推送被判定为失败时,SHOPLINE 会启动自动重试机制。系统会在推送失败后的 48 小时内完成最多 19 次重试。每次重试与上一次之间的时间间隔呈阶梯式增长:0 秒、5 秒、10 秒、30 秒、45 秒、1 分钟、2 分钟、5 分钟、12 分钟、38 分钟、1 小时、2 小时、4 小时、4 小时、4 小时、4 小时、4 小时、4 小时、4 小时。

如果一条事件推送连续 19 次重试失败,且在重试阶段内没有其他同类型事件推送成功的记录,SHOPLINE 将移除你的应用针对该事件的订阅记录,并向你发送一封标题为“Webhook 事件订阅删除”的邮件。

注意

SHOPLINE 可能重复推送同一事件。你的应用必须具备处理重复通知的能力。若你的应用收到重复的事件推送,且该事件已被成功处理,直接返回 HTTP 200 OK 即可。


注意事项

使用 Webhook 时,注意如下事项:

  • Webhook 事件推送无法保证 100% 的送达率。为保障业务数据的最终一致性,强烈建议你的应用接入相关查询接口。例如,你的应用在订阅 订单创建 事件的同时,可调用 查询订单 接口主动核对订单状态。
  • 一旦事件订阅被删除,SHOPLINE 将立即停止该事件的任何消息推送。如需恢复接收,必须重新创建该事件订阅。

签名验证

为确保 Webhook 推送消息的真实性和安全性,建议你的应用在收到事件推送时进行签名验证。关于更多验签相关信息,参考 加签和验签

  • 签名算法:HMAC-SHA256
  • 验签内容:原始 请求体 字符串
  • 签名密钥:应用的 APP Secret
这篇文章对你有帮助吗?