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

Tilda与Bitrix CRM(本地版)表单Webhook集成故障排查

Tilda表单与Bitrix CRM本地版集成问题排查

我用Tilda搭建网站,搭配Bitrix CRM本地版,尝试通过Webhook实现Tilda表单与CRM的集成。目前有8个仅隐藏字段内容不同的相似表单,以及1个独立表单,对应的PHP文件部署在服务器(示例地址:https://b24.thesite.ru/myphp_1.php),但集成功能无法正常运行。

我的PHP代码如下:

<?php

$name = $_POST['name'];
$phone = $_POST['phone'];
$wood_type = $_POST['wood_type'];
$is_designer = isset($_POST['is_designer']) ? 'true' : 'false';

$queryUrl = 'https://b24.thesite.ru/rest/93/qqqqqq1q1q1q1qqqqq/crm.lead.add.json';

$queryData = array(
    'fields' => array(
        'title' => 'Новая заявка с mysite.ru',
        'name' => $name,
        'phone' => array(array('VALUE' => $phone, 'VALUE_TYPE' => 'WORK')),
        'select' => $select,
        'is_designer' => $is_designer,
    ),
);

$curl = curl_init($queryUrl);

curl_setopt_array($curl, array(
    CURLOPT_SSL_VERIFYPEER => 0,
    CURLOPT_POST => 1,
    CURLOPT_HEADER => 0,
    CURLOPT_URL => $queryUrl,
    CURLOPT_POSTFIELDS => $queryData,
));

$result = curl_exec($curl);
curl_close($curl);

echo "<pre>";
print_r($result);
print_r(json_decode($result, true));
echo "</pre>";

?>

Tilda返回错误信息:

[CODE: 500] webhook URL not avaliable. HTTP/2 500 server: nginx date: Tue, 26 Sep 2023 06:44:07 GMT content-type: text/html; charset = UTF-8 content length:0 vary HTTPS

代码存在的问题及修复方案

  • 未定义变量$select:代码中$queryData['fields']['select']使用了未初始化的$select变量,会触发PHP警告,甚至导致脚本中断执行。如果不需要该字段直接删除;如果需要,先初始化变量,比如$select = $_POST['select'] ?? '';。

  • POST数据格式错误:Bitrix REST API要求请求体为JSON或URL编码格式,但你直接传递PHP数组,curl会自动转为multipart/form-data格式,而Bitrix不支持该格式。需要将数组转为JSON字符串,并设置Content-Type请求头为application/json。

  • 未处理curl执行错误:没有检查curl是否成功执行,无法排查连接超时、DNS解析失败等底层问题,建议添加错误判断逻辑。

  • 潜在的未初始化变量风险:$wood_type被获取但未使用,且未做isset判断,如果表单中没有这个字段会触发PHP警告,建议改为$wood_type = $_POST['wood_type'] ?? '';。

  • SSL验证关闭的安全问题:CURLOPT_SSL_VERIFYPEER => 0会跳过SSL证书验证,生产环境存在安全风险,建议配置正确的SSL证书后开启验证(设为1)。

修正后的代码示例

<?php

// 初始化变量,避免未定义警告
$name = $_POST['name'] ?? '';
$phone = $_POST['phone'] ?? '';
$wood_type = $_POST['wood_type'] ?? '';
$is_designer = isset($_POST['is_designer']) ? 'true' : 'false';
// 初始化select变量(不需要则删除此行)
$select = $_POST['select'] ?? '';

$queryUrl = 'https://b24.thesite.ru/rest/93/qqqqqq1q1q1q1qqqqq/crm.lead.add.json';

$queryData = array(
    'fields' => array(
        'title' => 'Новая заявка с mysite.ru',
        'name' => $name,
        'phone' => array(array('VALUE' => $phone, 'VALUE_TYPE' => 'WORK')),
        'select' => $select, // 不需要则删除
        'is_designer' => $is_designer,
    ),
);

$curl = curl_init($queryUrl);

// 将数组转为JSON字符串
$postData = json_encode($queryData);

curl_setopt_array($curl, array(
    CURLOPT_SSL_VERIFYPEER => 1, // 生产环境建议开启SSL验证
    CURLOPT_POST => 1,
    CURLOPT_HEADER => 0,
    CURLOPT_URL => $queryUrl,
    CURLOPT_POSTFIELDS => $postData,
    CURLOPT_HTTPHEADER => array(
        'Content-Type: application/json', // 设置正确的请求头
        'Content-Length: ' . strlen($postData)
    ),
    CURLOPT_RETURNTRANSFER => 1, // 让curl返回结果字符串而非直接输出
));

$result = curl_exec($curl);

// 检查curl执行错误
if(curl_errno($curl)) {
    echo 'Curl错误: ' . curl_error($curl);
    exit;
}

curl_close($curl);

echo "<pre>";
print_r($result);
print_r(json_decode($result, true));
echo "</pre>";

?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:30:29