0

I am using an API and the documentation for cURL from terminal formats data like this:

 -d '{
    "from_country": "US",
    "from_zip": "92093",
    "from_state": "CA",
    "from_city": "La Jolla",
    "from_street": "9500 Gilman Drive",
    "to_country": "US",
    "to_zip": "90002",
    "to_state": "CA",
    "to_city": "Los Angeles"
    //etc
}'

I'm using PHP cURL to submit data, and I get this error:

{"error":"Bad Parameter Format","detail":"parsing JSON, got 822: unexpected token at 'from_country:US,from_zip:11111,from_state:CO,from_city:Denver,from_street:17282+Glenarm+Street%2C+Suite+400,to_country:US,to_zip:80602,to_state:Colorado,to_city:Thornton,to_street:1551+Claude+Ct,amount:1099,shipping:0,'","status":"400"}

It looks like my some spacing getting urlencoded with "+" and "%2C" adding a "" at the end. Here is my PHP cURL code:

$url = "https://api.sandbox.webservice.com/v2/data";
    //POST vars
    $to_country     = $_POST['Country'];
    $to_zip         = filter_var($_POST["Zip"], FILTER_SANITIZE_STRING);
    $to_state       = $_POST['State'];
    $to_city        = filter_var($_POST["City"], FILTER_SANITIZE_STRING);
    $to_street      = filter_var($_POST["Address"], FILTER_SANITIZE_STRING);
    $amount         = "1099";
    $shipping       = "0";

    //fields
    $fields = array(
        "to_zip"=>urlencode($to_zip),
        "to_state"=>urlencode($to_state),
        "to_city"=>urlencode($to_city),
        "to_street"=>urlencode($to_street),
        "amount"=>urlencode($amount),
        "shipping"=>urlencode($shipping)
    );

    foreach($fields as $key=>$value) { $fields_string .= $key.':'.$value.'&'; }
    $fields_string = rtrim($fields_string,'& ');
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Authorization: Bearer xxxxxxxxx',
        'Content-Type: application/json'
    ));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    echo $output;
    curl_close($ch);

I have tried removing the urlencode from my $fields array - no difference. How can I format the cURL data I send w/PHP to "key":"value"?

I changed:

foreach($fields as $key=>$value) { $fields_string .= $key.':'.$value.'&'; }
$fields_string = rtrim($fields_string,'& ');

To

json_encode($fields);

and get this error {"error":"Bad Parameter Format","detail":"parsing JSON, got 822: unexpected token at '------------------------------9dcc56a2c7b4\r\nContent-Disposition: form-data; name="from_country"\r\n\r\nUS\r\n------------------------------9dcc56a2c7b4\r\nContent-Disposition: form-data; name="from_zip"\r\n\r\n80541\r\n------------------------------9dcc56a2c7b4\r\nContent-Disposition: form-data; name="from_state"\r\n\r\nCO\r\n------------------------------9dcc56a2c7b4\r\nContent-Disposition: form-data; name="from_city"\r\n\r\nDenver\r\n------------------------------9dcc56a2c7b4\r\nContent-Disposition: form-data; name="from_street"\r\n\r\n1333+Glenarm+Street%2C+Suite+400\r\n------------------------------9dcc56a2c7b4\r\nContent-Disposition: form-data; name="to_country"\r\n\r\nUS\r\n------------------------------9dcc56a2c7b4\r\nContent-Disposition: form-data; name="to_zip"\r\n\r\n80602\r\n------------------------------9dcc56a2c7b4\r\nContent-Disposition: form-data; name="to_state"\r\n\r\nColorado\r\n------------------------------9dcc56a2c7b4\r\nContent-Disposition: form-data; name="to_city"\r\n\r\nThornton\r\n------------------------------9dcc56a2c7b4\r\nContent-Disposition: form-data; name="to_street"\r\n\r\n14683+Street+Ct\r\n------------------------------9dcc56a2c7b4\r\nContent-Disposition: form-data; name="amount"\r\n\r\n1099\r\n------------------------------9dcc56a2c7b4\r\nContent-Disposition: form-data; name="shipping"\r\n\r\n0\r\n------------------------------9dcc56a2c7b4--\r\n'","status":"400"}

Dirty Bird Design
  • 5,333
  • 13
  • 64
  • 121

0 Answers0