Example #1
0
 function quote($pkg)
 {
     // assumes only one package at a time
     global $messageStack, $currencies;
     if ($pkg->pkg_weight == 0) {
         $messageStack->add(SHIPPING_ERROR_WEIGHT_ZERO, 'error');
         return false;
     }
     if ($pkg->ship_to_postal_code == '') {
         $messageStack->add(SHIPPING_ENDICIA_ERROR_POSTAL_CODE, 'error');
         return false;
     }
     if ($pkg->pkg_weight > ENDICIA_MAX_SINGLE_BOX_WEIGHT) {
         $messageStack->add(SHIPPING_ENDICIA_ERROR_TOO_HEAVY, 'error');
         return false;
     }
     $request = array('PostageRatesRequest' => array('RequesterID' => MODULE_SHIPPING_ENDICIA_PARTNER_ID, 'CertifiedIntermediary' => array('AccountID' => MODULE_SHIPPING_ENDICIA_ACCOUNT_NUMBER, 'PassPhrase' => MODULE_SHIPPING_ENDICIA_PASS_PHRASE), 'MailClass' => $pkg->ship_to_country_iso2 != 'US' ? 'International' : 'Domestic', 'WeightOz' => ceil($pkg->pkg_weight * 16), 'MailpieceShape' => $this->PackageMap[$pkg->pkg_type], 'RegisteredMailValue' => number_format($pkg->total_amount, 2), 'Value' => number_format($pkg->total_amount, 2), 'Services' => array('@attributes' => array('DeliveryConfirmation' => 'OFF', 'SignatureConfirmation' => 'OFF', 'COD' => $pkg->cod ? 'ON' : 'OFF', 'DeliveryConfirmation' => 'ON', 'CertifiedMail' => 'OFF', 'ElectronicReturnReceipt' => 'OFF', 'InsuredMail' => 'OFF', 'RestrictedDelivery' => 'OFF', 'ReturnReceipt' => 'OFF', 'AdultSignature' => 'OFF', 'AdultSignatureRestrictedDelivery' => 'OFF')), 'FromPostalCode' => $pkg->ship_postal_code, 'ToPostalCode' => $pkg->ship_to_postal_code, 'ToCountryCode' => $pkg->ship_to_country_iso2, 'Machinable' => 'TRUE', 'CODAmount' => $pkg->cod ? $pkg->total_amount : '0', 'InsuredValue' => $pkg->insurance ? $pkg->total_amount : '0'));
     //echo 'Endicia XML Submit String:<br />'; print_r($request); echo '<br />'; return false;
     $arrRates = array();
     $url = MODULE_SHIPPING_ENDICIA_TEST_MODE == 'Prod' ? MODULE_SHIPPING_ENDICIA_WSDL_URL : MODULE_SHIPPING_ENDICIA_TEST_WSDL_URL;
     $client = new SoapClient($url, array('trace' => 1));
     try {
         $response = $client->CalculatePostageRates($request);
         //echo 'Request <pre>'  . htmlspecialchars($client->__getLastRequest()) . '</pre>';
         //echo 'Response <pre>' . htmlspecialchars($client->__getLastResponse()) . '</pre>';
         $user_choices = explode(',', str_replace(' ', '', MODULE_SHIPPING_ENDICIA_TYPES));
         if ($response->PostageRatesResponse->Status == 0) {
             if (is_object($response->PostageRatesResponse->PostagePrice)) {
                 $response->PostageRatesResponse->PostagePrice = array($response->PostageRatesResponse->PostagePrice);
             }
             if (is_array($response->PostageRatesResponse->PostagePrice)) {
                 foreach ($response->PostageRatesResponse->PostagePrice as $rateReply) {
                     $service = $this->EndiciaRateCodes[$rateReply->MailClass];
                     $total = $rateReply->TotalAmount;
                     if (in_array($service, $user_choices)) {
                         $arrRates[$this->code][$service]['cost'] = $rateReply->TotalAmount;
                         $arrRates[$this->code][$service]['book'] = $rateReply->TotalAmount;
                         $arrRates[$this->code][$service]['note'] = '';
                         if (function_exists('endicia_shipping_rate_calc')) {
                             $arrRates[$this->code][$service]['quote'] = endicia_shipping_rate_calc($arrRates[$this->code][$service]['book'], $arrRates[$this->code][$service]['cost'], $service);
                         } else {
                             $arrRates[$this->code][$service]['quote'] = $rateReply->TotalAmount;
                         }
                     }
                 }
             }
         } else {
             $messageStack->add(TEXT_ERROR . ' (' . $response->PostageRatesResponse->Status . ') ' . $response->PostageRatesResponse->ErrorMessage, 'error');
             return false;
         }
     } catch (SoapFault $exception) {
         //echo 'Fault Request <pre>'  . htmlspecialchars($client->__getLastRequest()) . '</pre>';
         //echo 'Fault Response <pre>' . htmlspecialchars($client->__getLastResponse()) . '</pre>';
         $messageStack->add("Soap Error ({$exception->faultcode}) {$exception->faultstring}", 'error');
         return false;
     }
     // echo 'arrRates array = '; print_r($arrRates); echo '<br /><br />';
     return array('result' => 'success', 'rates' => $arrRates);
 }