2016-03-27 27 views
-1

POSTリクエストでJSONテキストをcURLを使用して送信しようとしています。 JSONテキストは次のとおりです。PHP POST経由でJSONを送信する(cURL)

{ "チャンネル": "マイチャンネル"、 "ユーザ名": "TriiNoxYs"、 "テキスト": "マイテキスト"}

私はこれを使用していますコード:

<?php 

    $data = array(
     'username' => 'TriiNoxYs', 
     'channel'  => 'My channel' 
     'text'  => 'My text', 
    );                  
    $data_json = json_encode($data);    

    $curl = curl_init('my-url');                  
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");                  
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json);  
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POST, 1);   
    curl_setopt($curl, CURLOPT_HTTPHEADER, array(                   
     'Content-Type: application/json',                     
     'Content-Length: ' . strlen($data_json))                  
    );                             

    $result = curl_exec($curl); 
    echo $result ; 

?> 

コードは動作しますが、私はこのような "添付ファイル" 私のJSONテキストの配列、追加したい:

{ "チャンネル":「マイchannを"テキスト": "テキスト": "行1"、 "色": "#000000"}、{"テキスト": "私は私の$ data配列にこれを追加しようとしました "#1 FFFFFF"}]}

ので: "ライン2"、 "色"

'attachments' => '[{"text":"Line 1", "color":"#000000"}, {"text":"Line 2", "color":"#ffffff"}]', 

しかし、働いていない、ポストは送信されますが、私の「添付ファイル」は無視されます... 私もこのコードで、Linuxのターミナルから直接POSTを送信しようとした:

POST https://myurl.com 
payload={"channel": "My channel", "username": "TriiNoxYs", "text": "My text", "attachments": [{"text":"Line 1","color":"#000000"},{"text":"Line 2","color":"#ffffff"}]} 

そして、それは働いています... 私はなぜそれが手動のPOSTで動作しているのか、PHP /カールではないのか分かりません...

あなたの答えは、TriiNoxYsありがとう。 PS:悪い英語で申し訳ありませんが、フランス語です...

+0

を私はルールをチェックするのが面倒です私がフランス語で答えることができるかどうかを見るために、私は今のところ英語を固執します。 「添付ファイル」のデータが無視されているということはどういう意味ですか?あなたは彼らが$ _POSTに存在しないということを意味しますか?または、それらは空ですか? – Technoh

+0

どうすれば確認できますか? – TriiNoxYs

+0

受信側の完全な '$ _POST'を' var_dump 'して、正確なJSON文字列を見ることができます。 – Technoh

答えて

0

double json_encodeをやっています。

まず、これら両者を比較する:

$json1 = json_encode([ 
    'firstname' => 'Jon', 
    'lastname' => 'Doe', 
    'hp' => [ 
    'cc' => '+1', 
    'number' => '12345678' 
    ] 
); 
//You should get 
//{"firstname":"Jon","lastname":"Doe","hp":{"cc":"+1","number":"12345678"}} 

そして、この:

$json2 = json_encode([ 
    'firstname' => 'Jon', 
    'lastname' => 'Doe', 
    'hp' => "['cc' => '+1', 'number' => '12345678']" 
]); 
//You should get 
//{"firstname":"Jon","lastname":"Doe","hp":"['cc' => '+1', 'number' => '12345678']"} 

は、あなたが問題を参照していますか? attachmentsキーをjsonでエンコードされた文字列として設定しているため、ターゲットサーバーに送信されたときに、期待されるテキスト - カラーペアの配列の代わりに文字列'[{"text":"Line 1", "color":"#000000"}, {"text":"Line 2", "color":"#ffffff"}]'と見なされます。ここでは空想何も、それは、だから、この問題を解決するために、純粋にケアレスミス:)

ません代わりにattachmentsキーでJSONエンコードされた文字列を送信するのではなく、これを使用する:

$data = array(
    'username' => 'TriiNoxYs', 
    'channel'  => 'My channel' 
    'text'  => 'My text', 
    'attachments' => array(
     array(
      "text" => "Line 1", 
      "color" => "#000000", 
     ), 
     array(
      "text" => "Line 2", 
      "color" => "#ffffff" 
     ) 
    ) 
); 
+0

大丈夫、それは馬鹿だった... あなたの助けてくれてありがとう! :) – TriiNoxYs

関連する問題