2013-02-04 352 views
3

(这是我第一次与贝宝API的工作如此忍受我。)贝宝“授权失败”

我试图创建使用BMCreateButton API飞加密按键,稍微用修改后的代码来自this page。不幸的是,我似乎无法得到这个工作,因为我在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都失败了。我错过了一些基本的东西,还是在我可能忽略的代码中存在错误?

+0

不是这样的答案,但我会试图给github上的paypal sdks一个尝试..他们倾向于比在文档中踢一些代码更好的工作,并可能为您节省一两个头痛!这里有一个按钮管理器api:https://github.com/paypal/buttonmanager-sdk-php – John

回答

1

我记得这一个!

$username,$password$signature里面定义的函数吗?如果不是,则需要在该函数的顶部添加global $username, $password, $signature

+0

啊,哎呀,这可能是问题... – pcuser42

+0

是的,这个问题得到解决。现在得到'O:8:“stdClass”:4:{s:12:“ShortMessage”; s:14:“安全错误”; s:11:“LongMessage”; s:28:“安全标头无效” ; s:9:“ErrorCode”; s:5:“10002”; s:12:“SeverityCode”; s:5:“Error”;}'在错误日志中。 – pcuser42

+0

这个问题是'$ signature'变量中的一个杂散空间。按钮现在出现! – pcuser42