PHP CURL Многомерная / JSON Post

1

Может кто-то может сказать мне, что с этим не так? Я никогда не пытался отправлять многодисковые массивы по 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
    }
} 
  • 1
    Ваш вопрос не о многомерном массиве, а о строке JSON. Вы уверены, что ваш JSON соответствует правилам API?
  • 0
    Есть ли у вас ошибка скручивания, т. Е. Произошел сбой скручивания или произошел сбой приложения, использующего его. Посмотрите здесь php.net/manual/en/function.curl-error.php . Используйте это, чтобы получить код от curl после совершения звонка. Кроме того, какой код ответа HTTP вы получили с сервера, 200, 4nn, 5nn и т. Д.?
Показать ещё 1 комментарий
Теги:
arrays
curl

2 ответа

1
Лучший ответ

Если вы хотите опубликовать точно предоставленный образец 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,
(...)
0

Ваша терминология несколько смущена. Ни PHP-массивы, ни JSON не являются многомерными; они вложены. Кроме того, никакая форма HTML не создает JSON-кодированные данные. И да, это API.

Оставляя комментарии в стороне, только поставщик услуг может дать вам окончательный ответ о том, почему ваш контент неприемлем, однако логические значения в вашем примере JSON были определены как строки в вашем PHP-коде, например

    'IsTrailingAmountAbsolute' => 'true'

Должно быть

     'IsTrailingAmountAbsolute' => true
  • 0
    Я имел в виду, что это не API, как в публичном API с документацией. Я думаю, это их внутренний API, так что вы правы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню