我有一家magento商店,需要能够将订单运送到库拉索岛。默认情况下,这被归类为Magento的Netherland Antilles,但是,我发现即使设置了这个订单,也不会从USPS获得正确的运费,即使启用了国际运费。
我已经通过en.xml文件和管理员将国家/地区添加到了magento。我已将其作为我们可以根据USPS送货方式运送到的国家/地区以及magento的directory_country表中启用。
调用USPS API时,我将其视为请求和结果:
2015-11-30T22:08:15+00:00 DEBUG (7): Array
(
[request] => <?xml version="1.0" encoding="UTF-8"?>
<IntlRateV2Request USERID="725CIGAR7315"><Revision>2</Revision><Package ID="0"><Pounds>0</Pounds><Ounces>0.8</Ounces><MailType>All</MailType><ValueOfContents>1</ValueOfContents><Country/><Container>VARIABLE</Container><Size>REGULAR</Size><Width/><Length/><Height/><Girth/></Package></IntlRateV2Request>
[result] => <?xml version="1.0" encoding="UTF-8"?>
<IntlRateV2Response><Package ID="0"><Error><Number>-2147219080</Number><Source>;IntlRateV2.UnpackIntlRateV2Node</Source><Description>Missing value for Country.</Description><HelpFile/><HelpContext/></Error></Package></IntlRateV2Response>
[__pid] => 2786
)
请注意请求中的空Country标记。我已经挖掘了代码,并通过app / code / core / Mage / Usa / Model / Shipping / Carrier / Usps.php文件查看该国家应该设置的位置。
当然,我必须覆盖我已经完成的这个文件(不直接编辑核心magento),但我仍然无法在发送时填充Country标记。我将此添加到setRequest函数:
Mage::log("Destination Country: ");
Mage::log($request->getDestCountryId());
if ($request->getDestCountryId()) {
$destCountry = $request->getDestCountryId();
} else {
$destCountry = self::USA_COUNTRY_ID;
}
$r->setDestCountryId($destCountry);
这在我的日志中输出&#34; CW&#34;根据我的数据库设置,这是交易的正确国家/地区代码。什么给出了什么?为什么国家代码没有传递给API,所以我可以得到一些定价?
我认为这不是一个新问题,而且我可能正在寻找一些非常明显的东西,所以我希望有人可以指出我正确的方向,因为我目前正在&#34;难倒&#34;。
提前致谢!
答案 0 :(得分:1)
问题是USPS API采用完整的国家/地区名称而不是ISO标准的双字母国家/地区代码。
在这种情况下,您的国家/地区代码CW会映射到&#34; Curacao&#34;。这些国家/地区名称必须准确无误。
有关USPS名称映射的国家/地区代码列表,请参阅:
https://docs.rocketship.it/php/1-0/usps-country-codes.html
有关国家/地区名称的正式列表(无代码映射),请参阅:
答案 1 :(得分:0)
所以经过一些相当详尽的代码追踪和研究后,我已经想出如何让它全部运转起来。这是一个多步骤的过程,但它让我让Curacao,Bonaire和黑山与USPS合作。我相信这个修复同样适用于其他国家 - 我还没有发现其他任何反映同样问题的其他国家。
查找要添加或启用USPS的国家/地区的ISO2和ISO3国家/地区代码。我在维基百科上找到了我需要的东西。
在我的情况下编辑您的商店语言文件我只有一个,即en.xml,(位于&#34; /lib/Zend/Locale/Data/en.xml")。找到地区xml块:
<territories>
<territory type="xxxx">Country</territory>
并添加您的地区(如果它们不存在 - 在我的情况下,黑山已经确实存在)。
<territory type="CW">Curacao</territory>
<territory type="BQ">Bonaire</territory>
保存此文件。
登录您的mysql数据库并将以下行插入directory_country表。
insert into directory_country values('CW','CW','CUW');
insert into directory_country values('BQ','BQ','BES');
编辑位于核心Mage库中的Usps Shipping Carrier类。不要修改实际核心 - 安装程序在app / code / local中创建一个本地修改版本。我会假设你已经知道如何做到这一点。
在文件&#34; app / code / local / Mage / Usa / Model / Shipping / Carrier / Usps.php&#34;找到名为的函数:
protected function _getCountryName($countryId)
将新国家/地区添加到数组中:
'BQ' => 'Bonaire',
'CW' => 'Curacao',
将您的ISO2代码映射到USPS官方国家/地区名称。
保存此文件。
登录您的商店管理员。禁用编译模式,刷新缓存和索引。转到配置&gt;网络&gt;一般并启用您的新国家/地区。保存此更改。
转到配置&gt;销售&gt;送货方式。单击USPS,然后启用新国家/地区。如果已选择所有国家/地区,请将下拉菜单设置为所选国家/地区,然后再返回“所有国家/地区”。这将迫使选择新增国家。保存此更改。
重新启用并强制重新编译编译模式(如果你使用它),并采取新的国家进行旋转!