2013-02-27 3 views
0

Я попытался реализацией PHP следующего кода для POST JSON с помощью PHP: Curl (НЕКОТОРЫЕ FORCE.COM ВЕБСАЙТОВ является тегом, который означает URL, который я хочу POST):Не удается получить JSON POST с помощью PHP: Curl

$url = "<SOME FORCE.COM WEBSITE>"; 

$data = 
'application' => 
array 
(
    'isTest' => FALSE, 
    key => value, 
    key => value, 
    key => value, 
    ... 
) 

$ch = curl_init($url); 
$data_string = json_encode($data); 
curl_setopt($ch, CURLOPT_POST, true); 
//Send blindly the json-encoded string. 
//The server, IMO, expects the body of the HTTP request to be in JSON 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, 
array 
(
    'Content-Type:application/json', 
    'Content-Length: ' . strlen($data_string) 
) 
); 

$result = curl_exec($ch); 

curl_close($ch); 

print_r($result); 

echo '<pre>'; 
echo $_POST; 
$jsonStr = file_get_contents('php://input'); //read the HTTP body. 
var_dump($jsonStr); 
var_dump(json_decode($jsonStr)); 
echo '</pre>'; 

выход выше заключается в следующем:

"Your TEST POST is correct, please set the isTest (Boolean) attribute on the application to FALSE to actually apply." 
Arraystring(0) "" 
NULL 

ОК, выше подтверждает, что я форматированные данные JSON правильно, с помощью json_encode, а некоторые FORCE.COM ВЕБСАЙТОВ признает, что значение «isTest» является ЛОЖНЫЙ. Однако я ничего не получаю от «var_dump ($ jsonStr)» или «var_dump (json_decode ($ jsonStr))». Я решил просто игнорировать этот факт и установить «isTest» ЛОЖЬ, если предположить, что я не получаю никаких данных в формате JSON, потому что я установил «isTest» в TRUE, но хаос наступает, когда я установил «isTest» ЛОЖЬ:

[{"message":"System.EmailException: SendEmail failed. First exception on row 0; first error: REQUIRED_FIELD_MISSING, Missing body, need at least one of html or plainText: []\n\nClass.careers_RestWebService.sendReceiptEmail: line 165, column 1\nClass.careers_RestWebService.postApplication: line 205, column 1","errorCode":"APEX_ERROR"}] 
Arraystring(0) "" 
NULL 

Я до сих пор не получаю никаких данных JSON, и, в конечном итоге, письмо не было отправлено. Я считаю, что проблема связана с пустым телом электронной почты, потому что ничего не происходит из «var_dump ($ jsonStr)» или «var_dump (json_decode ($ jsonStr))». Можете ли вы помочь мне получить JSON POST? Я бы очень признателен за любые подсказки, предложения и т. Д. Спасибо.

+0

Проверьте заголовки ответа, например Content-type! – Bigood

+0

Где находится $ jsonStr? Где вы его назначаете? – Ghigo

ответ

0

Я решил этот вопрос самостоятельно. Я не был уверен, что я делаю это правильно или нет, но, оказывается, мой код был идеальным. Я продолжал обновлять свой веб-сайт, откуда я отправляю сообщения в САЙТ FORCE.COM. Я считаю, что у людей, управляющих НЕКОТОРЫМ ВЕБ-САЙТОМ FORCE.COM, возникали проблемы с их стороны. Ничего не случилось с тем, что я сделал. По какой-то причине у меня есть код 202 и некоторый таинственный текст, чтобы согласиться с ним. Я был бы рад показать результат, но я не хочу снова отправлять POST для людей, управляющих НЕКОТОРЫМ САЙТОМ FORCE.COM, с которым я ПОПУЛЯЮ. Спасибо, ребята, за вашу помощь.

Смежные вопросы