Webhook
此功能会将创作者的订单信息发送到配置的 URL,以满足不同的业务场景。
每当有新的事件发生时,平台会请求开发者配置的 url。
立即开始
需要在创作中心-开发配置中配置通知地址,并开启此功能。
对接规范
为保证数据在传输过程中不被非法篡改,接口数据使用「国密 SM2」进行加密。
开发人员在接收到请求之后,需要返回固定相应参数,以明确表示成功收到回调。
注意
- 为保证您的接口安全,请勿泄露开发者控制台的公钥和私钥!
- Webhook 接口请求过程中无法携带 Token,请关闭对 Webhook 通知地址的鉴权。
- 同一个的异步消息可能会通知多次,因此接收异步消息需做好幂等处理,保障多次接收到同样的消息处理后结果不变。
请求方式
请求方式:HTTP
请求类型:POST
Content-Type:application/json; charset=utf-8
示例参数
{
"data": "04dc4f73ee53585896972983c3e7b538955c1d8402f27ea647b9bd8e93bd22e7ee95ec785f05c599fd44da52d03efd2abc75b5533ffea00f8faa9b41a61eedcf2c53c44f2d72e6d5db36435e2a2523a68fdc0d98e581fd491acc7deebff1871ab04ae2d3b6f1ae1d1f0cd658d36f080e098cb94e5ccbba01cfeb26b25d853de698d4bddb1d57d567367e03a69acc8a8f489d3ea8fc4afb3ee9a50fd5638e9902cda56a22af9fd8547ef1ca35a5ac7a97575a990f6b6933539a2be2fc5025ba5ea4ef94af7ce91e5da66ae1ae2ed402536710bb6ea9804c003cb0d289f35bbaa3aee37775073cf51cdf86d39e84dad279617bc3693b713e73f6d7b53198cf63023bc1d9a08aa5bb80f6e162e1449ca5c847bb63af4ac37482714d0eb9558af609b7f12adc7d285c8ee2fa20ca281010e4fd477fae78e8a0bce3c86b37e8cf6645c7b72a981cc7033b1ebfa32530dcbc2562a3403c6b408a767a2ebcfd1848815f0fca971d7417f3150dc94ea23afa3cc0a576221136e4cb5d291fdc54cdad591f690dabb7bb9481522a64fca12abc2a00785de68b69811c130fb6c493dacd66e06e293c24a39aaf92d621ebf838b09e01b778cf29c0d47af1c02ece18df7f6f7a4dd32c5de50954493d627412a81b582b9a19db7b4c23377d9c57a58352c6cd94cef97da18a1f80d392b971ab0485adbab76eae54f6f7431752d7cccdb7a662edd0af5bd17bf85aff58ba0f8c2cb36f25f532cb4698101f1190b71231129c5e4aac38c263a3ec30529a6ffad2dc8c36f10c07175b6211a08aacfb9dd65dd26ec497f82547cb63ee6f4a796d31a2279ca1e083034bbff059c4ccc76b69eedc2cb6a78aea8458f14061fea8e69eccdc93f3eba93d68e54aded6d6fd9632f3f56cbeaf11a6bba779a03473a734fc"
}
参数说明
参数名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
data | String | 是 | 加密后的参数,请使用国密 SM2 解密后使用 |
数据解密
参数使用「国密 SM2」算法进行加密,在获取到加密后的 data 之后,请使用开发控制台的私钥进行解密。
解密代码示例
在开发过程中遇到问题,请通过联系我们进行沟通,我们会提供协助。
Java
使用 hutool 提供的工具类进行解密。
public static void main(String[] args) {
// 加密后的data数据
String encryptDataStr = "04dc4f73ee53585896972983c3e7b538955c1d8402f27ea647b9bd8e93bd22e7ee95ec785f05c599fd44da52d03efd2abc75b5533ffea00f8faa9b41a61eedcf2c53c44f2d72e6d5db36435e2a2523a68fdc0d98e581fd491acc7deebff1871ab04ae2d3b6f1ae1d1f0cd658d36f080e098cb94e5ccbba01cfeb26b25d853de698d4bddb1d57d567367e03a69acc8a8f489d3ea8fc4afb3ee9a50fd5638e9902cda56a22af9fd8547ef1ca35a5ac7a97575a990f6b6933539a2be2fc5025ba5ea4ef94af7ce91e5da66ae1ae2ed402536710bb6ea9804c003cb0d289f35bbaa3aee37775073cf51cdf86d39e84dad279617bc3693b713e73f6d7b53198cf63023bc1d9a08aa5bb80f6e162e1449ca5c847bb63af4ac37482714d0eb9558af609b7f12adc7d285c8ee2fa20ca281010e4fd477fae78e8a0bce3c86b37e8cf6645c7b72a981cc7033b1ebfa32530dcbc2562a3403c6b408a767a2ebcfd1848815f0fca971d7417f3150dc94ea23afa3cc0a576221136e4cb5d291fdc54cdad591f690dabb7bb9481522a64fca12abc2a00785de68b69811c130fb6c493dacd66e06e293c24a39aaf92d621ebf838b09e01b778cf29c0d47af1c02ece18df7f6f7a4dd32c5de50954493d627412a81b582b9a19db7b4c23377d9c57a58352c6cd94cef97da18a1f80d392b971ab0485adbab76eae54f6f7431752d7cccdb7a662edd0af5bd17bf85aff58ba0f8c2cb36f25f532cb4698101f1190b71231129c5e4aac38c263a3ec30529a6ffad2dc8c36f10c07175b6211a08aacfb9dd65dd26ec497f82547cb63ee6f4a796d31a2279ca1e083034bbff059c4ccc76b69eedc2cb6a78aea8458f14061fea8e69eccdc93f3eba93d68e54aded6d6fd9632f3f56cbeaf11a6bba779a03473a734fc";
// 开发者私钥
String privateKey = "0BDB27A77796DEC9AA3E98098D15966BBDCBC7782F48ACC69468854EA3D2967C";
// 使用Hutool的SM2工具类进行解密
String decryptStr = SmUtil.sm2Decrypt(encryptDataStr, privateKey);
// 格式化
System.out.println(JSON.parse(decryptStr));
}
TypeScript
使用 sm-crypto
进行解密。
// 安装依赖
npm i sm-crypto
import { sm2 } from 'sm-crypto';
// 开发者私钥
const privateKey = '00F4AEB2FE729229331B7A0B0EE4B50D4CC1879872DF55DCC3FB6C8FE6975EE3B0';
/*
加密后的内容
注意:
在解密时,sm-crypto会自动补充前缀 04 ,使密文变成:0404...,所以解密前需要去除密文的前缀 04
示例:Webhook发送的密文:049e672...,解密使用的密文应为:9e672...
*/
const encryptedData = '9e672f95731aeed82635fa9ea55a80c567460b1466f561b64b833ee75a358948d18989411f528d75ffc1e3bb12fe6983b87ee4d49295bc0c210e389e98d829c6637572bf28d2c844e3a53e6a6b26c809f597e42b31c8b8d94fccf5c659e44ff091d9c9d00d80726443f5a47eaeb61a70e07528d79950a257f248e60672c073f323e48a114b89ad58d92526dcc043b612fec76b2193d7bf8f175efeb9201fcc273bb9df541a148efb90d2a1bf1d518afaa3dd8efc33baa8c95ec86be42b8e4419bfbeb7cadec9ac9dcda8028b89b14f24ed9c288818711bd3dd581f24709a2e21e263c5bf42a845f87774c5975cc21f1e8366e7f99b0da7bf197be547fadc6db595089d1e7ecc4b958dfdad9e9eff70e4d16d3ee1f181a1f575fbea5a07650e49029a195d00f4a02f6c653628ba78c032904c024e452a4a213466011d68976e5fa752251d495e2234dba08a690913eedcc8d3bc5530447bff417460bf864e3f89ab9c1473c5ec80aa7f7297b1acf6157782eaf347065d922d725640962e524723ed324ce37bc25fd77fdbf7c443b719ca048b3d1d000c5195a9ab907eafc1dccfbc931df24c31bbb8f18ee70cf779b2bacd6a381d593d2a9cae99d8ad5663271488c83beee4f78586ab7f94f5cb579fc00dadad90a9ff31de4d2211267009d6f7539baf1a9f7964efbf9bc37b5c1bd9b9d0b3d88d17fbc0764966b1c9054ddde29fb06f7cd5de0f407cc3ab422008346d64516523eff2810744916d23a9ef01187650ce684eef8be1ad4babae208cbd4193a31f3863c47ceba792524236e3158ca6d42180484d6b61463d08b7d93491f10453';
// 解密操作
const decryptedData = sm2.doDecrypt(encryptedData, privateKey);
console.log('解密后的数据:', decryptedData);
解密后的参数
示例参数(解密后)
{
"type": "order",
"data": {
"outTradeNo": "202501071111221876466629953572865",
"payOrderNo": "2025010711112218764666299535728651876466630192648193",
"productId": "a32i1aa09",
"productType": "product",
"topicType": null,
"buyerId": "1829469206740008962",
"sellerId": "1829467451708977154",
"affiliateUserId": "1829467451708977155",
"price": 10.00,
"sellerIncome": 9.00,
"affiliateIncome": 0.50,
"status": "0",
"payType": "alipay",
"payTime": "2025-01-07 11:11:30",
"finishTime": "2025-01-07 11:11:31",
"remark": "我是订单备注"
}
}
type 参数说明(解密后)
当前仅通知订单消息,所以type
字段仅为order
data 参数说明(解密后)
参数名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
outTradeNo | String | 是 | 原力推订单号 |
payOrderNo | String | 是 | 支付订单号 |
productId | String | 是 | 订单作品 id |
productType | String | 是 | 订单作品类型,product-作品类型,column-专栏类型 会根据平台功能扩展,新增其他类型 |
topicType | String | 选填 | productType 为 column 时必填 |
buyerId | String | 是 | 买方 id |
sellerId | String | 是 | 作者 id |
affiliateUserId | String | 选填 | 分销用户 id 分销订单时必填 |
price | Number | 是 | 订单金额 |
sellerIncome | Number | 是 | 作者的收入 |
affiliateIncome | Number | 选填 | 分销用户收入 分销订单时必填 |
status | String | 是 | 订单状态 |
payType | String | 是 | 支付类型:alipay-支付宝,wxpay-微信支付 |
payTime | datetime | 是 | 付款时间 |
finishTime | datetime | 是 | 订单完成时间 |
remark | String | 选填 | 订单备注 |
响应参数(重要)
您在接受到参数之后,要对原力推的 Webhook 请求进行响应,以便原力推判断是否推送成功。
响应示例
{
"c": 200,
"m": "",
"d": null
}
原力推仅校验响应数据的c
字段,如果c
字段不是 200 ,则认为通知失败。
更新日志
- 2025-01-23
- 完善参数说明
- 添加对TypeScript的支持
- 修改SM2公钥和私钥为Hex格式(已兼容旧版本,业务不会受到影响)
- 2025-01-19
- 完善参数说明
- 添加
remark
(订单备注)字段
- 2025-01-13
发布Webhook功能