Skip to content

laravel实现gitee的webhook

1. 创建一个 gitee 仓库

这里创建一个 test 仓库,点击 管理 按钮,会打开仓库管理界面 创建一个gitee仓库

2. 仓库管理页面

仓库管理页面

3. 打开 WebHooks 管理页面

点击 WebHooks 按钮后,打开 WebHooks 管理 页面 点击WebHooks按钮

4. WebHooks 管理页面

点击 添加 webHook 按钮,打开添加 WebHooks 页面 添加 webHooks

5. 添加 WebHook 页面

添加WebHook页面

6. 填写 URL 和 WebHook 密码

填写URL和WebHook密码

7. 填写 URL 和 WebHook 签名密钥

填写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);