Let me start by saying how much I use this forum for finding solutions to all sorts of opencart things. I haven't seen anything relating to pulling back commercial quotes for USPS though. The api documentation show the ability to pull First Class Commercial, Priority Commercial, Express Commercial, etc. Anyone know what I need to adjust to have my usps module pull back these rather than just the standard retail rate?
Actually, I think I figured it out. First I changed <SERVICE> to ONLINE from ALL. Then I output the xml that the usps api response, and saw that most types had something called rate and something called commercialrate. I added an exclusion for standard post, which doesn't have a commercial rate, and changed the getElementsByTagName('Rate') to getElementsByTagName('CommercialRate'). New code of my usps.php starts at line your line 315 in the products/catalog/model/shipping.
Code: Select all
if ($status) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'production.shippingapis.com/ShippingAPI.dll?' . $request);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
// strip reg, trade and ** out 01-02-2011
$result = str_replace('<sup>&reg;</sup>', '', $result);
$result = str_replace('<sup>&trade;</sup>', '', $result);
$result = str_replace('**', '', $result);
$result = str_replace("\r\n", '', $result);
$result = str_replace('\"', '"', $result);
if ($result) {
if ($this->config->get('usps_debug')) {
$this->log->write("USPS DATA SENT: " . urldecode($request));
$this->log->write("USPS DATA RECV: " . $result);
//echo "$result";
}
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadXml($result);
$rate_response = $dom->getElementsByTagName('RateV4Response')->item(0);
$intl_rate_response = $dom->getElementsByTagName('IntlRateV2Response')->item(0);
$error = $dom->getElementsByTagName('Error')->item(0);
$firstclasses = array (
'First-Class Mail Package',
'First-Class Mail Large Envelope',
'First-Class Mail Letter',
'First-Class Mail Postcards'
);
if ($rate_response || $intl_rate_response) {
if ($address['iso_code_2'] == 'US') {
$allowed = array(0, 1, 2, 3, 4, 5, 6, 7, 12, 13, 16, 17, 18, 19, 22, 23, 25, 27, 28);
$package = $rate_response->getElementsByTagName('Package')->item(0);
$postages = $package->getElementsByTagName('Postage');
if ($postages->length) {
foreach ($postages as $postage) {
$classid = $postage->getAttribute('CLASSID');
if (in_array($classid, $allowed)) {
if ($classid == "0") {
$mailservice = $postage->getElementsByTagName('MailService')->item(0)->nodeValue;
foreach ($firstclasses as $k => $firstclass) {
if ($firstclass == $mailservice) {
$classid = $classid . $k;
break;
}
}
if (($this->config->get('usps_domestic_' . $classid))) {
$cost = $postage->getElementsByTagName('CommercialRate')->item(0)->nodeValue;
$quote_data[$classid] = array(
'code' => 'usps.' . $classid,
'title' => $postage->getElementsByTagName('MailService')->item(0)->nodeValue,
'cost' => $this->currency->convert($cost, 'USD', $this->config->get('config_currency')),
'tax_class_id' => $this->config->get('usps_tax_class_id'),
'text' => $this->currency->format($this->tax->calculate($this->currency->convert($cost, 'USD', $this->currency->getCode()), $this->config->get('usps_tax_class_id'), $this->config->get('config_tax')))
);
}
} elseif ($classid == "4") {
$cost = $postage->getElementsByTagName('Rate')->item(0)->nodeValue;
$quote_data[$classid] = array(
'code' => 'usps.' . $classid,
'title' => $postage->getElementsByTagName('MailService')->item(0)->nodeValue,
'cost' => $this->currency->convert($cost, 'USD', $this->config->get('config_currency')),
'tax_class_id' => $this->config->get('usps_tax_class_id'),
'text' => $this->currency->format($this->tax->calculate($this->currency->convert($cost, 'USD', $this->currency->getCode()), $this->config->get('usps_tax_class_id'), $this->config->get('config_tax')))
);
} elseif ($this->config->get('usps_domestic_' . $classid)) {
$cost = $postage->getElementsByTagName('CommercialRate')->item(0)->nodeValue;
$quote_data[$classid] = array(
'code' => 'usps.' . $classid,
'title' => $postage->getElementsByTagName('MailService')->item(0)->nodeValue,
'cost' => $this->currency->convert($cost, 'USD', $this->config->get('config_currency')),
'tax_class_id' => $this->config->get('usps_tax_class_id'),
'text' => $this->currency->format($this->tax->calculate($this->currency->convert($cost, 'USD', $this->currency->getCode()), $this->config->get('usps_tax_class_id'), $this->config->get('config_tax')))
);
}
}
}
} else {
$error = $package->getElementsByTagName('Error')->item(0);
$method_data = array(
'id' => 'usps',
'title' => $this->language->get('text_title'),
'quote' => $quote_data,
'sort_order' => $this->config->get('usps_sort_order'),
'error' => $error->getElementsByTagName('Description')->item(0)->nodeValue
);
}
} else {
$allowed = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 21);
$package = $intl_rate_response->getElementsByTagName('Package')->item(0);
$services = $package->getElementsByTagName('Service');
foreach ($services as $service) {
$id = $service->getAttribute('ID');
if (in_array($id, $allowed) && $this->config->get('usps_international_' . $id)) {
$title = $service->getElementsByTagName('SvcDescription')->item(0)->nodeValue;
if ($this->config->get('usps_display_time')) {
$title .= ' (' . $this->language->get('text_eta') . ' ' . $service->getElementsByTagName('SvcCommitments')->item(0)->nodeValue . ')';
}
$cost = $service->getElementsByTagName('Postage')->item(0)->nodeValue;
$quote_data[$id] = array(
'code' => 'usps.' . $id,
'title' => $title,
'cost' => $this->currency->convert($cost, 'USD', $this->config->get('config_currency')),
'tax_class_id' => $this->config->get('usps_tax_class_id'),
'text' => $this->currency->format($this->tax->calculate($this->currency->convert($cost, 'USD', $this->currency->getCode()), $this->config->get('usps_tax_class_id'), $this->config->get('config_tax')))
);
}
}
}
} elseif ($error) {
$method_data = array(
'code' => 'usps',
'title' => $this->language->get('text_title'),
'quote' => $quote_data,
'sort_order' => $this->config->get('usps_sort_order'),
'error' => $error->getElementsByTagName('Description')->item(0)->nodeValue
);
}
}
}
if ($quote_data) {
$title = $this->language->get('text_title');
if ($this->config->get('usps_display_weight')) {
$title .= ' (' . $this->language->get('text_weight') . ' ' . $this->weight->format($weight, $this->config->get('usps_weight_class_id')) . ')';
}
function comparecost ($a, $b) {
return $a['cost'] > $b['cost'];
}
uasort($quote_data, 'comparecost');
$method_data = array(
'code' => 'usps',
'title' => $title,
'quote' => $quote_data,
'sort_order' => $this->config->get('usps_sort_order'),
'error' => false
);
}
}
return $method_data;
}
}
?>
Hello, I read and tried to implement your description on how to pull USPS commercial rate on my OC store v1..5.5.1 but could not. Please could you help by explaining in detail step by step how to do it and what FTP file to edit? Thank you for your time.
Who is online
Users browsing this forum: No registered users and 114 guests