Note that there are some explanatory texts on larger screens.

plurals
  1. POFedex API PHP Class not returning prices
    primarykey
    data
    text
    <p>I am using the Fedex PHP API.The problem is, when I run it on my server it only shows the response of the required fields of the xml without showing the price for the services at all.</p> <pre><code> &lt;?php require_once("xmlparser.php"); class Fedex { // Variables var $server = "https://gatewaybeta.fedex.com/GatewayDC"; var $accountNumber; var $meterNumber; var $carrierCode = "FDXG"; var $dropoffType = "REGULARPICKUP"; var $service; var $serviceName; var $packaging = "YOURPACKAGING"; var $weightUnits = "LBS"; var $weight; // Origin Address var $originStateOrProvinceCode; var $originPostalCode; var $originCountryCode; // Destination Address var $destStateOrProvinceCode; var $destPostalCode; var $destCountryCode; var $payorType = "SENDER"; // Functions function setServer($server) { $this-&gt;server = $server; } function setAccountNumber($accountNumber) { $this-&gt;accountNumber = $accountNumber; } function setMeterNumber($meterNumber) { $this-&gt;meterNumber = $meterNumber; } function setCarrierCode($carrierCode) { $this-&gt;carrierCode = $carrierCode; } function setDropoffType($dropoffType) { $this-&gt;dropoffType = $dropoffType; } function setService($service, $name) { $this-&gt;service = $service; $this-&gt;serviceName = $name; } function setPackaging($packaging) { $this-&gt;packaging = $packaging; } function setWeightUnits($units) { $this-&gt;weightUnits = $units; } function setWeight($weight) { $this-&gt;weight = $weight; } function setOriginStateOrProvinceCode($code) { $this-&gt;originStateOrProvinceCode = $code; } function setOriginPostalCode($code) { $this-&gt;originPostalCode = $code; } function setOriginCountryCode($code) { $this-&gt;originCountryCode = $code; } function setDestStateOrProvinceCode($code) { $this-&gt;destStateOrProvinceCode = $code; } function setDestPostalCode($code) { $this-&gt;destPostalCode = $code; } function setDestCountryCode($code) { $this-&gt;destCountryCode = $code; } function setPayorType($type) { $this-&gt;payorType = $type; } function getPrice() { $str = '&lt;?xml version="1.0" encoding="UTF-8" ?&gt;'; $str .= ' &lt;FDXRateRequest xmlns:api="http://www.fedex.com/fsmapi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FDXRateRequest.xsd"&gt;'; $str .= ' &lt;RequestHeader&gt;'; $str .= ' &lt;CustomerTransactionIdentifier&gt;Express Rate&lt;/CustomerTransactionIdentifier&gt;'; $str .= ' &lt;AccountNumber&gt;'.$this-&gt;accountNumber.'&lt;/AccountNumber&gt;'; $str .= ' &lt;MeterNumber&gt;'.$this-&gt;meterNumber.'&lt;/MeterNumber&gt;'; $str .= ' &lt;CarrierCode&gt;'.$this-&gt;carrierCode.'&lt;/CarrierCode&gt;'; $str .= ' &lt;/RequestHeader&gt;'; $str .= ' &lt;DropoffType&gt;'.$this-&gt;dropoffType.'&lt;/DropoffType&gt;'; $str .= ' &lt;Service&gt;'.$this-&gt;service.'&lt;/Service&gt;'; $str .= ' &lt;Packaging&gt;'.$this-&gt;packaging.'&lt;/Packaging&gt;'; $str .= ' &lt;WeightUnits&gt;'.$this-&gt;weightUnits.'&lt;/WeightUnits&gt;'; $str .= ' &lt;Weight&gt;'.number_format($this-&gt;weight, 1, '.', '').'&lt;/Weight&gt;'; $str .= ' &lt;OriginAddress&gt;'; $str .= ' &lt;StateOrProvinceCode&gt;'.$this-&gt;originStateOrProvinceCode.'&lt;/StateOrProvinceCode&gt;'; $str .= ' &lt;PostalCode&gt;'.$this-&gt;originPostalCode.'&lt;/PostalCode&gt;'; $str .= ' &lt;CountryCode&gt;'.$this-&gt;originCountryCode.'&lt;/CountryCode&gt;'; $str .= ' &lt;/OriginAddress&gt;'; $str .= ' &lt;DestinationAddress&gt;'; $str .= ' &lt;StateOrProvinceCode&gt;'.$this-&gt;destStateOrProvinceCode.'&lt;/StateOrProvinceCode&gt;'; $str .= ' &lt;PostalCode&gt;'.$this-&gt;destPostalCode.'&lt;/PostalCode&gt;'; $str .= ' &lt;CountryCode&gt;'.$this-&gt;destCountryCode.'&lt;/CountryCode&gt;'; $str .= ' &lt;/DestinationAddress&gt;'; $str .= ' &lt;Payment&gt;'; $str .= ' &lt;PayorType&gt;'.$this-&gt;payorType.'&lt;/PayorType&gt;'; $str .= ' &lt;/Payment&gt;'; $str .= ' &lt;PackageCount&gt;'.ceil(bcdiv(number_format($this-&gt;weight, 1, '.', ''), '150', 3)).'&lt;/PackageCount&gt;'; $str .= ' &lt;/FDXRateRequest&gt;'; //print($str); $header[] = "Host: www.smart-shop.com"; $header[] = "MIME-Version: 1.0"; $header[] = "Content-type: multipart/mixed; boundary=----doc"; $header[] = "Accept: text/xml"; $header[] = "Content-length: ".strlen($str); $header[] = "Cache-Control: no-cache"; $header[] = "Connection: close \r\n"; $header[] = $str; $ch = curl_init(); //Disable certificate check. // uncomment the next line if you get curl error 60: error setting certificate verify locations curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // uncommenting the next line is most likely not necessary in case of error 60 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //------------------------- //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); //curl_setopt($ch, CURLOPT_CAINFO, "c:/ca-bundle.crt"); //------------------------- curl_setopt($ch, CURLOPT_URL,$this-&gt;server); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 4); curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'POST'); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); $data = curl_exec($ch); if (curl_errno($ch)) { $this-&gt;getPrice(); } else { // close curl resource, and free up system resources curl_close($ch); $xmlParser = new xmlparser(); $array = $xmlParser-&gt;GetXMLTree($data); //$xmlParser-&gt;printa($array); if(count($array['FDXRATEREPLY'][0]['ERROR'])) { // If it is error $error = new fedexError(); $error-&gt;number = $array['FDXRATEREPLY'][0]['ERROR'][0]['CODE'][0]['VALUE']; $error-&gt;description = $array['FDXRATEREPLY'][0]['ERROR'][0]['MESSAGE'][0]['VALUE']; $error-&gt;response = $array; $this-&gt;error = $error; } else if (count($array['FDXRATEREPLY'][0]['ESTIMATEDCHARGES'][0]['DISCOUNTEDCHARGES'][0]['NETCHARGE'])) { $price = new fedexPrice(); $price-&gt;rate = $array['FDXRATEREPLY'][0]['ESTIMATEDCHARGES'][0]['DISCOUNTEDCHARGES'][0]['NETCHARGE'][0]['VALUE']; $price-&gt;service = $this-&gt;serviceName; $price-&gt;response = $array; $this-&gt;price = $price; } //print_r($this); return $this; } } } class fedexError { var $number; var $description; var $response; } class fedexPrice { var $service; var $rate; var $response; } ?&gt; </code></pre> <p>Below is the second file called xmlparser.php</p> <pre><code> &lt;?php class xmlparser { function GetChildren($vals, &amp;$i) { $children = array(); if (isset($vals[$i]['value'])) $children['VALUE'] = $vals[$i]['value']; while (++$i &lt; count($vals)) { switch ($vals[$i]['type']) { case 'cdata': if (isset($children['VALUE'])) $children['VALUE'] .= $vals[$i]['value']; else $children['VALUE'] = $vals[$i]['value']; break; case 'complete': if (isset($vals[$i]['attributes'])) { $children[$vals[$i]['tag']][]['ATTRIBUTES'] = $vals[$i]['attributes']; $index = count($children[$vals[$i]['tag']])-1; if (isset($vals[$i]['value'])) $children[$vals[$i]['tag']][$index]['VALUE'] = $vals[$i]['value']; else $children[$vals[$i]['tag']][$index]['VALUE'] = ''; } else { if (isset($vals[$i]['value'])) $children[$vals[$i]['tag']][]['VALUE'] = $vals[$i]['value']; else $children[$vals[$i]['tag']][]['VALUE'] = ''; } break; case 'open': if (isset($vals[$i]['attributes'])) { $children[$vals[$i]['tag']][]['ATTRIBUTES'] = $vals[$i]['attributes']; $index = count($children[$vals[$i]['tag']])-1; $children[$vals[$i]['tag']][$index] = array_merge($children[$vals[$i]['tag']][$index],$this-&gt;GetChildren($vals, $i)); } else { $children[$vals[$i]['tag']][] = $this-&gt;GetChildren($vals, $i); } break; case 'close': return $children; } } } function GetXMLTree($xml) { $data = $xml; $parser = xml_parser_create(); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); xml_parse_into_struct($parser, $data, $vals, $index); xml_parser_free($parser); //print_r($index); $tree = array(); $i = 0; if (isset($vals[$i]['attributes'])) { $tree[$vals[$i]['tag']][]['ATTRIBUTES'] = $vals[$i]['attributes']; $index = count($tree[$vals[$i]['tag']])-1; $tree[$vals[$i]['tag']][$index] = array_merge($tree[$vals[$i]['tag']][$index], $this-&gt;GetChildren($vals, $i)); } else $tree[$vals[$i]['tag']][] = $this-&gt;GetChildren($vals, $i); return $tree; } function printa($obj) { global $__level_deep; if (!isset($__level_deep)) $__level_deep = array(); if (is_object($obj)) print '[obj]'; elseif (is_array($obj)) { foreach(array_keys($obj) as $keys) { array_push($__level_deep, "[".$keys."]"); $this-&gt;printa($obj[$keys]); array_pop($__level_deep); } } else print implode(" ",$__level_deep)." = $obj\n"; } } ?&gt; </code></pre> <p>Last file below called index.php</p> <pre><code> &lt;?php require_once("xmlparser.php"); class Fedex { // Variables var $server = "https://gatewaybeta.fedex.com/GatewayDC"; var $accountNumber; var $meterNumber; var $carrierCode = "FDXG"; var $dropoffType = "REGULARPICKUP"; var $service; var $serviceName; var $packaging = "YOURPACKAGING"; var $weightUnits = "LBS"; var $weight; // Origin Address var $originStateOrProvinceCode; var $originPostalCode; var $originCountryCode; // Destination Address var $destStateOrProvinceCode; var $destPostalCode; var $destCountryCode; var $payorType = "SENDER"; // Functions function setServer($server) { $this-&gt;server = $server; } function setAccountNumber($accountNumber) { $this-&gt;accountNumber = $accountNumber; } function setMeterNumber($meterNumber) { $this-&gt;meterNumber = $meterNumber; } function setCarrierCode($carrierCode) { $this-&gt;carrierCode = $carrierCode; } function setDropoffType($dropoffType) { $this-&gt;dropoffType = $dropoffType; } function setService($service, $name) { $this-&gt;service = $service; $this-&gt;serviceName = $name; } function setPackaging($packaging) { $this-&gt;packaging = $packaging; } function setWeightUnits($units) { $this-&gt;weightUnits = $units; } function setWeight($weight) { $this-&gt;weight = $weight; } function setOriginStateOrProvinceCode($code) { $this-&gt;originStateOrProvinceCode = $code; } function setOriginPostalCode($code) { $this-&gt;originPostalCode = $code; } function setOriginCountryCode($code) { $this-&gt;originCountryCode = $code; } function setDestStateOrProvinceCode($code) { $this-&gt;destStateOrProvinceCode = $code; } function setDestPostalCode($code) { $this-&gt;destPostalCode = $code; } function setDestCountryCode($code) { $this-&gt;destCountryCode = $code; } function setPayorType($type) { $this-&gt;payorType = $type; } function getPrice() { $str = '&lt;?xml version="1.0" encoding="UTF-8" ?&gt;'; $str .= ' &lt;FDXRateRequest xmlns:api="http://www.fedex.com/fsmapi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FDXRateRequest.xsd"&gt;'; $str .= ' &lt;RequestHeader&gt;'; $str .= ' &lt;CustomerTransactionIdentifier&gt;Express Rate&lt;/CustomerTransactionIdentifier&gt;'; $str .= ' &lt;AccountNumber&gt;'.$this-&gt;accountNumber.'&lt;/AccountNumber&gt;'; $str .= ' &lt;MeterNumber&gt;'.$this-&gt;meterNumber.'&lt;/MeterNumber&gt;'; $str .= ' &lt;CarrierCode&gt;'.$this-&gt;carrierCode.'&lt;/CarrierCode&gt;'; $str .= ' &lt;/RequestHeader&gt;'; $str .= ' &lt;DropoffType&gt;'.$this-&gt;dropoffType.'&lt;/DropoffType&gt;'; $str .= ' &lt;Service&gt;'.$this-&gt;service.'&lt;/Service&gt;'; $str .= ' &lt;Packaging&gt;'.$this-&gt;packaging.'&lt;/Packaging&gt;'; $str .= ' &lt;WeightUnits&gt;'.$this-&gt;weightUnits.'&lt;/WeightUnits&gt;'; $str .= ' &lt;Weight&gt;'.number_format($this-&gt;weight, 1, '.', '').'&lt;/Weight&gt;'; $str .= ' &lt;OriginAddress&gt;'; $str .= ' &lt;StateOrProvinceCode&gt;'.$this-&gt;originStateOrProvinceCode.'&lt;/StateOrProvinceCode&gt;'; $str .= ' &lt;PostalCode&gt;'.$this-&gt;originPostalCode.'&lt;/PostalCode&gt;'; $str .= ' &lt;CountryCode&gt;'.$this-&gt;originCountryCode.'&lt;/CountryCode&gt;'; $str .= ' &lt;/OriginAddress&gt;'; $str .= ' &lt;DestinationAddress&gt;'; $str .= ' &lt;StateOrProvinceCode&gt;'.$this-&gt;destStateOrProvinceCode.'&lt;/StateOrProvinceCode&gt;'; $str .= ' &lt;PostalCode&gt;'.$this-&gt;destPostalCode.'&lt;/PostalCode&gt;'; $str .= ' &lt;CountryCode&gt;'.$this-&gt;destCountryCode.'&lt;/CountryCode&gt;'; $str .= ' &lt;/DestinationAddress&gt;'; $str .= ' &lt;Payment&gt;'; $str .= ' &lt;PayorType&gt;'.$this-&gt;payorType.'&lt;/PayorType&gt;'; $str .= ' &lt;/Payment&gt;'; $str .= ' &lt;PackageCount&gt;'.ceil(bcdiv(number_format($this-&gt;weight, 1, '.', ''), '150', 3)).'&lt;/PackageCount&gt;'; $str .= ' &lt;/FDXRateRequest&gt;'; //print($str); $header[] = "Host: www.smart-shop.com"; $header[] = "MIME-Version: 1.0"; $header[] = "Content-type: multipart/mixed; boundary=----doc"; $header[] = "Accept: text/xml"; $header[] = "Content-length: ".strlen($str); $header[] = "Cache-Control: no-cache"; $header[] = "Connection: close \r\n"; $header[] = $str; $ch = curl_init(); //Disable certificate check. // uncomment the next line if you get curl error 60: error setting certificate verify locations curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // uncommenting the next line is most likely not necessary in case of error 60 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //------------------------- //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); //curl_setopt($ch, CURLOPT_CAINFO, "c:/ca-bundle.crt"); //------------------------- curl_setopt($ch, CURLOPT_URL,$this-&gt;server); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 4); curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'POST'); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); $data = curl_exec($ch); if (curl_errno($ch)) { $this-&gt;getPrice(); } else { // close curl resource, and free up system resources curl_close($ch); $xmlParser = new xmlparser(); $array = $xmlParser-&gt;GetXMLTree($data); //$xmlParser-&gt;printa($array); if(count($array['FDXRATEREPLY'][0]['ERROR'])) { // If it is error $error = new fedexError(); $error-&gt;number = $array['FDXRATEREPLY'][0]['ERROR'][0]['CODE'][0]['VALUE']; $error-&gt;description = $array['FDXRATEREPLY'][0]['ERROR'][0]['MESSAGE'][0]['VALUE']; $error-&gt;response = $array; $this-&gt;error = $error; } else if (count($array['FDXRATEREPLY'][0]['ESTIMATEDCHARGES'][0]['DISCOUNTEDCHARGES'][0]['NETCHARGE'])) { $price = new fedexPrice(); $price-&gt;rate = $array['FDXRATEREPLY'][0]['ESTIMATEDCHARGES'][0]['DISCOUNTEDCHARGES'][0]['NETCHARGE'][0]['VALUE']; $price-&gt;service = $this-&gt;serviceName; $price-&gt;response = $array; $this-&gt;price = $price; } //print_r($this); return $this; } } } class fedexError { var $number; var $description; var $response; } class fedexPrice { var $service; var $rate; var $response; } ?&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload