快工助手跨境电商知识与商机助手

消息推送

Shopee 官方资料 · Shopee Open Platform 开发者指南 · 适合开发者

stable本次发布有变化全部展示

来自 Shopee 官方资料快照 ·

打开官方原文 ↗
  1. 当前资料结构化阅读页
  2. 固定快照已留存,可追溯
  3. 官方原文可核对
查看技术与溯源信息
平台 / profile
Shopee / profile.shopee.developer_guide
语言
zh-Hans
发布版本
cn-20260909-2
标签
zhuge/sourceplatform/shopeeaudience/developercategory/api_doctopic/apitopic/developertopic/getting-started

资料正文

§1 为什么需要Push Mechanism(Webhook)?

订阅 Shopee Open Platform 的Webhook可以帮助您在特定事件发生时立即获得通知。 这使您可以及时接收事件的更新,而无需定期轮询 API 端点。请注意,Push Mechanism只是通知您对应数据已更改,若想获取更多信息,请调用对应的接口获取最新数据。建议您将Push Mechanism(Webhook)和API配合使用,使您的系统集成更加高效。

下面概述了 Webhook 在 Shopee 开放平台上的工作方式:

  • 您为您的应用订阅特定的 webhook 类型并定义回调URL。
  • 发生特定事件,例如订单状态更新。
  • Shopee 向回调URL发送HTTP POST请求。
  • 您通过回调URL收到通知。
#

§2 Push Mechanism(Webhook)类型

Shopee 开放平台上有 5 类 webhooks 可用:

  • Shopee - 用于商店授权和重要 Shopee 更新的 Webhook。
  • Order (订单)- 用于订单状态和跟踪号更新的 Webhook。
  • Marketing(营销) - 用于跟踪产品促销活动的 Webhook。
  • Product(商品) - 用于商品信息、违规和品牌注册流程更新的 Webhook。
  • Chat(聊天) - 用于买家聊天信息更新的 Webhook。
#

§3 Shopee Push

Shopee Push

当卖家操作您的系统进行授权操作时,您将立即收到通知。特别是用主账号授权时,回调地址只返回main account id, 当您订阅此通知,可以及时获取到卖家当次授权成功的shop id列表和merchant id列表。

卖家可以通过卖家中心或者您的系统进行授权操作时,您将会立即收到通知。特别是用主账号解除授权时,回调地址只返回main account id, 当您订阅此通知,可以及时获取到卖家当次解除授权成功的shop id列表和merchant id列表。

卖家授权有效期为一年,授权到期前,卖家需要手动再完成店铺授权,当您订阅此通知后,我们将会推送即将在7天后过期的shop id和merchant id列表,您可以联系卖家进行再次授权,避免因为授权过期而无法正常调用接口。

当您订阅此通知,您能及时获取Shopee官方消息通知。

#

§4 Product Push

Product Push

商品参与活动后,当您订阅此通知,即可获取每次活动库存被消耗的记录,便于卖家及时监控活动库存变化。

如果卖家需要为商品上传视频介绍,只有成功转码的视频文件才能调用添加或更新商品的接口,您可以订阅此通知,当调用完v2.media_space.complete_video_upload接口后,等待此消息通知,通知将会返回转码成功还是失败,返回转码成功后,您再继续将video_upload_id添加或更新商品接口。

商品被Shopee审核后标记为禁用,您可以订阅此通知,您可以即使了解到被Shopee禁用的商品,以及了解被禁用的原因,快速修正商品信息,恢复上架。

卖家可以通过v2.product.register_brand接口或者卖家中心注册卖家自有品牌,从而可以再添加商品时填写卖家自有品牌。但注册后需要通过Shopee人员审核,审核通过后的品牌ID可正式用于商品,当您订阅此通知,您可以及时获取到三种审核结果,审核通过/审核拒绝/现有品牌合并。

#

§5 Order Push

Order Push

当订单状态发生变更时(包含所有订单状态),您将会立即收到通知。特别是未发货前订单被取消,您可以及时收到通知。

