Câu trả lời:
EDIT: Hãy nhớ rằng Magento đã giải quyết vấn đề này bằng bản vá SUPEE-6237 của họ vào ngày 18 tháng 6 năm 2015. Có lẽ việc cài đặt bản vá vào thời điểm này có thể dễ dàng hơn để giải quyết vấn đề.
Tôi gặp vấn đề khi tỷ lệ hiển thị là $ 0,00 mà không có tên phương thức. Vấn đề dường như trùng với thay đổi tỷ lệ USPS kể từ ngày 31 tháng 5 năm 2015:
Ngày 31 tháng 5 năm 2015 Công cụ web USPS sẽ triển khai các sửa đổi và các tính năng bổ sung cho API Dịch vụ Bưu chính của Hoa Kỳ. Những thay đổi sau đây có thể đặc biệt ảnh hưởng đến các hệ thống vận chuyển:
- Mã ZIP xuất xứ cần thiết cho Thư ưu tiên quốc tế đến Canada
- Sửa đổi dịch vụ đặc biệt
- ID dịch vụ đã sửa đổi
- Các lớp thư có sẵn đã sửa đổi cho Dịch vụ trả hàng
Thư ưu tiên gây ra đầu tiên quốc tế trả về lỗi sau:
<ServiceErrors>
<ServiceError>
<Id>50050</Id>
<Description>The Origin ZIP Code and the Destination Postal Code is required for Priority Mail International when mailing to Canada.</Description>
</ServiceError>
</ServiceErrors>
Giải pháp là để sao chép các tập tin: app/code/core/Mage/Usa/Model/Shipping/Carrier/Usps.php
đếnapp/code/local/Mage/Usa/Model/Shipping/Carrier/Usps.php
Sau đó tôi đã chèn đoạn mã sau vào dòng 394:
if($r->getDestCountryId()=='CA'){
$package->addChild('OriginZip', $r->getOrigPostal());
}
Điều này đã khắc phục vấn đề cho tôi.
Chỉnh sửa: Điều này sẽ chỉ hoạt động nếu bạn đã nhập mã zip gồm 5 chữ số trong nguồn gốc vận chuyển.
Bản vá lỗi SUPEE-6237 cho tôi. những thay đổi trong SUPEE-6237 là:
app/code/core/Mage/Usa/Model/Shipping/Carrier/Abstract.php
@@ -442,6 +442,17 @@ abstract class Mage_Usa_Model_Shipping_Carrier_Abstract extends Mage_Shipping_Mo
}
/**
+ * Check is Canada
+ *
+ * @param string $countryId
+ * @return boolean
+ */
+ protected function _isCanada($countryId)
+ {
+ return $countryId == 'CA';
+ }
+
+ /**
* Check whether girth is allowed for the carrier
*
* @param null|string $countyDest
và
app/code/core/Mage/Usa/Model/Shipping/Carrier/Usps.php
@@ -392,7 +392,10 @@ class Mage_Usa_Model_Shipping_Carrier_Usps
$package->addChild('Height', $height);
$package->addChild('Girth', $girth);
-
+ if ($this->_isCanada($r->getDestCountryId())) {
+ //only 5 chars available
+ $package->addChild('OriginZip', substr($r->getOrigPostal(), 0, 5));
+ }
$api = 'IntlRateV2';
}
$request = $xml->asXML();
@@ -477,6 +480,9 @@ class Mage_Usa_Model_Shipping_Carrier_Usps
else {
if (is_object($xml->Package) && is_object($xml->Package->Service)) {
foreach ($xml->Package->Service as $service) {
+ if ($service->ServiceErrors->count()) {
+ continue;
+ }
$serviceName = $this->_filterServiceName((string)$service->SvcDescription);
$serviceCode = 'INT_' . (string)$service->attributes()->ID;
$serviceCodeToActualNameMap[$serviceCode] = $serviceName;
Hy vọng điều này sẽ giúp ai đó.
Mặc dù bài đăng gốc là về Magento v1.9, tôi muốn đăng bài này cho những người khác đang gặp vấn đề tương tự với Magento v2, vì nó vẫn tồn tại.
Việc sửa chữa yêu cầu thêm các dòng sau ngay trước dòng $api = 'IntlRateV2';
trong tệp vendor/magento/module-usps/Model/Carrier.php
.
$package->addChild('OriginZip', $r->getOrigPostal());
$package->addChild('AcceptanceDateTime', date('c'));
$package->addChild('DestinationPostalCode', $r->getDestPostal());
Bạn có thể xem yêu cầu kéo về vấn đề magento2 này tại đây: https://github.com/magento/magento2/pull/8041