2017-09-01 61 views
0

我需要您的幫助檢查什麼錯我的代碼。 我曾試圖發佈從郵遞員JSON數據,並將其returnen正確的響應。 但下面的代碼總是返回錯誤的響應。捲曲PHP JSON總是返回一個錯誤的反應

<?php 
$data_login = array('email'=>'[email protected]','password'=>'hahaha','confirmation_password'=>'hahaha'); 

$api_data = json_encode($data_login); 
$api_url = 'http://dev.badr.co.id/freedom/auth/register'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $api_url); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $api_data); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$result = curl_exec($ch); 

curl_close($ch); 

echo $result; 

錯誤的反應:

{"success":false,"message":"1000: Not a valid request"} 

正確的響應:

{ 
    "success": true, 
    "message": "user registration success", 
    "data": null 
} 

這返回正確的響應,如果我使用郵遞員發佈數據:

correct_response

+0

沒有API的細節 - 端點所期待的 - 我懷疑我們是否會多大幫助。 – Progrock

+0

它說:'{「success」:false,「message」:「1000:不是一個有效的請求」}'這意味着你沒有使用它API的告知方式 –

+0

我在api中運行CLI curl示例文檔並得到相同的迴應:'{「success」:false,「message」:「1000:不是有效的請求」}'。我不知道這是否是一個工作終點。從透過網站我甚至無法計算出Postman或Freedom Php是什麼。 – Progrock

回答

1

如果curl_exec()正在恢復false這意味着該請求被莫名其妙地失敗。

您可以通過使用curl_error() function來計算出如何操作。叫它curl_exec()curl_close()之間,它會返回與上出了什麼問題與請求信息的字符串。

+0

當我嘗試添加curl_error($ ch)時沒有任何回報 – kartaterazu

0

檢查初始化和執行cURL函數的返回值。 curl_error()curl_errno()將包含在故障情況下的進一步信息:

try { 
    $data_login = array('email'=>'[email protected]','password'=>'hahaha','confirmation_password'=>'hahaha'); 
    $api_data = json_encode($data_login); 
    $api_url = 'http://dev.badr.co.id/freedom/auth/register'; 

    $ch = curl_init(); 

    if (FALSE === $ch) 
     throw new Exception('failed to initialize'); 

    curl_setopt($ch, CURLOPT_URL, $api_url); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $api_data); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $result = curl_exec($ch); 

    if (FALSE === $result) 
     throw new Exception(curl_error($ch), curl_errno($ch)); 
} catch(Exception $e) { 

    echo sprintf(
     'Curl failed with error #%d: %s', 
     $e->getCode(), $e->getMessage()); 
} 
+0

此代碼返回空白頁 – kartaterazu

+0

@krishnaraj,而不是通過trigger_error代理異常,爲什麼不直接輸出此演示/示例的curl_error?雖然已經測試了代碼,但代碼對我來說不會出錯。我得到一個JSON響應。 – Progrock

+0

@kartaterazu可以在php.ini或您的Apache配置文件中關閉顯示錯誤。您可以在腳本中打開它: 的error_reporting(E_ALL); ini_set('display_errors',1); 您應該在PHP錯誤日誌中看到相同的消息。 – krishnaraj