Может кто-то может сказать мне, что с этим не так? Я никогда не пытался отправлять многодисковые массивы по curl/php, любая помощь была бы оценена мега.
Получая плохую реакцию с сервера, я думаю, что они получают некоторые данные, но их ответ не помогает. Попытка построить на их код, так что они не помогут в этом. (это не против их TOS, это просто то, что они не поддерживают)
Кроме того, я знаю, что файлы cookie/auth работают, потому что я делаю это по другой функции просто отлично, за исключением того, что один не является многомерным.
$post_data = array (
'tradeOrder' => array (
'FirstOrder' => array (
'Legs' => array (
'Id' => '0',
'SecurityId' => '643',
'SecurityName' => 'AAPL',
'SecurityExchange' => 'NASDAQ national market',
'Side' => 'Buy',
'Quantity' => '100'
),
'SymbolLastPrice' => '93.72',
'Price' => '93.75',
'StopPrice' => '0.01',
'Type' => 'Limit',
'TimeInForce' => 'Day',
'AllOrNone' => 'false',
'Exchange' => 'AUTO',
'TrailingAmount' => '0.01',
'TrailingAmountType' => 'Absolute',
'LimitOffset' => '0',
'LimitOffsetType' => 'Absolute',
'IsTrailingVisible' => 'false',
'IsLimitOffsetVisible' => 'false',
'IsTrailingAmountAbsolute' => 'true',
'IsLimitOffsetAbsolute' => 'true',
'ExecutionTarget' => 'New',
),
'AdvancedOrderType' => 'Simple',
'IsAdvancedOrder' => 'false'
)
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://demo-trading.just2trade.com/TradeTicket/PlaceOrder");
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
//curl_setopt($ch, CURLOPT_HEADER, true);
//curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $result_array['access_token']]);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
curl_setopt($ch, CURLOPT_ENCODING,'gzip');
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
Формы, которые я пытаюсь опубликовать следующим образом
{
"tradeOrder": {
"FirstOrder": {
"Legs": [{
"Id": 0,
"SecurityId": 643,
"SecurityName": "AAPL",
"SecurityExchange": "NASDAQ national market",
"Side": "Buy",
"Quantity": 100
}],
"SymbolLastPrice": 93.72,
"Price": 93.72,
"StopPrice": 0.01,
"Type": "Limit",
"TimeInForce": "Day",
"AllOrNone": false,
"Exchange": "AUTO",
"TrailingAmount": 0.01,
"TrailingAmountType": "Absolute",
"LimitOffset": 0,
"LimitOffsetType": "Absolute",
"IsTrailingVisible": false,
"IsLimitOffsetVisible": false,
"IsTrailingAmountAbsolute": true,
"IsLimitOffsetAbsolute": true,
"ExecutionTarget": "New"
},
"AdvancedOrderType": "Simple",
"IsAdvancedOrder": false
}
}
Если вы хотите опубликовать точно предоставленный образец JSON, основная ошибка в этой строке:
'Legs' => array ( ... ),
Этот код создает этот JSON:
{"FirstOrder":{"Legs":{"Id":"0",...}},...}
вместо:
{"FirstOrder":{"Legs":[{"Id":"0",...}]},...}
Измените линию "Ноги" следующим образом:
'Legs' => array( array(
'Id' => '0',
'SecurityId' => '643',
'SecurityName' => 'AAPL',
'SecurityExchange' => 'NASDAQ national market',
'Side' => 'Buy',
'Quantity' => '100'
)),
Также (хотя я не думаю, что это может вызвать проблемы), если вы хотите, чтобы числа, закодированные как числа и булевы, закодированы как логические, удалите относительные кавычки обмотки:
'SymbolLastPrice' => 93.72,
(...)
'AllOrNone' => false,
(...)
'LimitOffset' => 0,
(...)
Ваша терминология несколько смущена. Ни PHP-массивы, ни JSON не являются многомерными; они вложены. Кроме того, никакая форма HTML не создает JSON-кодированные данные. И да, это API.
Оставляя комментарии в стороне, только поставщик услуг может дать вам окончательный ответ о том, почему ваш контент неприемлем, однако логические значения в вашем примере JSON были определены как строки в вашем PHP-коде, например
'IsTrailingAmountAbsolute' => 'true'
Должно быть
'IsTrailingAmountAbsolute' => true