使用cURL在POST JSON中发送到服务的参数不正确

时间:2013-12-03 05:06:46

标签: php json post curl parameters

我正在将这个API适配器用于POST数据我们的OMS(订单管理系统)。而且我一直收到这个错误。我不知道如果它真的是一个错误,因为适配器已连接。 POST是问题所在。我正在使用JSON和cURL来传递要更新的数据。所以这是我的代码:

    $data = array(
       'package' => array(
            'tracking_number'  =>  '735897086',
    'package_status'    => 'failed',
            'failed_reason'     => 'other1',
            'update_at'        => '2013-11-22 09:58:39'
        )
    );

这就是我发布它的方式。

    $postdata = "apikey=$apikey&method=$method&data=$check";
    $ch = curl_init();

    //SSL verification fixed with this two codes
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);

    curl_setopt_array(
        $ch,
        array(

            CURLOPT_URL             => $url.'/webservice/',
            CURLOPT_FOLLOWLOCATION  => true,
            CURLOPT_VERBOSE         => true,
    CURLOPT_RETURNTRANSFER  => true,
            CURLOPT_CUSTOMREQUEST   => 'POST',
    CURLOPT_POSTFIELDS      => $postdata,
    CURLOPT_HTTPHEADER      => array('Content-type:  application/x-www-form-urlencoded')
        )
    );

    $result = curl_exec($ch);

这是我测试连接的代码,并检查POSTing是否成功。

    if(curl_exec($ch) === false) { echo 'Curl error: ' . curl_error($ch); } else { echo 'Operation completed without any errors'; } 
    $result = curl_exec($ch);
    echo $result;

    curl_close($ch);

我真的不知道为什么我一直得到“不正确的参数服务”。我已经查看了文档,参数是正确的。 :(

2 个答案:

答案 0 :(得分:0)

我确实认为这是因为你的POST变量是一个数组中的一个数组,所以你最终试图用你当前的方法做的事情是无效的。

在CURL中设置$ data之前,请尝试运行以下命令:

$data = http_build_query($data);

有关详细信息,请参阅PHP definition of http_build_query

答案 1 :(得分:0)

我忘了添加这个。我将其编码为JSON,这就是我使用数组的原因。

$check=json_encode($data);
echo $check;
$postdata = "method=$method&data=$check&apikey=$apikey";
$ch = curl_init();

在收到响应以检查它是否以JSON编码之前,我首先回应它。然后我收到了这个错误:

{ “包”:{ “ORDER_NUMBER”: “200118788”, “package_number”: “200118788-4274”, “TRACKING_NUMBER”: “735897086”, “程序包状态”: “失败”, “failed_reason”: “其他1” ,“update_at”:“2013-08-06 17:02:14”}}操作已完成且没有任何错误{“OmsSuccessResponse”:false,“message”:“发送到服务的参数不正确”,“package_status”:null} < / p>