2013-03-31 3 views
21

Я пытаюсь «первый вызов», как описано в документации API Paypal. Это пример, при условии, что я следую:API Paypal с PHP и 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" 

Я построил локон экземпляр в PHP со всеми вышеперечисленными заголовки отдельно от последнего. Что означает флаг -d в качестве опции curl в PHP? Насколько я могу судить, там мало объяснений. Мне удалось вывести -u как CURLOPT_USERPWD.

ответ

65

Имея хороший трал вокруг, я собрал детали от разработчиков с другими проблемами. Я успешно получил свой маркер доступа, используя следующий код:

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

К сожалению, похоже, что Paypal удалил свои образцы скручивания API REST из Github. –

+1

Это идеальное спасение моей жизни. –

+1

tnkx приятель вы тоже спасли мое время и жизнь –

2

@Lee пункт правильный путь, но если и используются и старые версии PHP это не будет работать. Но версия Ли не обнаружит ошибку. Используйте их вместо этого, я добавляю только часть ошибки, чтобы увидеть, что происходит.

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

Если и возникают и старые версии PHP это Возможное это не будет работать, и он будет показывать эту ошибку:

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

Просто стек переполнение его! Here they discuss the problem

+0

Возможно, вам следовало бы предложить отредактировать. Я обновлю свой ответ, чтобы рассмотреть вашу обработку ошибок. – Lee

+0

Вы правы, не стесняйтесь редактировать – Catluc

Смежные вопросы