Как сделать PHP / XML вызов RPC к базе данных UPC

Hay я работаю над проектом чтения штрих-кода, когда я вызываю upcdatabase из моего PHP-скрипта, это дает мне ошибки. я использую пример php, предоставленный http://www.upcdatabase.com/

код

<?php error_reporting(E_ALL);
ini_set('display_errors', true);

 require_once 'XML/RPC.php';

 $rpc_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; // Set your rpc_key here
 $upc='0639382000393';
 // Setup the URL of the XML-RPC service
 $client = new XML_RPC_Client('/xmlrpc', 'http://www.upcdatabase.com');
 $params = array( new XML_RPC_Value( array(
  'rpc_key' => new XML_RPC_Value($rpc_key, 'string'),
  'upc' => new XML_RPC_Value($upc, 'string'),
  ), 'struct'));
 $msg = new XML_RPC_Message('lookup', $params);
 $resp = $client->send($msg);
 if (!$resp)
            {
  echo 'Communication error: ' . $client->errstr;
  exit;
 }
 if(!$resp->faultCode())
 {
  $val = $resp->value();
  $data = XML_RPC_decode($val);
  echo "<pre>" . print_r($data, true) . "</pre>";
 }else{
  echo 'Fault Code: ' . $resp->faultCode() . "\n";
  echo 'Fault Reason: ' . $resp->faultString() . "\n";
 }
?>

когда я проверяю $upc='0639382000393'; в представление базы данных UPC это, то это работает нормально, но я запускаю этот скрипт в браузере, то это дает следующую ошибку

 массив
(
    [status] => fail
    [message] => Неверная длина UPC) 

1 ответ

Решение

К сожалению, их API кажется довольно коротким по документации.

Есть три типа кодов, которые сайт упоминает на странице поиска товара:

  • 13 цифр для EAN/UCC-13
  • 12 цифр для кода UPC типа A или
  • 8 цифр для кода UPC типа E (с нулевым подавлением).

Сразу после того, как на странице упоминаются эти три типа, он также говорит,

Все, кроме 8 или 12 цифр, не является кодом UPC!

13-значный EAN/UCC-13 является расширенным набором UPC. Он включает в себя действительные UPC, но имеет много других значений, которые не являются действительными UPC.

Из статьи в Википедии о EAN-13:

Если первая цифра равна нулю, все цифры в первой группе из шести кодируются с использованием шаблонов, используемых для UPC, следовательно, штрих-код UPC также является штрих-кодом EAN-13 с первой цифрой, установленной на ноль.

Сказав это, когда я удалил ведущий ноль из $upcСработало как положено. По-видимому, на странице "Поиск элементов" есть логика для удаления начального нуля, а для API - нет.

массив
(
    [upc] => 639382000393
    [pendingUpdates] => 0
    [статус] => успех
    [ean] => 0639382000393
    [isserCountryCode] => нас
    [найдено] => 1
    [description] => Руководство подростка по реальному миру от BYG Publishing
    [message] => Запись в базе данных найдена
    [size] => книга
    [isserCountry] => Соединенные Штаты
    [noCacheAfterUTC] => 2011-01-22T14:46:15
    [lastModifiedUTC] => 2002-08-23T23:07:36)

В качестве альтернативы, вместо установки upc параметр, вы можете установить исходное 13-значное значение на ean парам, и это тоже будет работать.

Другие вопросы по тегам