2

我正在尝试连接到 ebay 交易 API 并使用 PHP 的 SoapClient 类发出基本请求,但我遇到了麻烦。我已经花了数小时搜索和摆弄示例,但我无法得到任何工作。所以我编写了以下准系统代码,并试图让它工作:

$token  = [token here];

$client = new SOAPClient('http://developer.ebay.com/webservices/latest/eBaySvc.wsdl', array('trace' => 1, 'features' => SOAP_SINGLE_ELEMENT_ARRAYS));

$header = new SoapHeader('urn:ebay:apis:eBLBaseComponents', 'RequesterCredentials', new SoapVar(array('ebayAuthToken' => $token), SOAP_ENC_OBJECT), false);

$client->__setSoapHeaders(array($header));

$method = 'GeteBayOfficialTime';

$parameters = array(

);

try {
    $responseObj = $client->__soapCall($method, array($parameters));
}
catch (Exception $e)
{
    echo 'Exception caught. Here are the xml request & response:<br><br>';
    echo '$client->__getLastRequest():<br><pre><xmp>' . $client->__getLastRequest() . '</xmp></pre>';
    echo '$client->__getLastResponse():<br><pre><xmp>' . $client->__getLastResponse() . '</xmp></pre><br>';

    echo '<p>Exception trying to call ' . $method . '</p>';
    echo '$e->getMessage()';
    echo '<pre>' . $e->getMessage() . '</pre>';
}

它的输出是:

Exception caught. Here are the xml request & response:

$client->__getLastRequest():

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:ebay:apis:eBLBaseComponents" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Header><xsd:RequesterCredentials><ebayAuthToken>[token was here]</ebayAuthToken></xsd:RequesterCredentials></SOAP-ENV:Header><SOAP-ENV:Body><ns1:GeteBayOfficialTimeRequest/></SOAP-ENV:Body></SOAP-ENV:Envelope>

$client->__getLastResponse():

<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.userException</faultcode> <faultstring>com.ebay.app.pres.service.hosting.WebServiceDisabledException: The web service eBayAPI is not properly configured or not found and is disabled.</faultstring> <detail/> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope>


Exception trying to call GeteBayOfficialTime
$e->getMessage()

com.ebay.app.pres.service.hosting.WebServiceDisabledException: The web service eBayAPI is not properly configured or not found and is disabled.

谁能帮我搞定这个工作?部分问题可能是我不知道 SoapHeader 函数的第一个参数(“命名空间”)中应该包含什么。

4

2 回答 2

7

经过数小时破解其他人的示例并自己尝试新东西后,我终于能够完成这项工作。我在这里发布解决方案,以防它帮助其他人:

$token    = '';
$appId    = '';
$wsdl_url = 'ebaysvc.wsdl.xml'; // downloaded from http://developer.ebay.com/webservices/latest/eBaySvc.wsdl

$apiCall = 'GetUser';

$client = new SOAPClient($wsdl_url, array('trace' => 1, 'exceptions' => true, 'location' => 'https://api.sandbox.ebay.com/wsapi?callname=' . $apiCall . '&appid=' . $appId . '&siteid=0&version=821&routing=new'));

$requesterCredentials = new stdClass();
$requesterCredentials->eBayAuthToken = $token;

$header = new SoapHeader('urn:ebay:apis:eBLBaseComponents', 'RequesterCredentials', $requesterCredentials);

// the API call parameters
$params = array(
    'Version' => 821,
    'DetailLevel' => 'ReturnSummary',
    'UserID' => ''
);

$responseObj = $client->__soapCall($apiCall, array($params), null, $header);  // make the API call

其中$token$appIdUserID用适当的值填充。

几点注意事项:

  • 因为异常设置为 true,所以 SoapClient 构造函数调用和所有 soapCall 都应该在 try/catch 块内
  • siteid参数设置为,表示这0是针对美国ebay网站的
  • 位置 URL 应从 更改api.sandbox.ebay.comapi.ebay.com以使用生产环境而不是沙箱
  • 我决定下载 WSDL 文件而不是远程使用它,因为它非常大(大约 5MB)并且会显着降低请求速度

我不知道为什么在任何地方都没有像这样的简单示例,但我确实希望在我试图弄清楚这一点时就出现了!

于 2013-05-12T16:04:57.683 回答
2

感谢您提交支持请求。

我相信,您正在寻找一种身份验证机制,ebay 用户可以通过该机制对您的应用程序进行身份验证,以代表他们进行 API 调用。如果是这种情况,您必须使用 Auth 和 Auth 过程,这实际上非常简单。

  1. 通过您的开发者帐户生成一个 RuName;这是一个一次性的过程,您的应用程序只需要一个 RuName。
  2. 使用您的密钥集并在请求中传递您的 RuName 进行 GetSessionID API 调用
  3. 您的应用程序应该打开一个带有以下 URL 的浏览器窗口: https://signin.ebay.com/ws/eBayISAPI.dll?SignIn&runame= $runame&SessID=$sessionid ,请注意此 URL 包含在步骤 2 中生成的 SessionID 和您的汝名。
  4. 应用程序的用户应输入他们的 ebay 登录凭据,并在登录后单击我同意按钮。
  5. 进行 FetchToken API 调用,它会为 ebay 用户返回一个令牌。使用此令牌进行任何其他交易 API 调用以访问 ebay 用户帐户。

上述过程在以下题为 Auth 和 Auth Quickstart 的知识库文章中进行了解释:https ://ebay.custhelp.com/app/answers/detail/a_id/1198 (如果您在同一个知识库中搜索,您可以找到示例Java、PHP 和 .Net 的 auth 和 auth 实现)

以下是有关 Auth 和 Auth 过程的更多详细信息:http: //developer.ebay.com/DevZone/guides/ebayfeatures/Basics/Tokens-MultipleUsers.html#GettingaTokenviaFetchToken

这是一篇关于生成 RuName 的文章:http: //developer.ebay.com/DevZone/guides/ebayfeatures/Basics/Tokens-SettingUpApp.html#GenerateanRuNameforYourApplication

如果这有帮助,或者您需要进一步的帮助,请告诉我。

最好的问候, eBay 开发人员支持

于 2013-11-14T22:58:36.327 回答