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

无需插件实现Typeform表单数据通过Webhook同步至WordPress

Typeform Webhook 同步数据到WordPress(无插件实现)

1. 配置Typeform Webhook

登录Typeform后台,找到目标表单的「Webhooks」设置,添加新Webhook,将URL设为你的WordPress自定义API端点,示例:https://你的域名/wp-json/typeform/v1/submit

2. 在WordPress中创建自定义REST端点

将以下代码添加到主题的functions.php文件,或创建一个极简自定义插件:

// 注册Typeform提交的REST路由
add_action('rest_api_init', function () {
    register_rest_route('typeform/v1', '/submit', array(
        'methods' => 'POST',
        'callback' => 'handle_typeform_submission',
        'permission_callback' => '__return_true', // 生产环境建议替换为IP白名单/签名验证等严格权限逻辑
    ));
});

// 处理Typeform提交的核心回调
function handle_typeform_submission(WP_REST_Request $request) {
    // 验证Typeform签名(防止恶意请求,建议开启)
    $typeform_secret = '你的Typeform Webhook密钥'; // 在Typeform Webhook设置页获取
    $signature = $request->get_header('Typeform-Signature');
    $raw_payload = $request->get_body();
    
    if (!verify_typeform_signature($signature, $raw_payload, $typeform_secret)) {
        return new WP_REST_Response('无效请求', 403);
    }

    // 解析提交数据
    $submission = json_decode($raw_payload, true);
    if (empty($submission)) {
        return new WP_REST_Response('数据解析失败', 400);
    }

    // 提取表单字段值(根据你的表单字段类型调整)
    $form_data = [];
    foreach ($submission['form_response']['answers'] as $answer) {
        switch ($answer['type']) {
            case 'text':
                $form_data[$answer['field']['ref']] = $answer['text'];
                break;
            case 'choice':
                $form_data[$answer['field']['ref']] = $answer['choice']['label'];
                break;
            case 'email':
                $form_data[$answer['field']['ref']] = $answer['email'];
                break;
            case 'number':
                $form_data[$answer['field']['ref']] = $answer['number'];
                break;
            // 按需添加更多字段类型的处理逻辑
        }
    }

    // 将数据存储为WordPress自定义文章(示例)
    $post_args = array(
        'post_title' => 'Typeform提交: ' . ($form_data['username'] ?? '匿名用户'),
        'post_content' => json_encode($form_data, JSON_PRETTY_PRINT),
        'post_status' => 'publish',
        'post_type' => 'typeform_submission', // 需提前注册该自定义文章类型
    );

    $post_id = wp_insert_post($post_args);
    if (is_wp_error($post_id)) {
        return new WP_REST_Response('存储失败: ' . $post_id->get_error_message(), 500);
    }

    // 可选:将字段单独存储为文章元数据
    foreach ($form_data as $key => $value) {
        update_post_meta($post_id, 'tf_' . $key, $value);
    }

    return new WP_REST_Response('提交同步成功', 200);
}

// Typeform签名验证工具函数
function verify_typeform_signature($signature, $payload, $secret) {
    if (empty($signature)) return false;
    list($timestamp_str, $hash_str) = explode(',', $signature);
    $timestamp = str_replace('t=', '', $timestamp_str);
    $received_hash = str_replace('v1=', '', $hash_str);

    // 防止重放攻击:验证时间戳在5分钟内
    if (time() - $timestamp > 300) {
        return false;
    }

    $expected_hash = hash_hmac('sha256', $timestamp . '.' . $payload, $secret);
    return hash_equals($expected_hash, $received_hash);
}

3. 补充配置

如果没有typeform_submission自定义文章类型,添加以下代码到functions.php注册:

add_action('init', function() {
    register_post_type('typeform_submission', array(
        'labels' => array('name' => 'Typeform提交记录'),
        'public' => true,
        'show_in_rest' => true,
        'supports' => array('title', 'content'),
        'menu_icon' => 'dashicons-forms',
    ));
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:00:59