package com.ruoyi.order.util.douyin;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.ruoyi.common.redis.service.RedisService;
|
import com.ruoyi.order.util.douyin.model.OrderWebHook;
|
import com.ruoyi.order.util.douyin.model.WebHook;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.codec.digest.DigestUtils;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.BufferedReader;
|
import java.io.PrintWriter;
|
import java.util.concurrent.TimeUnit;
|
|
|
/**
|
* @author zhibing.pu
|
* @Date 2025/6/11 19:36
|
*/
|
@Slf4j
|
@RestController
|
@RequestMapping("/douyin")
|
public class DYWebHookController {
|
|
@Resource
|
private RedisService redisService;
|
|
|
/**
|
* 抖音webhook
|
* @param request
|
* @param response
|
*/
|
@ResponseBody
|
@PostMapping("/webhook")
|
public void orderWebHook(HttpServletRequest request, HttpServletResponse response) {
|
// 获取消息中body
|
String str, wholeStr = "";
|
try{
|
BufferedReader br = request.getReader();
|
while((str = br.readLine()) != null){
|
wholeStr += str;
|
}
|
log.info("【抖音】webhook获取请求内容:{}", wholeStr);
|
} catch (Exception e){
|
log.error("【抖音】webhook获取请求内容失败");
|
return;
|
}
|
// 获取请求头中的加签信息
|
String msgId = request.getHeader("Msg-Id");
|
String signature = request.getHeader("X-Douyin-Signature");
|
String data = DouyinConfig.CLIENT_SECRET + wholeStr;
|
String sign = DigestUtils.sha1Hex(data);
|
if(!sign.equals(signature)){
|
log.error("【抖音】webhook验签失败");
|
return;
|
}
|
if(redisService.hasKey(msgId)){
|
return;
|
}
|
redisService.setCacheObject(msgId, "", 60L, TimeUnit.SECONDS);
|
WebHook webHook = JSON.parseObject(wholeStr, WebHook.class);
|
String event = webHook.getEvent();
|
switch (event){
|
// 验证
|
case "verify_webhook":
|
verifyWebhook(webHook, response);
|
break;
|
//订单消息通知
|
case "life_trade_order_notify":
|
lifeTradeOrderNotify(webHook, response);
|
break;
|
//券消息通知
|
case "life_trade_certificate_notify":
|
break;
|
default:
|
break;
|
}
|
|
}
|
|
|
/**
|
* 校验webhook
|
* @param webHook
|
* @param response
|
*/
|
public void verifyWebhook(WebHook webHook, HttpServletResponse response){
|
JSONObject jsonObject = JSON.parseObject(webHook.getContent());
|
//响应
|
PrintWriter out = null;
|
try {
|
out = response.getWriter();
|
out.print(jsonObject);
|
out.flush();
|
out.close();
|
}catch (Exception e){
|
e.printStackTrace();
|
}finally {
|
if(null != out){
|
out.close();
|
}
|
}
|
}
|
|
|
/**
|
* 生活服务订单webhook
|
* @param webHook
|
* @param response
|
*/
|
public void lifeTradeOrderNotify(WebHook webHook, HttpServletResponse response){
|
OrderWebHook orderWebHook = JSON.parseObject(webHook.getContent(), OrderWebHook.class);
|
|
}
|
}
|