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

Intuit集成创建发票时使用MySQL循环获取项目报错该如何解决?

问题根源

你当前的写法违反PHP基础语法:数组定义结构中不能直接嵌入SQL执行、循环这类过程性逻辑语句,你直接把查询和循环写在Line参数的数组里,实际生成的结构完全不符合Intuit接口要求的格式,自然会报数组/对象格式错误。

正确实现逻辑

  1. 提前单独执行MySQL查询,循环遍历结果集,逐个构造行项目数组,存入$lineItems数组变量
  2. 遍历过程中累加所有行项目的金额,得到实际的总金额$totalAmt
  3. 把构造完成的$lineItems变量直接传入Invoice::create的Line参数即可
// 第一步:先查询数据库,构造Line数组
$lineItems = [];
$totalAmt = 0;
$queryitems = 'SELECT * FROM 你的实际表名'; // 注意原代码里写的mydatabase是库名,此处要替换为你要查询的表名
$query_items = mysqli_query($con, $queryitems);
$lineNum = 1; // 行号需要按顺序递增,不能所有行都填1
while($row = mysqli_fetch_array($query_items)) {
    // 可根据业务需求,把下方固定值替换为$row中对应的数据库字段取值,比如Qty替换为$row['goods_num']
    $itemAmount = 200.00; // 实际场景可通过 $row['数量'] * $row['单价'] 计算得到
    $lineItems[] = [
        "Description"=> "Loop Description", 
        "DetailType"=> "SalesItemLineDetail", 
        "SalesItemLineDetail"=> [
            "TaxCodeRef"=> [
                "value"=> "TAX"
            ], 
            "Qty"=> 1, 
            "UnitPrice"=> 200, 
            "ItemRef"=> [
                "name"=> "Loop Name", 
                "value"=> "5"
            ]
        ], 
        "LineNum"=> $lineNum, 
        "Amount"=> $itemAmount, 
        "Id"=> (string)$lineNum
    ];
    $totalAmt += $itemAmount;
    $lineNum++;
}

// 第二步:传入构造好的数组调用创建接口
$theResourceObj = Invoice::create([
    "TotalAmt" => $totalAmt, 
    "Line" => $lineItems,
    "CustomerRef"=> [
        "value"=> 1
    ],
    "BillEmail" => [
        "Address" => "email@somewhere.com"
    ]
]);

额外注意事项

  • 若你之前单独生成$items变量传入也报错,大概率是构造数组时格式错误,比如没有正确把每个行项目追加到数组内,或者结构层级不符合接口要求,按上述示例写法即可避免
  • 如果行项目需要支持多税率,可对应修改TaxCodeRef的取值逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:06:03