You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现AppSumo Webhook的URL验证,响应指定事件?

解决AppSumo Webhook验证问题的PHP实现

核心修改方向

  • 新增JSON响应头,确保返回格式符合AppSumo要求
  • 解析Webhook发送的JSON payload,提取事件类型
  • 验证事件类型是否为activate/deactivate/purchase三类之一
  • 返回200 OK状态及指定结构的JSON响应
  • 保留原有数据记录功能,同时补充错误日志排查机制

完整代码实现

<?php
require_once __DIR__ . '/vendor/autoload.php';
require_once 'config.php';

ini_set("error_log", "appsumo.errors.log.txt");

// 设置JSON响应头,确保AppSumo能正确解析返回内容
header('Content-Type: application/json');
// 明确返回200 OK状态码
http_response_code(200);

// 获取POST原始数据
$data = file_get_contents('php://input');
if (empty($data)) {
    echo json_encode(['success' => false, 'message' => 'No data received']);
    exit;
}

// 解析JSON payload为关联数组
$payload = json_decode($data, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    error_log('Invalid JSON payload received: ' . $data);
    echo json_encode(['success' => false, 'message' => 'Invalid JSON format']);
    exit;
}

// 提取事件类型,兼容字段不存在的情况
$eventType = $payload['event_type'] ?? '';
// 定义允许的事件类型列表
$validEventTypes = ['activate', 'deactivate', 'purchase'];

// 验证事件类型合法性
if (!in_array($eventType, $validEventTypes)) {
    error_log('Unsupported event type received: ' . $eventType);
    echo json_encode(['success' => false, 'message' => 'Unsupported event type']);
    exit;
}

// 将Webhook数据追加写入日志文件
$logFile = fopen('appsumo-webhook-data.txt', "a");
if ($logFile) {
    fwrite($logFile, $data . PHP_EOL . PHP_EOL);
    fclose($logFile);
} else {
    error_log('Failed to open log file: appsume-webhook-data.txt');
}

// 返回AppSumo验证要求的JSON响应
echo json_encode([
    'success' => true,
    'event_type' => $eventType
]);
?>

关键说明

  1. 响应头设置:必须优先设置Content-Type: application/json,否则AppSumo无法识别返回的JSON内容
  2. 事件类型校验:严格检查event_type字段是否属于允许的三类,避免处理非法事件请求
  3. 错误处理:针对空数据、无效JSON、非法事件类型分别返回错误响应,并记录到错误日志,便于后续排查
  4. 数据记录:保留原有日志功能,同时增加文件打开失败的错误日志,确保数据记录环节的可靠性
  5. 状态码:明确返回200 OK,完全满足AppSumo的Webhook验证要求

内容的提问来源于stack exchange,提问作者anjanesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:57:07