http - How to preserve Integer in PHP CURL request


I'm working with an API and when I send the POST request to them they throw a warning that one of the fields in the array has to be type Integer, not a String.

My CURL setup is like this:

$post_fields = array(
            'data_source_uuid' => $uuid,
            'name' => 'TestPlan',
            'interval_count' => 1,
            'interval_unit' => 'month',
            'external_id' => 'Eur_fees'
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $url,
        CURLOPT_USERPWD => $api_key
        CURLOPT_POSTFIELDS =>  $post_fields, 
        CURLOPT_HTTPHEADER => 'Content-Type: application/json'
    $result = curl_exec($curl);
    curl_close( $curl );

When I send this to another URL on my localhost and var_dump it I get this:

    string(253) "array(5) {
          string(39) "uuid"
          string(8) "TestPlan"
          string(1) "1"
          string(5) "month"
          string(8) "Eur_fees"

The problem here is interval_count is a String not an Integer. If I var_dump before using CURLOPT_POSTFIELDS it is an Integer so something in the CURL part is changing it but I'm not sure what.

The API is for a website called




As the documentation says here (, you have to send JSON data.

Instead ofCURLOPT_POSTFIELDS => $post_fields, you should useCURLOPT_POSTFIELDS => json_encode($post_fields)

EDIT : Also, the documentation says that you have to send 5 parameters, you forgot one required named "data_source_uuid", a string that contains the ChartMogul UUID of the data source for this subscription plan.




Bill from ChartMogul here. You would need to encode your data withjson_encode($data). Please also ensure that your data source UUID, account secret key and account token are correct. The following request works for me:


// account variables
$ds_uuid = "DATA_SOURCE_UUID";
$token = 'API_TOKEN';
$password = 'SECRET_KEY';

// request url

// data to be posted
$post_fields = array(
            'data_source_uuid' => "$ds_uuid",
            'name' => 'A plan',
            'interval_count' => 1,
            'interval_unit' => 'month',
            'external_id' => 'eur_fees'

// encode json data
$data = json_encode($post_fields);

// initialize cURL
$ch = curl_init();

// set options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$token:$password");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data))

// make the request
$result = curl_exec($ch);

// decode the result
$json = json_decode($result, true);

// print the result
print $json;

?>`enter code here`

People are also looking for solutions to the problem: php - Symfony general entity relationship in Doctrine


Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.