2017-09-01 91 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