2013-03-31 12 views
21

Sto tentando "la prima chiamata" come indicato dalla documentazione dell'API Paypal. Questo è l'esempio a condizione che sto seguendo:API Paypal con PHP e 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" 

ho costruito un'istanza ricciolo in PHP con tutte le intestazioni di cui sopra a parte l'ultimo. Che cosa converte un flag -d in un'opzione di curl in PHP? C'è poca spiegazione lì per quanto posso dire. Sono riuscito a dedurre -u come CURLOPT_USERPWD.

risposta

65

Avere una buona rete di aggiramento Ho assemblato parti di sviluppatori con altri problemi. Ho guadagnato con successo il mio token di accesso utilizzando il seguente codice:

<?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

Purtroppo, sembra che Paypal abbia rimosso i campioni di curl dell'API REST da Github. –

+1

Questo è perfetto mi ha salvato la vita. –

+1

amico tnkx mi hai salvato il mio tempo e la vita anche –

2

@Lee punto la strada giusta, ma se u sta utilizzando e vecchia versione di PHP non funzionerà. Ma la versione di Lee non mostrerà l'errore. Usa questi invece, aggiungo solo la parte dell'errore per vedere cosa sta succedendo.

$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; 
} 

Se u stanno avendo e vecchia versione di PHP che è posible non funzionerà e mostrerà questo errore:

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

Basta Stack Overflow è! Here they discuss the problem

+0

Probabilmente avresti dovuto proporre una modifica. Aggiornerò la mia risposta per prendere in considerazione la gestione degli errori. – Lee

+0

Hai ragione, sentiti libero di modificare – Catluc