2012-03-14 2 views
0

Я пытаюсь интегрировать API eBay в свой проект. Я использую ZendFramework и есть библиотека для eBay FindingAPI, но она не работает для метода findItemsByProduct.eBay FindingAPI - findItemsByProduct, PHP

Для понимания проблемы я написал свой маленький класс: ('Недопустимое значение продукта ID')

<?php 
class MyProject_Model_Ebay 
{ 
    const FINDING_API_URL = 'http://svcs.ebay.com/services/search/FindingService/v1?'; 

    private $appId; 

    public function __construct($appId) 
    { 
     $this->appId = $appId; 
    } 

    public function findByProduct($id, $type = 'UPC') 
    { 
     $params = array(
      '[email protected]' => $type, 
      'productId' => $id, 
     ); 

     return $this->doApiRequest('findItemsByProduct', $params); 
    } 

    public function findByKeywords($keywords) 
    { 
     $params = array(
      'keywords' => $keywords, 
     ); 

     return $this->doApiRequest('findItemsByKeywords', $params); 
    } 


    private function doApiRequest($operationName, $payload) 
    { 

     $global = array(
      'OPERATION-NAME' => $operationName, 
      'SECURITY-APPNAME' => $this->appId, 
      'GLOBAL-ID' => 'EBAY-US', 
      'SERVICE-VERSION' => '1.0.0', 
      'MESSAGE-ENCODING' => 'UTF-8', 
      'RESPONSE-DATA-FORMAT' => 'JSON', 
     ); 

     $ret = file_get_contents(
      self::FINDING_API_URL . http_build_query($global) . '&REST-PAYLOAD&' . http_build_query($payload) 
     ); 

     return $ret; 
    } 

} 

'findItemsByKeywords' метод работает Ok, но 'findItemsByProduct' по-прежнему возвращает ошибку. Я пробовал разные варианты прохождения значения, но он не работает :(Текущая версия непреходящую ценность я видел здесь: how to use python xml.etree.ElementTree to parse eBay API response?

Использование:

<?php 
$eBay = new MyProject_Model_Ebay(
    'My-app-id' 
); 

$eBay->findByProduct('4719331316129'); 

Ответ:

{"findItemsByProductResponse":[{"ack":["Failure"],"errorMessage":[{"error":[{"errorId":["41"],"domain":["Marketplace"],"severity":["Error"],"category":["Request"],"message":["Invalid product ID value."],"subdomain":["Search"],"parameter":["4719331316129"]}]}],"version":["1.11.1"],"timestamp":["2012-03-14T06:41:42.600Z"]}]} 

Внимание! Если я изменяю GLOBAL-ID на EBAY-DE, например, все в порядке! Что не так с EBAY-US ?!

ответ

1

Похоже, что вы прошли инкремент t идентификатор продукта (itemID вместо ProductID). $ eBay-> findByProduct ('4719331316129'); - 13 цифр, когда обычно PRODUCTID имеет 8-9 цифр Сравни:

<item> 
    <itemId>230823026330</itemId> 
    <title>Apple iPhone 3G - 8GB - Black (AT&amp;T) Smartphone #26459</title> 
    <globalId>EBAY-US</globalId> 
    <primaryCategory> 
    <categoryId>9355</categoryId> 
    <categoryName>Cell Phones &amp; Smartphones</categoryName> 
    </primaryCategory> 
    <galleryURL>http://thumbs3.ebaystatic.com/pict/2308230263304040_1.jpg</galleryURL> 
    <viewItemURL>http://www.ebay.com/itm/Apple-iPhone-3G-8GB-Black-AT-T-Smartphone-26459-/230823026330?pt=Cell_Phones</viewItemURL> 
    <productId type="ReferenceID">101892398</productId> 
+1

На самом деле, это уже слишком поздно, чтобы сделать комментарий по этой теме. Я немного запутываю вышеуказанный ответ. Вопрос заключается в попытке поиска продуктов, используя код «UPC». Код UPC составляет 12 цифр. Итак, вопрос фактически дал неправильные цифры, потому что он дал цифры «13». Но в приведенном выше ответе просто используйте Reference ID. На самом деле, у меня такая же проблема, когда работает Reference ID. Но, если код UPC вызывает «Недопустимое значение идентификатора продукта». Вы решили эту проблему? – user2533493

+0

@ user2533493 Вы правы, я не заметил этого момента (EAN-13 - http://en.wikipedia.org/wiki/Universal_Product_Code - является надмножеством для UPC и имеет 13 цифр. UPC может быть преобразован в EAN-13 , но не наоборот). Я не помню, как я решил эту проблему в своем приложении. –

+0

@DmitryMerkushin Пожалуйста, поделитесь информацией о том, как вы решили эту проблему, когда у вас есть приложение. У меня такая же проблема прямо сейчас. Оба UPC/EAN не работают (говорит «Недопустимое значение идентификатора продукта»), но работает идентификатор ссылки. Я думаю, что это должен быть EAN, хотя это 13-значное число. Я пробовал это для EBAY-US & EBAY-DE как GLOBAL-ID. FWIW, штрих-код, который я пробовал, - 0016000275270 – toddlermenot

0

Идентификатор вы отправляете это рассматривалось как СКП продукта.

The findItemsByProduct требуется это должен быть указан при прохождении идентификатор продукта PRODUCTID

типа. Тип может включать ISBN, UPC, EAN или ReferenceID (ePID).

В вашем случае идентификатор, который вы передаете, считается номером UPC. Поэтому подтвердите правильность UPC для этого продукта.