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"}