簡體   English   中英

PHP CURL 多維/JSON Post

[英]PHP CURL Multidimensional/JSON Post

有人可以告訴我這有什么問題嗎? 我從未嘗試過通過 curl/php 發布 multidim 數組,任何幫助將不勝感激。

從服務器得到不好的響應,我認為他們正在獲取一些數據,但他們的響應沒有幫助。 試圖建立在他們的代碼上,所以他們不會幫助這種事情。 (這並不違反他們的 TOS,只是他們不支持的東西)

另外,我知道 cookie 文件/身份驗證正在工作,因為我在另一個函數上執行此操作很好,除了一個不是多維的。

$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM