Ошибка авторизации PayPal

(Это первый раз, когда я работал с API PayPal, так что несите меня.)

Я пытаюсь создать зашифрованные кнопки на лету, используя API BMCreateButton, используя слегка измененный код с этой страницы . К сожалению, я не могу заставить это работать, поскольку в журнале ошибок PHP я получил сообщение об ошибке «проверка подлинности / авторизации». (Я также спросил об этом на форуме разработчиков PayPal, но не получил ответа.)

Этот код:

function createButton($name, $price) { // Check to make sure that our version of PHP supports SOAP. if((PHP_VERSION_ID < 50101) || !in_array("soap", get_loaded_extensions())) { error_log("PHP not running with SOAP"); } else { include_once("config.php"); //this file holds the credentials and whether it's running in sandbox mode or not //basic variable validation $price = floatval($price); // Import the PayPal WSDL. $location = $sandbox ? "https://api-3t.sandbox.paypal.com/2.0/" : "https://api-3t.paypal.com/2.0/"; $soapClient = new SoapClient("https://www.paypalobjects.com/wsdl/PayPalSvc.wsdl", array( location => $location )); // Set our API credentials. $credentials->Credentials->Username = $username; $credentials->Credentials->Password = $password; $credentials->Credentials->Signature = $signature; $soapClient->__setSoapHeaders(new SoapHeader("urn:ebay:api:PayPalAPI", "RequesterCredentials", $credentials)); // Start creating our BMCreateButtonReq object. For full details about this object, see // http://tinyurl.com/3mxau6j . $BMCreateButtonReq->BMCreateButtonRequest->Version = "71.0"; $BMCreateButtonReq->BMCreateButtonRequest->ButtonCode = "ENCRYPTED"; // What type of button are we creating? $BMCreateButtonReq->BMCreateButtonRequest->ButtonType = "CART"; // Specific variables for this button. For the full list of options, see // http://tinyurl.com/6qyanl . For a basic payment, these two should be enough. $BMCreateButtonReq->BMCreateButtonRequest->ButtonVar[] = "amount=$price"; $BMCreateButtonReq->BMCreateButtonRequest->ButtonVar[] = "item_name=$name"; // Run the API call. $response = $soapClient->BMCreateButton($BMCreateButtonReq); if($response->Ack == "Success" || $response->Ack == "SuccessWithWarning") { // If successful, the button code will be in the Website element of $response. // It'll be a full HTML form, so don't wrap it in any <form> tags -- just // display it as-is. echo $response->Website; } else { error_log("Could not create PayPal button. " . serialize($response->Errors)); echo "<p class=\"note\">Cannot create button</p>"; } } } 

дает это в журнале ошибок:

 Could not create PayPal button. O:8:"stdClass":4:{s:12:"ShortMessage";s:35:"Authentication/Authorization Failed";s:11:"LongMessage";s:49:"You do not have permissions to make this API call";s:9:"ErrorCode";s:5:"10002";s:12:"SeverityCode";s:5:"Error";} 

Я проверил учетные данные, и они верны, и сбой с песочницей, а также живой API. Я пропустил что-то фундаментальное, или есть ошибка в коде, который я, возможно, забыл?

Я помню этот!

Существуют ли $username , $password и $signature внутри функции? Если нет, вам нужно добавить global $username, $password, $signature в верхней части функции.