如何对UPC数据库进行PHP XML / RPC调用

时间:2011-01-21 13:31:23

标签: php xml xml-rpc

hay我正在处理条形码阅读器项目,当我从我的php脚本调用upcdatabase时它给了我错误。我使用www.upcdatabase.com

提供的php示例

代码是

<?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数据库view this然后它工作正常,但我将此脚本运行到浏览器然后它给出以下错误

Array
(
    [status] => fail
    [message] => Invalid UPC length
)

1 个答案:

答案 0 :(得分:3)

不幸的是,他们的API在文档方面显得相当短缺。

网站在Item Lookup page上提到了三种类型的代码:

  • EAN / UCC-13
  • 的13位数字
  • A类UPC代码的12位数字,或
  • Type-E(零抑制)UPC码的8位数字。

在页面提到这三种类型之后,它也说,

  

除了8位或12位以外的任何内容是UPC代码!

13-digit EAN/UCC-13UPC的超集。它包含有效的UPC,但它有许多其他值不是有效的UPC。

来自the Wikipedia article on EAN-13

  

如果第一个数字为零,则第一组六个中的所有数字都使用用于UPC的模式进行编码,因此UPC条形码也是EAN-13条形码,第一个数字设置为零。

话虽如此,当我从$upc中移除前导零时,它按预期工作。显然,“项目查找”页面具有删除前导零的逻辑,而API则没有。

Array
(
    [upc] => 639382000393
    [pendingUpdates] => 0
    [status] => success
    [ean] => 0639382000393
    [issuerCountryCode] => us
    [found] => 1
    [description] => The Teenager's Guide to the Real World by BYG Publishing
    [message] => Database entry found
    [size] => book
    [issuerCountry] => United States
    [noCacheAfterUTC] => 2011-01-22T14:46:15
    [lastModifiedUTC] => 2002-08-23T23:07:36
)

或者,您可以将原始的13位数值设置为upc参数,而不是设置ean参数。它也可以使用。