Square Connect - 当字段作为数组发送时出现 OrdersApi 错误 EXPECTED_ARRAY
Square Connect - OrdersApi Error EXPECTED_ARRAY when field was sent as an array
我一直在使用 square-connect api,但我在尝试创建订单时遇到了问题。我有 followed the docs 用于创建订单。下面是有问题的代码。
$api = new \SquareConnect\Api\OrdersApi();
$location = $this->get_location();
if (!empty($items)) {
if (is_string($items)) {
$items = json_decode($items);
}
// print_r($items);
if (!is_array($items)) {
// echo "Items is not an array -- exiting now";
return false;
}
$order_data = [];
$order_data['idempotency_key'] = uniqid();
$order_data['line_items'] = [];
foreach ($items as $key => $li) {
$order_data['line_items'][] = [
'name' => $li->name,
'base_price_money' => ['amount' => ($li->price * 100)],
'quantity' => $li->qty
];
}
$order_data['taxes'] = [
'type' => 'ADDITIVE',
'name' => 'State Sales Tax',
'percentage' => '7'
];
print_r($order_data);
// exit;
$apiResponse = $api->createOrder($location, new \SquareConnect\Model\CreateOrderRequest($order_data));
$order = $apiResponse->getOrder();
print_r($apiResponse);
print_r($order);
}
当我发出请求时,出现以下错误
Message: [HTTP/1.1 400 Bad Request] {"errors":[{"category":"INVALID_REQUEST_ERROR","code":"EXPECTED_ARRAY","detail":"Expected an array.","field":"taxes"}]}
我检查过 taxes 字段是一个数组
["taxes"]=>
array(3) {
["type"]=>
string(8) "ADDITIVE"
["name"]=>
string(15) "State Sales Tax"
["percentage"]=>
string(1) "7"
}
如有任何帮助,我们将不胜感激
编辑:print_r($items) 输出
Array
(
[0] => stdClass Object
(
[id] => 24
[square_id] => L7PCKMIEDQFDR34IZ3E3VIDO
[variation_id] => SUJCAPZJQLM7VGAILP66NMMM
[variation_name] => Regular
[qty] => 1
[price] => 3.99
[name] => Ham & Cheese
)
[1] => stdClass Object
(
[id] => 4
[square_id] => 37RNDFXRVJPLR4UT7UXS5QOO
[variation_id] => 27Z5H3V6ZRHW2X5LVNGXOARY
[variation_name] => Starbucks DOUBLESHOT Expresso
[qty] => 1
[price] => 2.5
[name] => Starbucks DOUBLESHOT Expresso
)
)
var_dump(order_data)...
array(3) {
["idempotency_key"]=>
string(13) "59c138b7a67e2"
["line_items"]=>
array(2) {
[0]=>
array(3) {
["name"]=>
string(12) "Ham & Cheese"
["base_price_money"]=>
array(1) {
["amount"]=>
float(399)
}
["quantity"]=>
string(1) "1"
}
[1]=>
array(3) {
["name"]=>
string(29) "Starbucks DOUBLESHOT Expresso"
["base_price_money"]=>
array(1) {
["amount"]=>
float(250)
}
["quantity"]=>
string(1) "1"
}
}
["taxes"]=>
array(3) {
["type"]=>
string(8) "ADDITIVE"
["name"]=>
string(15) "State Sales Tax"
["percentage"]=>
string(1) "7"
}
}
这里的问题是您需要提供一个税对象数组,这很令人困惑,因为您使用的是带有 PHP 数组的 SDK 的隐式对象创建功能。在 JSON,您的税金如下:
"taxes":[
{
"type":"additive"
...
}
]
(注意这是一个对象数组),您提供:
"taxes":{
"type":"additive"
...
}
因此,如果您只想快速更改代码,您应该这样做:
$order_data['taxes'] =array(array(
'type' => 'ADDITIVE',
'name' => 'State Sales Tax',
'percentage' => '7'
));
如果你想在你的代码中更加冗长,你可以这样做:
$order_data = new \SquareConnect\Model\CreateOrderRequest();
$taxes = \SquareConnect\Model\CreateOrderRequestTax();
$taxes->setType('ADDITIVE');
...
$order_data->setTaxes($taxes);
显然隐式数组方式更简单一些,但在 PHP 中可能会造成混淆。有帮助吗?
我一直在使用 square-connect api,但我在尝试创建订单时遇到了问题。我有 followed the docs 用于创建订单。下面是有问题的代码。
$api = new \SquareConnect\Api\OrdersApi();
$location = $this->get_location();
if (!empty($items)) {
if (is_string($items)) {
$items = json_decode($items);
}
// print_r($items);
if (!is_array($items)) {
// echo "Items is not an array -- exiting now";
return false;
}
$order_data = [];
$order_data['idempotency_key'] = uniqid();
$order_data['line_items'] = [];
foreach ($items as $key => $li) {
$order_data['line_items'][] = [
'name' => $li->name,
'base_price_money' => ['amount' => ($li->price * 100)],
'quantity' => $li->qty
];
}
$order_data['taxes'] = [
'type' => 'ADDITIVE',
'name' => 'State Sales Tax',
'percentage' => '7'
];
print_r($order_data);
// exit;
$apiResponse = $api->createOrder($location, new \SquareConnect\Model\CreateOrderRequest($order_data));
$order = $apiResponse->getOrder();
print_r($apiResponse);
print_r($order);
}
当我发出请求时,出现以下错误
Message: [HTTP/1.1 400 Bad Request] {"errors":[{"category":"INVALID_REQUEST_ERROR","code":"EXPECTED_ARRAY","detail":"Expected an array.","field":"taxes"}]}
我检查过 taxes 字段是一个数组
["taxes"]=>
array(3) {
["type"]=>
string(8) "ADDITIVE"
["name"]=>
string(15) "State Sales Tax"
["percentage"]=>
string(1) "7"
}
如有任何帮助,我们将不胜感激
编辑:print_r($items) 输出
Array
(
[0] => stdClass Object
(
[id] => 24
[square_id] => L7PCKMIEDQFDR34IZ3E3VIDO
[variation_id] => SUJCAPZJQLM7VGAILP66NMMM
[variation_name] => Regular
[qty] => 1
[price] => 3.99
[name] => Ham & Cheese
)
[1] => stdClass Object
(
[id] => 4
[square_id] => 37RNDFXRVJPLR4UT7UXS5QOO
[variation_id] => 27Z5H3V6ZRHW2X5LVNGXOARY
[variation_name] => Starbucks DOUBLESHOT Expresso
[qty] => 1
[price] => 2.5
[name] => Starbucks DOUBLESHOT Expresso
)
)
var_dump(order_data)...
array(3) {
["idempotency_key"]=>
string(13) "59c138b7a67e2"
["line_items"]=>
array(2) {
[0]=>
array(3) {
["name"]=>
string(12) "Ham & Cheese"
["base_price_money"]=>
array(1) {
["amount"]=>
float(399)
}
["quantity"]=>
string(1) "1"
}
[1]=>
array(3) {
["name"]=>
string(29) "Starbucks DOUBLESHOT Expresso"
["base_price_money"]=>
array(1) {
["amount"]=>
float(250)
}
["quantity"]=>
string(1) "1"
}
}
["taxes"]=>
array(3) {
["type"]=>
string(8) "ADDITIVE"
["name"]=>
string(15) "State Sales Tax"
["percentage"]=>
string(1) "7"
}
}
这里的问题是您需要提供一个税对象数组,这很令人困惑,因为您使用的是带有 PHP 数组的 SDK 的隐式对象创建功能。在 JSON,您的税金如下:
"taxes":[
{
"type":"additive"
...
}
]
(注意这是一个对象数组),您提供:
"taxes":{
"type":"additive"
...
}
因此,如果您只想快速更改代码,您应该这样做:
$order_data['taxes'] =array(array(
'type' => 'ADDITIVE',
'name' => 'State Sales Tax',
'percentage' => '7'
));
如果你想在你的代码中更加冗长,你可以这样做:
$order_data = new \SquareConnect\Model\CreateOrderRequest();
$taxes = \SquareConnect\Model\CreateOrderRequestTax();
$taxes->setType('ADDITIVE');
...
$order_data->setTaxes($taxes);
显然隐式数组方式更简单一些,但在 PHP 中可能会造成混淆。有帮助吗?