sassenach Posted September 10, 2010 Share Posted September 10, 2010 I have a site which I am working on (www.agilitegear.com). I already implemented UPS & USPS (domestic only) shipping, but now I have a problem with USPS International shipping. This is my usps script: <?php // This script was written by Mark Sanborn at http://www.marksanborn.net // If this script benefits you are your business please consider a donation // You can donate at http://www.marksanborn.net/donate. function USPS($isInt, $pounds, $ounces, $service, $dest_zip, $country, $length, $width, $height, $stotal, $pobox, $isgift, $long_country) { // ========== CHANGE THESE VALUES TO MATCH YOUR OWN =========== $userName = '542AGILI4002'; $orig_zip = '50665'; // =============== DON'T CHANGE BELOW THIS LINE =============== /* FIRST CLASS PRIORITY EXPRESS BPM PARCEL MEDIA LIBRARY ALL */ //NOTES : If First Class is selected, package cannot weigh more than 13 ounces. //NOTES : Maximum USPS package size is 70 pounds 0 ounces. $url = "http://production.shippingapis.com/ShippingAPI.dll"; $ch = curl_init(); // set the target url curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); // parameters to post curl_setopt($ch, CURLOPT_POST, 1); //YF if($service=='FIRST CLASS') { $fctype="<FirstClassMailType>PARCEL</FirstClassMailType>"; } //$fctype = ($service=='FIRST CLASS') ? "<FirstClassMailType>PARCEL</FirstClassMailType>":''; $fctype = "<FirstClassMailType>PARCEL</FirstClassMailType>"; //international delivery only if($isInt && $country!='US'){ //<Machinable>false</Machinable> /*$data = "API=IntlRate&XML= <IntlRateRequest USERID=\"$userName\"> <Package ID=\"1ST\"> <Pounds>$pounds</Pounds> <Ounces>$ounces</Ounces> <MailType>Package</MailType> <GXG> <Length>$length</Length> <Width>$width</Width> <Height>$height</Height> <POBoxFlag>$pobox</POBoxFlag> <GiftFlag>$isgift</GiftFlag> </GXG> <ValueOfContents>$stotal</ValueOfContents> <Country>$long_country</Country> </Package> </IntlRateRequest>";*/ $data = "API=IntlRate&XML= <IntlRateRequest USERID=\"$userName\"> <Package ID=\"1ST\"> <Prohibitions>An issue of a publication in which more than 5 pe<!--1901 skipped-->.</Prohibitions> <Restrictions>The maximum value of a GXG shipment to CANADA is <!--2134 skipped-->.</Restrictions> <Observations>1. Banknotes valued at $100 or more must be put u<!--3374 skipped-->.</Observations> <CustomsForms>First-Class Mail International items and Priority<!--150 skipped-->)</CustomsForms> <ExpressMail>Country Code:CAReciprocal Service Name: There is <!--1281 skipped-->l</ExpressMail> <AreasServed>Please reference Express Mail for Areas Served.</AreasServed> <Service ID=\"1\"> <Pounds>4</Pounds> <Ounces>3</Ounces> <MailType>Package</MailType> <Country>JAPAN</Country> <Postage>101.00</Postage> <ValueOfContents>250.00</ValueOfContents> <Insurance>2.00</Insurance> <SvcCommitments>1 - 3 Days</SvcCommitments> <SvcDescription>Global Express Guaranteed (GXG)</SvcDescription> <MaxDimensions>Max. length 46\", width 35\", height 46\" and max. l<!--29 skipped-->\"</MaxDimensions> <MaxWeight>70</MaxWeight> </Service> </Package> </IntlRateRequest>"; } else { $data = "API=RateV3&XML= <RateV3Request USERID=\"$userName\"> <Package ID=\"1ST\"> <Service>$service</Service> <FirstClassMailType>PARCEL</FirstClassMailType> <ZipOrigination>$orig_zip</ZipOrigination> <ZipDestination>$dest_zip</ZipDestination> <Pounds>$pounds</Pounds> <Ounces>$ounces</Ounces> <Size>REGULAR</Size> <Machinable>TRUE</Machinable> </Package> </RateV3Request>"; } // send the POST values to USPS curl_setopt($ch, CURLOPT_POSTFIELDS,$data); //echo '<br/><br/>-- '. $data. ' -- <br/>'; // Uncomment to show XML in comments $result=curl_exec ($ch); $data = strstr($result, '<?'); $xml_parser = xml_parser_create(); xml_parse_into_struct($xml_parser, $data, $vals, $index); xml_parser_free($xml_parser); $params = array(); $level = array(); $rate=0; foreach ($vals as $xml_elem) { //print_r($xml_elem); /*if(isset($xml_elem['tag']) && eregi('error', strtolower($xml_elem['tag']))){ echo 'has error, do not proceed<br/>'; } */ if(isset($xml_elem['tag']) && eregi('rate', strtolower($xml_elem['tag'])) && isset($xml_elem['value'])){ $rate = $xml_elem['value']; } /* if ($xml_elem['type'] == 'open') { if (array_key_exists('attributes',$xml_elem)) { list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']); } else { $level[$xml_elem['level']] = $xml_elem['tag']; } } if ($xml_elem['type'] == 'complete') { $start_level = 1; $php_stmt = '$params'; while($start_level < $xml_elem['level']) { $php_stmt .= '[$level['.$start_level.']]'; $start_level++; } $php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];'; eval($php_stmt); } */ } curl_close($ch); //echo '<pre>'; print_r($params); echo'</pre>'; // Uncomment to see xml tags /* $i=1; while($i < 15) { if($params['RATEV3RESPONSE']['1ST']["$i"]['RATE']=='') { $i++; } else { return $params['RATEV3RESPONSE']['1ST']["$i"]['RATE']; break; } } */ return $rate; } ?> i keep on getting an error with $0 value. Has anyone done this before with USPS international shipping? thanks in advance. Link to comment https://forums.phpfreaks.com/topic/213039-php-and-us-postal-service-intlrate-problem/ Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.