laravel实现gitee的webhook
1. 创建一个 gitee 仓库
这里创建一个 test 仓库,点击 管理
按钮,会打开仓库管理界面
2. 仓库管理页面
3. 打开 WebHooks 管理页面
点击 WebHooks
按钮后,打开 WebHooks 管理
页面
4. WebHooks 管理页面
点击 添加 webHook
按钮,打开添加 WebHooks 页面
5. 添加 WebHook 页面
6. 填写 URL 和 WebHook 密码
7. 填写 URL 和 WebHook 签名密钥
8. 代码实现
php
// 获取 Gitee 请求头
$giteeToken = $request->header('X-Gitee-Token');
$giteeTimestamp = $request->header('X-Gitee-Timestamp');
if (!$giteeToken || !$giteeTimestamp) {
return response('Missing headers', 400);
}
// 从配置文件中读取时间差
$timestampTolerance = Config::get('webhook.timestamp_tolerance');
// 验证时间戳是否在有效期内
$currentTime = time();
if (abs($currentTime - (intval($giteeTimestamp) / 1000)) > $timestampTolerance) {
return response('Invalid timestamp', 401);
}
// 计算签名
$signKey = Config::get('webhook.gitee_sign_key'); // 从配置文件中读取
$secStr = "$giteeTimestamp\n$signKey";
$computeToken = base64_encode(hash_hmac('sha256', $secStr, $signKey, true));
// 安全比较 token
if (!hash_equals($computeToken, $giteeToken)) {
return response('Invalid token', 401);
}
// 执行 shell 命令
// 处理 Gitee Webhook 请求
return response('Gitee Webhook processed successfully', 200);