2016-08-18 8 views
3

Ich arbeite mit einer API und wenn ich die POST-Anfrage an sie senden sie eine Warnung, dass eines der Felder im Array muss Typ Integer, kein String sein.Wie Integer in PHP CURL Anfrage erhalten

Mein ROTATION Setup ist wie folgt:

$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_RETURNTRANSFER => true, 
     CURLOPT_URL => $url, 
     CURLOPT_USERPWD => $api_key 
     CURLOPT_POSTFIELDS => $post_fields, 
     CURLOPT_HTTPHEADER => 'Content-Type: application/json' 
    )); 
    $result = curl_exec($curl); 
    curl_close($curl); 

Wenn ich dies auf eine andere URL auf meinem localhost senden und es var_dump ich dieses:

string(253) "array(5) { 
      ["data_source_uuid"]=> 
      string(39) "uuid" 
      ["name"]=> 
      string(8) "TestPlan" 
      ["interval_count"]=> 
      string(1) "1" 
      ["interval_unit"]=> 
      string(5) "month" 
      ["external_id"]=> 
      string(8) "Eur_fees" 
     }" 

Das Problem hier ist interval_count ein String ist kein Integer. Wenn ich var_dump vor der Verwendung von CURLOPT_POSTFIELDS verwende, ist es eine Ganzzahl, also ändert etwas im CURL-Teil es, aber ich bin mir nicht sicher was.

Die API ist für eine chartmogul.com

+0

https://secure.php.net/language.types.type-juggling#language.types.typecasting – Bolli

+0

Das ist nicht, wie es funktioniert ist ein Int vor dem CURLOPT_POSTFIELDS Es ist nicht erhalten –

Antwort

1

Bill von ChartMogul hier. Sie müssten Ihre Daten mit json_encode($data) verschlüsseln. Stellen Sie außerdem sicher, dass die UUID Ihrer Datenquelle, der geheime Schlüssel des Kontos und das Konto-Token korrekt sind. Die folgende Anfrage funktioniert für mich:

<?php 

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

// request url 
$baseurl='https://api.chartmogul.com/v1/'; 
$url=$baseurl.'import/plans'; 

// 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; 

curl_close($ch); 
?>`enter code here` 
+0

Übrigens, ChartMogul hat jetzt eine PHP-Client-Bibliothek, die Sie verwenden können: https://github.com/chartmogul/chartmogul-php. – B1ll

1

genannt Website Wie die Dokumentation hier sagt (https://dev.chartmogul.com/docs/import-plan), haben Sie JSON-Daten zu senden.

Statt CURLOPT_POSTFIELDS => $post_fields Sie CURLOPT_POSTFIELDS => json_encode($post_fields)

EDIT verwenden sollte: Auch, sagt der Dokumentation, dass Sie 5 Parameter senden haben, Sie vergessen haben, eine „data_source_uuid“ genannt erforderlich, eine Zeichenfolge, die den ChartMogul UUID der Daten enthält Quelle für diesen Abonnementplan.

+0

Das funktioniert nicht. Wenn ich das mache, ist die Nachricht zurück "error": "Die Eigenschaft '# /' enthielt keine erforderliche Eigenschaft von 'data_source_uuid'". Ich denke, das liegt daran, dass CURLOPT_POSTFIELDS automatisch urlencoding macht –

+0

Ja, weil Sie vergessen haben, den Parameter "data_source_uuid" zu senden (der die ChartMogul-UUID der Datenquelle für diesen Abonnementplan enthalten soll). – Julqas

+0

Nein. Ich habe das aus meinem Beispiel weggelassen, aber wenn ich das in das Array vor Ihrem Vorschlag lege, funktioniert es nicht. Ich werde meine Frage jetzt aktualisieren. –