概述
Webhook 是一种事件驱动的消息推送机制,可用于保持应用与 SHOPLINE 店铺之间的数据同步,或在店铺发生特定事件后触发相应处理操作的执行。相比于持续轮询,Webhook 提供了一种更高效、低延迟的方法来获取店铺数据的更改信息。
当店铺发生特定事件时(如商品更新),SHOPLINE 会立即向你的应用服务器发送 HTTP 请求。你的服务器收到请求后可及时更新数据,从而确保应用数据与 SHOPLINE 一致。
准备工作
为确保你的应用能收到 Webhook 通知,需满足以下条件:
- 目标店铺已安装了你的应用。
- 你的应用已订阅了对应 API 版本的目标事件。
应用订阅事件
按照以下步骤完成事件订阅:
- 前往 合作伙伴后台 申请开发者账号。
- 创建一个应用。
- 调用 订阅 Webhook 接口订阅目标事件。
Webhook 推送请求格式
当 SHOPLINE 店铺内发生你已订阅的事件时(如订单、商品等实体的变更),SHOPLINE 会主动以 HTTP POST 请求的方式将消息发送到你为事件配置的接收端点上。
请求头
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| X-Shopline-Topic | string | 是 | 事件的唯一标识。 例子: orders/update |
| X-Shopline-Hmac-Sha256 | string | 是 | 该请求的签名。收到请求后,你需要对该签名进行 验签 以验证数据的真实性和完整性。 |
| X-Shopline-Shop-Domain | string | 是 | 店铺域名。 |
| X-Shopline-Shop-Id | string | 是 | 店铺 ID。 |
| X-Shopline-Merchant-Id | string | 是 | 商家 ID。 |
| X-Shopline-API-Version | string | 是 | API 版本号。 例子: v20260901 |
| X-Shopline-Webhook-Id | string | 是 | 该 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-Type 为 application/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