답변:
편집 : Magento는 2015 년 6 월 18 일에 SUPEE-6237 패치로이 문제를 해결했습니다.이 시점에서이 문제를 해결하기 위해 패치를 설치하는 것이 더 쉽습니다.
메서드 이름없이 요율이 $ 0.00로 표시되는 문제가있었습니다. 이 문제는 2015 년 5 월 31 일자로 USPS 요율 변화와 일치하는 것으로 보입니다.
2015 년 5 월 31 일 USPS 웹 도구는 US Postal Service API에 대한 수정 및 추가 기능을 구현할 예정입니다. 다음 변경 사항은 특히 운송 시스템에 영향을 줄 수 있습니다.
- Priority Mail International에서 캐나다로 출발하는 오리진 우편 번호
- 수정 된 특별 서비스
- 수정 된 서비스 ID
- 상품 반품 서비스에 대한 수정 된 사용 가능한 메일 클래스
우선 순위 국제 우편의 첫 번째 원인은 다음 오류를 반환합니다.
<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>
이 솔루션은 파일을 복사하는 것이 었습니다 : app/code/core/Mage/Usa/Model/Shipping/Carrier/Usps.php
에app/code/local/Mage/Usa/Model/Shipping/Carrier/Usps.php
그런 다음 394 행에 다음 코드를 삽입했습니다.
if($r->getDestCountryId()=='CA'){
$package->addChild('OriginZip', $r->getOrigPostal());
}
이것은 나를 위해 문제를 해결했습니다.
편집 : 배송 출발지에 5 자리 우편 번호를 입력 한 경우에만 작동합니다.
패치 SUPEE-6237 수정 된 문제입니다. SUPEE-6237의 변경 사항은 다음과 같습니다.
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
과
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;
이것이 누군가를 돕기를 바랍니다.
원래 게시물은 Magento v1.9에 관한 것이었지만 Magento v2와 동일한 문제가 계속 발생하는 다른 사람들을 위해 게시하고 싶습니다.
수정하려면 $api = 'IntlRateV2';
파일 의 줄 바로 앞에 다음 줄을 추가해야 합니다 vendor/magento/module-usps/Model/Carrier.php
.
$package->addChild('OriginZip', $r->getOrigPostal());
$package->addChild('AcceptanceDateTime', date('c'));
$package->addChild('DestinationPostalCode', $r->getDestPostal());
이 magento2 문제에 대한 풀 요청은 https://github.com/magento/magento2/pull/8041에서 확인할 수 있습니다.