2013-03-31 20 views
21

Ich versuche "den ersten Anruf" wie in der Paypal-API-Dokumentation beschrieben. Dies ist das Beispiel vorgesehen, dass ich folgendes:Paypal API mit PHP und cURL

curl https://api.sandbox.paypal.com/v1/oauth2/token \ 
-H "Accept: application/json" \ 
-H "Accept-Language: en_US" \ 
-u "EOJ2S-Z6OoN_le_KS1d75wsZ6y0SFdVsY9183IvxFyZp:EClusMEUk8e9ihI7ZdVLF5cZ6y0SFdVsY9183IvxFyZp" \ 
-d "grant_type=client_credentials" 

ich eine Locke Beispiel in PHP mit allen oben genannten Header aus dem letzten auseinander gebaut haben. Was kann ein -d Flag als Curl-Option in PHP konvertieren? Soweit ich das beurteilen kann, gibt es dort wenig Erklärung. Ich konnte -u als CURLOPT_USERPWD ableiten.

Antwort

65

Mit einem guten Trawl habe ich Teile von Entwicklern mit anderen Problemen zusammengestellt. Ich gewann erfolgreich meine Zugriffstoken mit dem folgenden Code:

<?php 

$ch = curl_init(); 
$clientId = "myId"; 
$secret = "mySecret"; 

curl_setopt($ch, CURLOPT_URL, "https://api.sandbox.paypal.com/v1/oauth2/token"); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERPWD, $clientId.":".$secret); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials"); 

$result = curl_exec($ch); 

if(empty($result))die("Error: No response."); 
else 
{ 
    $json = json_decode($result); 
    print_r($json->access_token); 
} 

curl_close($ch); 

?> 
+1

Leider scheint es, als ob Paypal ihre REST API Curl Samples von Github entfernt hat. –

+1

Das ist perfekt, rettete mein Leben. –

+1

tnkx Kumpel du hast meine Zeit und mein Leben gerettet –

2

@Lee Punkt der richtige Weg, aber wenn u verwenden und alte PHP-Version es wird nicht funktionieren. Aber Lee Version wird den Fehler nicht angezeigt. Verwenden Sie diese stattdessen, ich füge nur den Fehler Teil hinzu, um zu sehen, was vor sich geht.

$ch = curl_init(); 
$clientId = ""; 
$secret = ""; 

curl_setopt($ch, CURLOPT_URL, "https://api.sandbox.paypal.com/v1/oauth2/token"); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERPWD, $clientId.":".$secret); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials"); 

$result = curl_exec($ch); 
$err = curl_error($ch); 

$access_token=""; 
if ($err) { 
    echo "cURL Error #:" . $err; 
} 
else 
{ 
    $json = json_decode($result); 
    // print_r($json->access_token); 
    $access_token = $json->access_token; 
} 

Wenn u haben und alte PHP-Version ist es posible es wird nicht funktionieren und es wird diesen Fehler zeigen:

cURL Error #:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure 

stapeln einfach überfluten es! Here they discuss the problem

+0

Sie sollten wahrscheinlich eine Bearbeitung vorgeschlagen haben. Ich werde meine Antwort aktualisieren, um Ihre Fehlerbehandlung zu berücksichtigen. – Lee

+0

Sie haben Recht, zu bearbeiten – Catluc