php - eBay 的 PHP 和 SOAP itemFilter 查找 API 不起作用

标签 php soap ebay-api

我编写了一个简单的 PHP 脚本,用于从 eBay 检索商品。我正在使用 PHP 和 SOAP。我可以通过其他电话获得元素。但是,我需要使用 findItemsAdvanced 调用从卖家处获取商品,但我无法使其正常工作。

这是我到目前为止所拥有的:

function call_ebay_id_api($itemID){

$location = 'http://svcs.ebay.com/services/search/FindingService/v1?SECURITY-APPNAME=****8&OPERATION-NAME=findItemsAdvanced&itemFilter(0).name=Seller&itemFilter(0).value=****';
$clientebay = new SoapClient(
    "http://developer.ebay.com/webservices/Finding/latest/FindingService.wsdl",
    array(
        "exceptions" => 0,
        "trace" => 1,
        "location"=> $location
        )
);
$requestebay = array("itemFilter" => array("name" => "Seller", "value" => "****"));

$xmlresultsebay = $clientebay->__soapCall('findItemsAdvanced', array($requestebay));
echo "REQUEST HEADERS:\n<pre>" . htmlentities($clientebay->__getLastRequestHeaders()) . "</pre>\n";
echo "REQUEST:\n<pre>" . htmlentities($clientebay->__getLastRequest()) . "</pre>\n";
echo "RESPONSE:\n<pre>" . htmlentities($clientebay->__getLastResponse()) . "</pre>\n";
echo 'd';
return $xmlresultsebay;

来自此的 XML 请求是:

<?xml version="1.0" encoding="UTF-8"?>
  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.ebay.com/marketplace/search/v1/services">
     <SOAP-ENV:Body>
         <ns1:findItemsAdvancedRequest>
             <itemFilter>
                 <name>Seller</name>
                 <value>*seller name here*</value>
              </itemFilter>
          </ns1:findItemsAdvancedRequest>
     </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>

这看起来像他们在API's page上的例子

但是,我得到的响应是一个错误。它说我需要指定关键字或类别 ID。当我这样做时,我获得了成功,但 itemFilter 未应用。

有人可以帮我吗?

最佳答案

好吧,我猜它已经工作了......我猜?

所以我认为问题是 eBay 的 itemFilter 需要一个 ItemFilter 类型(注意 ItemFilter 中的大写 I,顺便说一句),而不是一个数组。这导致我创建了与请求调用所需类型同名的类。所以我创建了名为 ItemFilter、Name、Value 等的对象。但是,它仍然不起作用。

我几乎放弃了,也许用 cURL 之类的东西重新开始……甚至是 Cajun voodoo,因为其他方法都不起作用,所以嘿,为什么不使用魔法呢?

当我带着一 block 鳄鱼皮和一些布丁环放在她的坟墓上去了玛丽·拉沃夫人的墓地后,我真的很饿,开始思考布丁。 “嗯…… pig 肠皮里有好吃的米饭和 pig 哈希……等等,”我心里想,“皮?我应该检查一下变量是否正确包裹。”所以当我回到家后(带着更多来自本地市场的布丁),我检查了 wrapper ,它是正确的。但后来我注意到 itemFilter 的命名空间丢失了。所以我开始摆弄 PHP SoapVar...并且它成功了! “终于,在这个被上帝遗弃的网络开发深渊中出现了暗淡的 Spark ,”我这么想。

所以基本上代替:

$requestebay = array("itemFilter" => array("name" => "Seller", "value" => "****"));

我应该写:

$itemFilters = array(
    "name" => new SoapVar("Seller", XSD_STRING, NULL, NULL, NULL, 'http://www.ebay.com/marketplace/search/v1/services'),
    "value" => new SoapVar("****", XSD_STRING, NULL, NULL, NULL, 'http://www.ebay.com/marketplace/search/v1/services')
);
$requestebay = array(
    "itemFilter" => new SoapVar($itemFilters, SOAP_ENC_OBJECT, NULL, NULL, NULL, 'http://www.ebay.com/marketplace/search/v1/services')
);

...然后砰!这解决了我的问题。我想这里要吸取的教训是 voodoo 比 eBay 的文档要好得多,因为有了 voodoo,我不必深入挖掘来为我的下一个项目找到东西。

关于php - eBay 的 PHP 和 SOAP itemFilter 查找 API 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20167081/

相关文章:

php - 使用预设时间获取 "Time since"。 ("2012-03-27 16:01:48 CEST")

PHP PDO 未正确绑定(bind)

PHP cURL 登录 facebook

SoapUI 更改端点地址

c# - 易趣 API : How do I specify "Standard Shipping (FedEx Ground or FedEx Home Delivery®)" as a shipping service?

php - 如何创建类似 youtube 的视频预览?

java - 使用 Jayway 的放心验证 XML 属性

java - 通过将 XML 文件解析为 SOAPMessage,使用 javax.xml.soap API 构建更大的 SOAP 请求

javascript - eBay 查找 API findItemsByKeywords 返回 'Input URL gave a value for header X-EBAY-SOA-OPERATION-NAME but has a conflicting mapped value' 错误

python - eBay API - addItem ShipToLocation 仅保存最后一个值