一、官网地址:回调通知地址
二、java示例
@PostMapping(value = "/subscribeEvent")
public void subscribe( HttpServletRequest request, HttpServletResponse response) throws Exception {
// 1. 读取原始请求体
StringBuilder rawBody = new StringBuilder();
try (BufferedReader reader = request.getReader()) {
String line;
while ((line = reader.readLine()) != null) {
rawBody.append(line);
}
}
String requestBody = rawBody.toString();
// 2. 获取签名头
String signature = request.getHeader("X-Douyin-Signature");
// 3. 获取AppSecret(确保这是正确的密钥)
String appSecret = tiktokProperties.getClientSecret();
// 4. 计算签名
String dataToSign = appSecret + requestBody;
String calculatedSignature = DigestUtils.sha1Hex(dataToSign);
// 6. 验证签名
if (!calculatedSignature.equals(signature)) {
response.setStatus(403);
response.getWriter().write("Signature verification failed");
return;
}
JSONObject jsonObject = JSONObject.parseObject(requestBody);
JSONObject content = jsonObject.getJSONObject("content");
String event = jsonObject.getString("event");
logger.info("event:{}", event);
Object logId = jsonObject.get("log_id");
logger.info("logId:{}", logId);
String key = null;
if (logId != null){
key = CacheConstants.TIKTOK_EVENT_LOG_ID + logId.toString();
if (redisService.hasKey(key)){
return;
}
}else {
return;
}
//退款申请审核通知
if (event.equals(TikTokConstants.WEBHOOK_EVENT_LIFE_HERMES_AKTE_AFTER_SALE_AUDIT)) {
...
}
//券审核结果通知
if (event.equals(TikTokConstants.WEBHOOK_EVENT_LIFE_PRODUCT_COMMON_AUDIT)) {
...
}
// 7. 处理业务逻辑
JSONObject rs = new JSONObject();
rs.put("challenge", content.get("challenge"));
response.getOutputStream().write(rs.toJSONString().getBytes(StandardCharsets.UTF_8));
}
三、注意点:

需要一个https的网址,虽然win也可以弄个穿透,但是还是推荐服务器。因为它有一秒中超时验证码。穿透延迟低于1s也可以使用。另外需要返回它传过来的特定值。如果要写成对象接收,要注意参数顺序。照我这样写不需要理会。验签方法是密钥加上传过过来的参数字符串加密,再对传过来的签名进行比对。另外,如果没有创建应用,先去创建应用抖音控制台。通过后就可以用了。自己服务白名单一定要开。

6132

被折叠的 条评论
为什么被折叠?