渠道返回物流跟踪号一般有延时,而部分渠道要求打印面单前需生成跟踪号,当您订阅此通知,物流跟踪号返回时,您可以立即收到通知,帮助您快速出货,减少轮询v2.logistics.get_tracking_number接口的次数。

当订单的面单生成状态有更新时,例如ready或者failed,您都会收到通知,订阅此通知,可以避免您多次调用v2.logistics.get_shipping_document_result 接口来获取面单生成结果。

#

§6 Marketing Push

Marketing Push

当您订阅此通知,可以及时获取到商品开始显示活动库存,以及因为活动结束或者商品移出活动而不再显示活动库存的通知。

当您订阅此通知,您可以及时获取到活动被创建,参与活动的产品列表更新,活动结束的通知。

#

§7 Chat Push

Chat Push

当您订阅此通知,买家发送消息时,您能及时获取买家发送的信息。

#

§8 订阅Push Mechanism(Webhook)

第一步:您需要登录控制台,选择您需要订阅的App,点击设置

第二步:设置回调地址并验证

*点击验证后,Shopee会发送Post请求到您的回调地址,以验证您的回调地址可用。当验证失败时,您可以查看到具体的错误原因。

第三步:打开您需要订阅的信息类型开关

您可以通过v2.push.set_push_config接口设置开关,也可以通过控制台打开

您也选择需要关闭的订阅服务,通过接口和控制台进行设置关闭。

*请注意不同类型的app类型能打开的推送类型不一样

APP类型推送类型
Original所有Push服务除了Brand Register Result Push
ERP System所有Push服务除了Webchat Push
Seller In-house System所有Push服务
Product ManagementShopee PushShop Authorization Push (Code:1)Shop Authorization Canceled Push (Code:2)Open API Authorization Expiry Push (Code:12)Shopee Updates (Code:5)Product PushReserved Stock Change Push (Code:8)Video Upload Push (Code:11)Banned Item Push (Code:6)Brand Register Result Push (Code:13)Marketing PushItem Promotion Info Push (Code:7)Promotion Update Push (Code:9)
Order ManagementShopee PushShop Authorization Push (Code:1)Shop Authorization Canceled Push (Code:2)Open API Authorization Expiry Push (Code:12)Shopee Updates (Code:5) Order PushOrder Status Push (Code:3)Order TrackingNo Push (Code:4)Shipping Document Status Push (Code:15)
Accounting and FinanceShopee PushShop Authorization Push (Code:1)Shop Authorization Canceled Push (Code:2)Open API Authorization Expiry Push (Code:12)Shopee Updates (Code:5)
MarketingShopee PushShop Authorization Push (Code:1)Shop Authorization Canceled Push (Code:2)Open API Authorization Expiry Push (Code:12)Shopee Updates (Code:5)Product PushReserved Stock Change Push (Code:8)Banned Item Push (Code:6)Marketing PushItem Promotion Info Push (Code:7)Promotion Update Push (Code:9)
Customer ServiceShopee PushShop Authorization Push (Code:1)Shop Authorization Canceled Push (Code:2)Open API Authorization Expiry Push (Code:12)Shopee Updates (Code:5)Chat PushWebchat Push (Code:10)

第四步(可选):如果您的系统需要添加外IP白名单才可以访问,请通过v2.public.get_shopee_ip_ranges接口获取API的出口地址,如果您在测试推送服务,可以调用沙箱环境的v2.public.get_shopee_ip_ranges接口获取API出口地址,如果您已经使用生产环境,请调用生产环境的v2.public.get_shopee_ip_ranges接口

#

§9 推送鉴权

为了防止他人攻击,我们在每个请求中都提供了授权签名,位于 HTTP 请求头的 Authorization 字段中,您可以识别Shopee的签名后消费信息。从技术上讲,该步骤是可选的,但我们强烈建议开发人员使用以下步骤来验证请求,以生成签名并确保它与推送的匹配。下面是我们生成签名的方法

1.将 URL、|、response.content作为签名基本字符串。 例如:

