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
相关产品推荐
相关产品推荐

