Example #1
0
 private function _getRates($response)
 {
     $doc = new \XMLDocument();
     $xp = new \XMLParser();
     $xp->setDocument($doc);
     $xp->parse($response);
     $doc = $xp->getDocument();
     $rates = array();
     $results = array();
     if (is_object($doc->root)) {
         $root = $doc->getRoot();
         if ($root->getElementByName('ratesAndServicesResponse')) {
             $service_rates = $root->getElementByName('ratesAndServicesResponse');
             $shipment = $service_rates->getElementsByName('product');
             $currencies = Registry::get('currencies');
             if (!empty($currencies['CAD'])) {
                 for ($i = 0; $i < count($shipment); $i++) {
                     $id = $shipment[$i]->getAttribute("id");
                     if (!empty($id) && $id > 0) {
                         $rates[$id] = array('rate' => floatval($shipment[$i]->getValueByPath("rate")) * $currencies['CAD']['coefficient']);
                         if ($shipment[$i]->getValueByPath("deliveryDate") != '') {
                             $rates[$id]['delivery_time'] = $shipment[$i]->getValueByPath("deliveryDate");
                         }
                         unset($id);
                     }
                 }
                 $results['cost'] = $rates;
             } else {
                 $results['error'] = __('canada_post_activation_error');
             }
         } elseif ($root->getElementByName('error')) {
             $results['error'] = $root->getValueByPath('/error/statusMessage');
         }
     }
     return $results;
 }
Example #2
0
function fn_arb_get_error($result, $request_type)
{
    $doc = new XMLDocument();
    $xp = new XMLParser();
    $xp->setDocument($doc);
    $xp->parse($result);
    $doc = $xp->getDocument();
    $return = array();
    if (is_object($doc->root)) {
        $root = $doc->getRoot();
        $shipments = $root->getElementsByName($request_type);
        if ($shipments) {
            for ($k = 0; $k < count($shipments); $k++) {
                $faults = $shipments[$k]->getElementByName("Faults");
                if (!empty($faults)) {
                    $fault = $faults->getElementsByName("Fault");
                    for ($i = 0; $i < count($fault); $i++) {
                        $return[] = $fault[$i]->getValueByPath("/Desc") . ($fault[$i]->getElementByName("Context") ? ' (' . trim($fault[$i]->getValueByPath("/Context")) . ')' : '');
                    }
                }
            }
        }
    }
    return implode(' / ', $return);
}
Example #3
0
 /**
  * Gets error message from shipping service server
  *
  * @param  string $response Response from Shipping service server
  * @return string Text of error or false if no errors
  */
 public function processErrors($response)
 {
     $doc = new \XMLDocument();
     $xp = new \XMLParser();
     $xp->setDocument($doc);
     $xp->parse($response);
     $doc = $xp->getDocument();
     $return = array();
     if (is_object($doc->root)) {
         $root = $doc->getRoot();
         // distinguish error reports from not available services
         if ($root->name == 'res:ErrorResponse') {
             $path = array('Response', 'Status');
         } else {
             $path = array('GetQuoteResponse', 'Note');
         }
         foreach ($path as $node) {
             $root = $root->getElementsByName($node);
             if ($root) {
                 $root = $root[0];
             } else {
                 break;
             }
         }
         if ($root) {
             $conditions = $root->getElementsByName('Condition');
             foreach ($conditions as $condition) {
                 $error_code = trim($condition->getValueByPath('ConditionCode'));
                 $error_text = trim($condition->getValueByPath('ConditionData'));
                 $return[] = "({$error_code}) {$error_text}";
             }
         }
     }
     return implode(' / ', $return);
 }
