Как сделать 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
парам, и это тоже будет работать.