Magento的前台可以提供货币种类选择,当选择不同的货币种类,那么站内的商品价格会进行自动变化,当用户进行购买商品后进行checkout,几个步骤之后最后的订单价格还是显示当前的货币价格,当进行pp支付后,发现被转换成了美圆。
需求:
因为公司的PP帐户是支持多货币种类的,所以想当用户选择什么货币,最后都去支付什么货币。
分析:首先前台的功能其实是我们在后台进行货币种类增加、税率获取得到的。当然M的后台有个类似linux的cron的功能。可以定时去进行获取税率,具体没有看这个部分的功能,其实应该是一个调用webservice的过程。
货币种类分两大类,一类是默认的货币,另外一类是其他的货币,当正确获取到税率之后,我们就可以使用这个功能了。
这个税率是以默认货币来进行计算的。当添加商品的时候所加的也是默认的货币价格。
M在进行购物车商品增加之后,他其实记录了两类货币的价格。
一个就是默认的货币价格,另外一个是当前用户选择的货币种类的价格。
而对应的方法
getBasexxxx -- 获取默认货币的方法
getxxx -- 获取当前货币的方法。
所以,实现上面的需求,我们只需要进行相关方法的修改即可。
app\code\core\Mage\Paypal\Model\Standard.php
$amount = ($a->getBaseSubtotal()+$b->getBaseSubtotal())-($a->getBaseDiscountAmount()+$b->getBaseDiscountAmount());
$amount = ($a->getSubtotal()+$b->getSubtotal())-($a->getDiscountAmount()+$b->getDiscountAmount());
需求二:如果我们的PP帐户只能接收美元,而站内的默认货币用的还是英镑,那么该如何处理呢?
所以,我们必须要实现一个方法,来将购物车总的商品默认货币价格与美圆进行一个转换。
分析发现,这个税率转换的数据表在
directory_currency_rate
这里
currency_from currency_to rate
EUR EUR 1.000000000000
EUR USD 1.415000000000
GBP EUR 1.260700000000
GBP GBP 1.000000000000
GBP HKD 11.382600000000
GBP USD 1.592500000000
USD EUR 0.706700000000
USD USD 1.000000000000
OK,我们在
app\code\core\Mage\Core\Model\Store.php
中增加一个方法
public function convertPriceToUsd($price, $format=false, $includeContainer = false)
{
$value = $this->getBaseCurrency()->convert($price, "USD");
$value = $this->roundPrice($value);
return $value;
}
这个就是将传过来的价格,根据当前的货币进行一个转换。
所以,我们传递价格过来的时候一定是取默认的货币价格。
$amount = ($a->getBaseSubtotal()+$b->getBaseSubtotal())-($a->getBaseDiscountAmount()+$b->getBaseDiscountAmount());
$amount = $this->getQuote()->getStore()->convertPriceToUsd($amount,true);
$amount = sprintf('%.2f', $amount);
这样就实现了刚刚的需求。
:| 但看他数据表的结构,我想他一定还应该提供了另外一个方法,不根据默认货币来进行转换.
其实也非常简单,因为时间关系,所以没太深入研究.希望这个能够带给大家一点启示.遇到类似的需求能知道到哪里去研究就好了。
(责任编辑:好模板) |