感谢您回复约翰!再一次,在这门课上的出色工作让我的生活变得更加轻松。
为了简单起见,这就是我最终所做的。我相信如果有必要可以对此进行阐述,但对我来说这很完美。我没有在数组的同一级别上传递多个行项,而是将行项创建为它们自己的数组,然后修改 setParamaters() 以遍历该数组。
private function setParameters($xml, $array)
{
if (is_array($array))
{
foreach ($array as $key => $value)
{
if (is_array($value))
{
if($key == 'lineItems'){
foreach($value as $lineitems){
$line_item = $xml->addChild('lineItems');
foreach($lineitems as $itemkey => $itemvalue) {
$line_item->addChild($itemkey, $itemvalue);
}
}
}
else
{
$xml->addChild($key);
$this->setParameters($xml->$key, $value);
}
}
else
{
$xml->$key = $value;
}
}
}
}
这完全符合我的需求,并且做到了,因此除了嵌套 lineItems 数组外,我无需在前端进行任何更改。所以我发送的数组看起来更像这样:
["lineItems"]=>
array(2) {
[0]=>
array(6) {
["itemId"]=>
string(9) "ITEM00010"
["name"]=>
string(21) "Blah Blah"
["description"]=>
string(21) "Blah Blah Description"
["quantity"]=>
string(1) "1"
["unitPrice"]=>
string(4) "100"
["taxable"]=>
string(5) "false"
}
[1]=>
array(6) {
["itemId"]=>
string(9) "ITEM00011"
["name"]=>
string(25) "Thing Thing"
["description"]=>
string(25) "Thing Thing Description"
["quantity"]=>
string(1) "2"
["unitPrice"]=>
string(3) "50"
["taxable"]=>
string(5) "false"
}
}
此外,对于那些希望为订单项构建数组的人,我这样做了:
foreach ($services as $key => $service){
$line_items["lineItems"][] = array(
'itemId' => 'ITEM000'.$key,
'name' => $service->name,
'description' => $service->name,
'quantity' => $service_count[$key],
'unitPrice' => $service->price,
'taxable' => 'false'
);
}
然后将它添加到我传递给 AuthnetXML 实例的 transaction_array 中。
再次感谢!
乔尔