Example #4
0
function fn_ups_get_rates($result)
{
    $doc = new XMLDocument();
    $xp = new XMLParser();
    $xp->setDocument($doc);
    $xp->parse($result);
    $doc = $xp->getDocument();
    $return = array();
    if (is_object($doc->root)) {
        $responseStatusCode = $doc->getValueByPath('RatingServiceSelectionResponse/Response/ResponseStatusCode');
        $root = $doc->getRoot();
        $shipment = $root->getElementsByName("RatedShipment");
        for ($i = 0; $i < count($shipment); $i++) {
            $service_code = $shipment[$i]->getValueByPath("/Service/Code");
            $total_charge = $shipment[$i]->getValueByPath("/TotalCharges/MonetaryValue");
            if (!($service_code && $total_charge)) {
                continue;
            }
            //$rated_packages = $shipment[$i]->getElementsByName("RatedPackage");
            //$days_to_delivery = $shipment[$i]->getValueByPath("/GuaranteedDaysToDelivery");
            //$delivery_time = $shipment[$i]->getValueByPath("/ScheduledDeliveryTime");
            if (!empty($total_charge)) {
                $return[$service_code] = $total_charge;
            }
        }
    }
    return $return;
}
Example #5
0
function fn_qb_get_xml_body($response)
{
    $doc = new XMLDocument();
    $xp = new XMLParser();
    $xp->setDocument($doc);
    $xp->parse($response);
    $doc = $xp->getDocument();
    $root = $doc->getRoot();
    return $root;
}
Example #6
0
function fn_usps_get_rates($result, $is_domestic)
{
    // Parse XML message returned by the UPS post server.
    $doc = new XMLDocument();
    $xp = new XMLParser();
    $xp->setDocument($doc);
    $xp->parse($result);
    $doc = $xp->getDocument();
    $return = array();
    if (is_object($doc->root)) {
        $root = $doc->getRoot();
        if ($is_domestic == true) {
            $shipment = $root->getElementsByName("Package");
        } else {
            $shipment = $root->getElementByName("Package");
            if (!empty($shipment)) {
                $shipment = $shipment->getElementsByName("Service");
            } else {
                return false;
            }
        }
        for ($i = 0; $i < count($shipment); $i++) {
            $service_name = '';
            if ($is_domestic == true) {
                if ($shipment[$i]->getElementByName("Postage")) {
                    $service_name = $shipment[$i]->getValueByPath("/Postage/MailService");
                    $rate = $shipment[$i]->getValueByPath("/Postage/Rate");
                    if (floatval($rate)) {
                        $is_machinable = $shipment[$i]->getValueByPath("/Machinable");
                        if ($service_name == 'Parcel Post') {
                            $service_name .= $is_machinable == 'TRUE' ? ' M' : ' N';
                        } elseif (strpos($service_name, 'Express Mail') !== false) {
                            $service_name = 'Express Mail';
                        } elseif (strpos($service_name, 'Priority Mail') !== false) {
                            $service_name = 'Priority Mail';
                        } elseif (strpos($service_name, 'First-Class Mail') !== false) {
                            $service_name = 'First-Class Mail';
                        }
                    }
                }
            } else {
                if ($shipment[$i]->getElementByName("Postage")) {
                    $service_name = $shipment[$i]->getValueByPath("/SvcDescription");
                    $rate = $shipment[$i]->getValueByPath("/Postage");
                }
            }
            if (empty($service_name)) {
                continue;
            }
            $return[$service_name] = $rate;
        }
        return $return;
    }
    return false;
}
//
define('AREA', 'C');
define('AREA_NAME', 'customer');
define('SKIP_SESSION_VALIDATION', true);
require './../prepare.php';
require './../init.php';
include DIR_LIB . 'xmldocument/xmldocument.php';
// TODO:
// 1. Add coupons calculation (merchant-code-string)
// 2. Price-included taxes - how to display? Now displays as zero tax
$xml_response = $GLOBALS['HTTP_RAW_POST_DATA'];
$doc = new XMLDocument();
$xp = new XMLParser();
$xp->setDocument($doc);
$xp->parse($xml_response);
$doc = $xp->getDocument();
if (is_object($doc->root)) {
    $root = $doc->getRoot();
    $message_recognizer = $root->getName();
} else {
    fn_google_xml_error('GCC: failed to parse incoming XML');
}
if ($message_recognizer != 'merchant-calculation-callback') {
    fn_google_xml_error('GCC: incoming XML is not that we are expecting');
}
// Restart session
$google_sess_id = $root->getValueByPath('shopping-cart/merchant-private-data/additional_data/session_id');
if (empty($google_sess_id)) {
    fn_google_xml_error('GCC: failed to get session ID from XML');
}
Session::reset_id($google_sess_id);
Example #8
0
 function _transitparseResult($xmlTransitResult)
 {
     $transitTime = array();
     // Parse XML message returned by the UPS post server.
     $doc = new XMLDocument();
     $xp = new XMLParser();
     $xp->setDocument($doc);
     $xp->parse($xmlTransitResult);
     $doc = $xp->getDocument();
     // Get version. Must be xpci version 1.0001 or this might not work.
     // 1.0001 and 1.0002 seem to be very similar, forget about this for the moment
     /*        $responseVersion = $doc->getValueByPath('TimeInTransitResponse/Response/TransactionReference/XpciVersion');
             if ($this->transitxpci_version != $responseVersion) {
                 $message = MODULE_SHIPPING_UPSXML_RATES_TEXT_COMM_VERSION_ERROR;
                 return $message;
             } */
     // Get response code. 1 = SUCCESS, 0 = FAIL
     $responseStatusCode = $doc->getValueByPath('TimeInTransitResponse/Response/ResponseStatusCode');
     if ($responseStatusCode != '1') {
         $errorMsg = $doc->getValueByPath('TimeInTransitResponse/Response/Error/ErrorCode');
         $errorMsg .= ": ";
         $errorMsg .= $doc->getValueByPath('TimeInTransitResponse/Response/Error/ErrorDescription');
         // send email if enabled in the admin section
         if ($this->email_errors) {
             error_log("UPSXML TimeInTransit Error: " . $errorMsg . " experienced by customer with id " . $_SESSION['customer_id'] . " on " . date('Y-m-d H:i:s'), 1, STORE_OWNER_EMAIL_ADDRESS);
         }
         // log errors to file ups_error.log when set
         if ($this->ups_error_file) {
             error_log(date('Y-m-d H:i:s') . "\tTimeInTransit\t" . $errorMsg . "\t" . $_SESSION['customer_id'] . "\n", 3, $this->ups_error_file);
         }
         return $errorMsg;
     }
     $root = $doc->getRoot();
     $rootChildren = $root->getChildren();
     for ($r = 0; $r < count($rootChildren); $r++) {
         $elementName = $rootChildren[$r]->getName();
         if ($elementName == "TransitResponse") {
             $transitResponse = $root->getElementsByName("TransitResponse");
             $serviceSummary = $transitResponse['0']->getElementsByName("ServiceSummary");
             $this->numberServices = count($serviceSummary);
             for ($s = 0; $s < $this->numberServices; $s++) {
                 // index by Desc because that's all we can relate back to the service with
                 // (though it can probably return the code as well..)
                 $serviceDesc = $serviceSummary[$s]->getValueByPath("Service/Description");
                 $transitTime[$serviceDesc]["days"] = $serviceSummary[$s]->getValueByPath("EstimatedArrival/BusinessTransitDays");
                 $transitTime[$serviceDesc]["date"] = $serviceSummary[$s]->getValueByPath("EstimatedArrival/Date");
                 $transitTime[$serviceDesc]["guaranteed"] = $serviceSummary[$s]->getValueByPath("Guaranteed/Code");
             }
         }
     }
     if ($this->logfile) {
         error_log("------------------------------------------\n", 3, $this->logfile);
         foreach ($transitTime as $desc => $time) {
             error_log("Business Transit: " . $desc . " = " . $time["date"] . "\n", 3, $this->logfile);
         }
     }
     return $transitTime;
 }