attempt a ping on initiation, reload the page if fail. may put this elsewhere and...
[omsmith/pos-js.git] / www / upc.php
1 <?php
2
3 /*
4  * Script expects a 12-digit UPC-A code ( leading and check digit included )
5  */
6
7 // PEAR Package XML_RPC
8 require_once 'XML/RPC.php';
9
10 if( isset( $_REQUEST['upc'] ) ) {
11         $upc = $_REQUEST['upc'];
12
13         if( strlen( $upc ) === 12 && is_numeric( $upc ) ) {
14                 echo lookup( $upc );
15         }
16 }
17
18 function lookup( $upc ) {
19         $cache_dir = dirname( __FILE__ ) . '/upc_cache/';
20         $filename = $cache_dir . $upc;
21
22         if( is_readable( $filename ) ) {
23                 return file_get_contents( $filename );
24         }
25
26         $data = rpc_lookup( $upc );
27
28         $relevant_data = array(
29                 'name' => $data['description'],
30                 'size' => $data['size']
31                 );
32
33         $json = json_encode( $relevant_data );
34
35         file_put_contents( $filename, $json );
36
37         return $json;
38 }
39
40 function rpc_lookup( $upc ) {
41         return _request( 'lookup', $upc );
42 }
43
44 function _request( $method, $value ) {
45         $rpc_key = '00000.....00000';
46
47         $client = new XML_RPC_Client( '/xmlrpc', 'http://www.upcdatabase.com' );
48
49         $value_key = $method === 'convertUPCE'
50                 ? 'upce'
51                 : 'upc';
52
53         $params = array(
54                 new XML_RPC_Value(
55                         array(
56                                 'rpc_key' => new XML_RPC_Value( $rpc_key, 'string' ),
57                                 $value_key => new XML_RPC_Value( $value, 'string' ),
58                                 ),
59                         'struct'
60                         )
61                 );
62
63         $msg = new XML_RPC_Message( $method, $params );
64
65         $resp = $client->send( $msg );
66
67         // If there was a problem sending the message, the resp will be false
68         if( !$resp )
69         {
70                 //print the error code from the client and exit
71                 echo 'Communication error: ' . $client->errstr;
72                 exit;
73         }
74         
75         if( !$resp->faultCode() )
76         {
77                 // Store the value of the response in a variable
78                 $val = $resp->value();
79                 // Decode the value, into an array.
80                 $data = XML_RPC_decode( $val );
81
82                 return $data;
83         }
84
85         echo 'Fault Code: ' . $resp->faultCode() . "\n";
86         echo 'Fault Reason: ' . $resp->faultString() . "\n";
87         exit;
88 }