Это для живого приложения, а не песочницы. Я пытаюсь использовать токен и секрет токена после вызова запроса GetAccessToken, чтобы иметь стороннюю авторизацию для вызовов API PayPal.
Прямо сейчас мой код немного запутан из-за того, что я просто пытаюсь проверить, используя их образцы, предоставленные в SDK. Он успешно получает токен и секрет токена с использованием токена верификатора и RequestPermission, но при использовании его для выполнения одного из вызовов perm, такого как GetBasicPersonalData, он возвращает эту ошибку:
Ошибка аутентификации. Учетные данные API неверны.
Вот код:
<?php
use PayPal\Service\PermissionsService;
use PayPal\Types\Common\RequestEnvelope;
use PayPal\Types\Perm\GetAccessTokenRequest;
use PayPal\Types\Perm\PersonalAttributeList;
use PayPal\Types\Perm\GetBasicPersonalData;
use PayPal\Types\Perm\GetBasicPersonalDataRequest;
use PayPal\Auth\IPPThirdPartyAuthorization;
use PayPal\Auth\PPSignatureCredential;
use PayPal\Auth\PPTokenAuthorization;
/********************************************
GetAccessTokenReceipt.php
Called by GetAccessToken.php
# GetAccessToken API
Use the GetAccessToken API operation to obtain an access token for a set of permissions.
This sample code uses Permissions PHP SDK to make API call
********************************************/
require_once('PPBootStrap.php');
$requestEnvelope = new RequestEnvelope();
$requestEnvelope->errorLanguage = "en_US";
$request = new GetAccessTokenRequest();
$request->requestEnvelope = $requestEnvelope;
/*
* The request token from the response to RequestPermissions.
*/
$request->token = $_REQUEST['Requesttoken'];
/*
* The verification code returned in the redirect from PayPal to the
return URL after `RequestPermissions` call
*/
$request->verifier = $_REQUEST['Verifier'];
/*
* ## Creating service wrapper object
Creating service wrapper object to make API call and loading
Configuration::getAcctAndConfig() returns array that contains credential and config parameters
*/
$service = new PermissionsService(Configuration::getAcctAndConfig());
try {
/*
* ## Making API call
Invoke the appropriate method corresponding to API in service
wrapper object
*/
$response = $service->GetAccessToken($request);
} catch (Exception $ex) {
require 'Error.php';
exit;
}
/* Display the API response back to the browser. */
$ack = strtoupper($response->responseEnvelope->ack);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>GetAccessToken - Response</title>
</head>
<body>
<img src="https://devtools-paypal.com/image/bdg_payments_by_pp_2line.png"/>
<div id="request_form">
<center>
<h3>GetAccessToken</h3>
<br />
</center>
<?php
echo "<table>";
echo "<tr><td>Ack :</td><td><div id='Ack'>". $response->responseEnvelope->ack ."</div> </td></tr>";
echo "<tr><td>Token :</td><td><div id='Token'>". $response->token ."</div> </td></tr>";
echo "<tr><td>TokenSecret :</td><td><div id='TokenSecret'>". $response->tokenSecret ."</div> </td></tr>";
echo "</table>";
if ($ack == "SUCCESS") {
$requestEnvelope = new RequestEnvelope("en_US");
$attributeList = new PersonalAttributeList();
$attributeList->attribute = array(
'http://axschema.org/namePerson/first',
'http://axschema.org/namePerson/last',
'http://axschema.org/contact/email',
'http://axschema.org/contact/fullname',
'http://openid.net/schema/company/name',
'http://axschema.org/contact/country/home',
'https://www.paypal.com/webapps/auth/schema/payerID'
);
$request = new GetBasicPersonalDataRequest( $attributeList );
$request->requestEnvelope = $requestEnvelope;
$apiCredential = new PPSignatureCredential( '<snip>', '<snip>', '<snip>' );
$apiCredential->setApplicationId( '<snip>' );
$apiCredential->setThirdPartyAuthorization( new PPTokenAuthorization($response->token, $response->tokenSecret) );
$service = new PermissionsService( Configuration::getAcctAndConfig() );
try {
/*
* ## Making API call
Invoke the appropriate method corresponding to API in service
wrapper object
*/
$response = $service->GetBasicPersonalData( $request, $apiCredential );
} catch (Exception $ex) {}
}
require_once 'ShowAllResponse.php';
?>
</div>
</body>
</html>
Этот код работает, удаляя следующую строку кода, но он просто даст мне мои личные данные из вызова PPSignatureCredential, а не от третьей стороны.
$apiCredential->setThirdPartyAuthorization( new PPTokenAuthorization($response->token, $response->tokenSecret) );
Задача ещё не решена.
Других решений пока нет …