Использование PayPal's Permissions PHP SDK со сторонней авторизацией

Это для живого приложения, а не песочницы. Я пытаюсь использовать токен и секрет токена после вызова запроса 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) );

0 ответов

Другие вопросы по тегам