2016-03-27 17 views
-1

Ich versuche, JSON-Text mit POST-Anfrage mit cURL zu senden. Der JSON Text ist:Sende JSON über PHP POST (cURL)

{ "Kanal": "Mein Kanal", "username": "TriiNoxYs", "text": "Mein Text"}

Ich verwende diese Code:

<?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 ; 

?> 

Der Code funktioniert, aber ich möchte eine "Anhänge" Array in meinem JSON Text hinzuzufügen, wie folgt aus:

{ "Kanal": „Mein chann el "," Benutzername ":" TriiNoxYs "," Text ":" Mein Text "," Anhänge ": [{" text ":" Zeile 1 "," color ":" # 000000 "}, {" text ": "Leitung 2", "Farbe": "# ffffff"}]}

Also habe ich versucht, diese Daten zu meinem $ Array hinzuzufügen:

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

aber nicht funktioniert, die Post gesendet wird, aber meine „Anhänge“ wird ignoriert ... ich auch mit diesem Code direkt von einem Linux-Terminal versucht POST zu senden:

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

Und es funktioniert ... Ich verstehe einfach nicht, warum es mit manuellem POST und nicht mit php/curl arbeitet ...

Danke für Ihre Antworten, TriiNoxYs. PS: Sorry für mein schlechtes Englisch, ich bin Französisch ...

+0

Ich bin zu faul, um die Regeln zu überprüfen um zu sehen, ob ich auf Französisch antworten kann oder nicht, also bleibe ich jetzt auf Englisch. Was meinst du damit, dass die "Attachments" -Daten ignoriert werden? Meinst du das sie sie nicht in $ _POST existieren? Oder sind sie leer? – Technoh

+0

Wie kann ich es überprüfen? – TriiNoxYs

+0

Sie könnten den kompletten '$ _POST' auf der Empfängerseite' var_dump' machen, um die genaue JSON-Zeichenfolge zu sehen. – Technoh

Antwort

0

Sie tun double json_encode.

Zuerst vergleichen diese beiden:

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

Und:

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

Haben Sie das Problem? Sie setzen Ihren Schlüssel attachments als eine json-codierte Zeichenfolge. Wenn er an den Zielserver gesendet wird, wird er daher als Zeichenfolge '[{"text":"Line 1", "color":"#000000"}, {"text":"Line 2", "color":"#ffffff"}]' anstelle des erwarteten Arrays von Text-Farben-Paaren angezeigt. Nichts Besonderes hier, es ist rein ein Flüchtigkeitsfehler :)

Also dieses Problem zu beheben, statt json codierte Zeichenfolge im attachments Schlüssel senden, verwenden Sie stattdessen:

$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

Ooooh okay, es war dumm ... Danke für Ihre Hilfe! :) – TriiNoxYs