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

PHP向CRM批量发送JSON数据遇验证错误求助

批量发送发票到CRM的解决方案

错误原因分析

你遇到的Client.ValidationError错误,本质是CRM接口要求请求体必须是单个JSON对象,且该对象仅包含一个方法名作为键(比如scf_add_order)。而你之前用$add_invoice[]生成的是多个scf_add_order对象组成的数组,不符合接口的参数格式要求。

修正后的代码实现

1. 构造批量发票数据

将多个订单的信息放入scf_add_order的card字段数组中,而非生成多个scf_add_order对象:

// 初始化批量请求结构
$add_invoice = array(
    "scf_add_order" => array(
        "session_id" => $login['msg'],
        "company_code" => 1,
        "section" => 1,
        "card" => array() // 这里放所有订单的数组
    )
);

// 添加第一个订单
$add_invoice["scf_add_order"]["card"][] = array(
    "_key_company" => "312",
    "_key_customer" => array("customercode" => $customercode1),
    "invoiceno" => "INV000001",
    "m_units" => array(array("_key_unit" => $stock_key1))
);

// 添加第二个订单
$add_invoice["scf_add_order"]["card"][] = array(
    "_key_company" => "312",
    "_key_customer" => array("customercode" => $customercode2),
    "invoiceno" => "INV000002",
    "m_units" => array(array("_key_unit" => $stock_key2))
);

// 可继续添加更多订单...

2. 修正变量名并发送请求

原代码中json_encode($siparis_ekle,true)存在变量名错误(应该是$add_invoice),修正后完整请求代码:

$invoice = json_encode($add_invoice, true);
file_put_contents('invoice.json', $invoice);

$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $invoice);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($invoice))
);
curl_setopt($curl, CURLOPT_URL, $url);
$result = curl_exec($curl);
$json = json_decode($result, true);
curl_close($curl);

关键说明

  • 确保请求体是单个JSON对象,根节点仅保留scf_add_order这一个方法键
  • 所有批量订单都嵌套在scf_add_order的card数组中,符合接口对参数结构的校验要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:45:36