‘http://www.example.com/example/uri|{“shop_id”: 123, “code”: 1, “success”: 1, “extra”: “shop_id 123 is authorized successfully”, “data”: {“more_info”: “more info”}, “timestamp”: 1470198856}’

注意不建议采用json.loads(response.content)方法

2.拿到您的partner key

3.最后,通过将签名基础字符串和partner key传递给 HMAC-SHA256 散列算法来计算签名。 HMAC 签名函数的输出是一个二进制字符串。 这需要进行十六进制编码以生成签名字符串。

Code demo

Python:

import hmac

def verify_push_msg(url, request_body, partner_key, authorization):

    base_string = url + '|' + request_body

    cal_auth = hmac.new(partner_key, base_string, hashlib.sha256).hexdigest()

    if cal_auth != authorization:

        return False

    else:

        return True

Go:

package verify

import (

    "crypto/hmac"

    "crypto/sha256"

    "encoding/hex"

    "fmt"

)

 

 

func VerifyPushMsg(url, requestBody, partnerKey, authorization string) (result bool) {

    baseStr := url + "|" + requestBody

    h := hmac.New(sha256.New, []byte(partnerKey))

    h.Write([]byte(baseStr))

    calAuth := fmt.Sprintf("%x", h.Sum(nil))

    if authorization != calAuth {

        return false

    }

    return true

}

Java:

import javax.crypto.Mac;

import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Hex;

import java.io.UnsupportedEncodingException;

import java.security.NoSuchAlgorithmException;

 

 

public static Boolean verfiyPushMsg(String url, String requestBody, String partnerKey, String authorization)

        throws NoSuchAlgorithmException, UnsupportedEncodingException, java.security.InvalidKeyException {

 

    String baseStr = url + "|" + requestBody;

    Mac sha256_HMAC = Mac.getInstance("HmacSHA256");

    SecretKeySpec secret_key = new SecretKeySpec(partnerKey.getBytes("UTF-8"), "HmacSHA256");

    sha256_HMAC.init(secret_key);

    String result = Hex.encodeHexString(sha256_HMAC.doFinal(baseStr.getBytes("UTF-8")));

    return result.equals(authorization);

}
#

§10 触发事件

请保证您设置的partner id已经有授权成功的店铺,如果没有,请先完成店铺授权。如果已经完成,请选择已经授权成功的店铺操作各种事件。详细可以查看各Push API文档了解各种事件触发条件,您的回调地址应在收到我们的请求后提供成功的响应。

#

§11 设置屏蔽消息店铺列表

您可以通过v2.push.set_push_config接口blocked_shop_id字段设置(最多只能设置500个shop),也可以通过控制台设置

#

§12 推送重试机制

为了避免重复推送,您的回调地址应在收到我们的请求后提供适当的响应。 我们需要一个状态码为 2xx 且正文为空的 HTTP 响应。每个Push类型最多支持推送的次数和间隔多久重推,可以查看具体的Push文档

#

§13 推送告警/关停机制

避免推送失败的请求一直占用推送消息资源,我们有一定的推送关停告警和关停推送服务的操作。为此,我们会统计过去6小时推送成功的成功率。如果在超时时间内(每个Push类型的超时时间可以通过Push文档查看)我们没有接收到您返回状态码为 2xx 且正文为空的 HTTP 响应,我们将会记录一次失败。

当前平台推送告警策略:如果在过去6小时内推送消息超过600条且推送成功率低于70%,系统会保持每30分钟自动向开发者发送警告邮件。 直到成功率恢复到 70% 以上才会关闭警报。

当前平台推送关停策略:如果某开发者在过去6小时内推送消息超过600条且推送成功率低于30%,平台将自动关闭该开发者的推送服务,并通过电子邮件通知。

您可以通过控制台查看到当前Push的状态和成功率。

当推送被平台关停后,您可以先检查您的消息接收服务问题,确保能正常接收消息后再重新订阅即可。关停期间的Push消息不再推送,重新开启Push服务,成功率将重新计算。

#