我编写了一个简单的 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/