如果在WooCommerce中设置主货币为RMB,且付款方式支持paypal,当用户选择使用paypal支付时,就会发生1块钱变成1刀的悲剧。还好这个问题并非无药可解。

解决方法是在系统向paypal发送参数前更改参数,WooCommerce提供的woocommerce_paypal_args filter可以完成这个任务。代码如下:

add_filter('woocommerce_paypal_args', 'convert_rmb_to_usd');
function convert_rmb_to_usd($paypal_args){
    if ( $paypal_args['currency_code'] == 'RMB'){
        $convert_rate = 6.2116; //Set converting rate
        $count = 1;
        while( isset($paypal_args['amount_' . $count]) ){
            $paypal_args['amount_' . $count] = round( $paypal_args['amount_' . $count] / $convert_rate, 2);
            $count++;
        }       
    }
    return $paypal_args;
}

如果发现currency_code是RMB,就把currency_code转换成美元(USD),且按照汇率($convert_rate)把商品的价格(amount_1)和运费(amount_2)都转化成美元。

如果你想接收其它paypal支持的货币(这货为啥就不支持RMB),比如港币,只需要更改currency code($paypal_args[‘currency_code’])和汇率($convert_rate)就可以了。

货币符号对照表在此,按自己需要的选择吧。

AUD: Australian Dollar

BRL: Brazilian Real

CAD: Canadian Dollar

MXN: Mexican Nuevo Peso

NZD: New Zealand Dollar

HKD: Hong Kong Dollar

SGD: Singapore Dollar

USD: US Dollar

EUR: Euro

JPY: Japanese Yen

TRY: Turkish Lira

NOK: Norwegian Krone

CZK: Czech Koruna

DKK: Danish Krone

HUF: Hungarian Forint

ILS: Israeli New Shekel

MYR: Malaysian Ringgit

PHP: Philippine Peso

PLN: Polish Zloty

SEK: Swedish Krona

CHF: Swiss Franc

TWD: Taiwan Dollar

THB: Thai Baht

GBP: Pound Sterling

30条留言

  1. 博主我在最新版本的woocommerce 上用了这段代码却不能实现,我将第三行的改为$currency_array[] = ‘CNY’; 就可以了。

    1. rmb在前几次更新里被改成cny了,所以这里写cny是一定的,但这段代码还能用吗,我记得人民币是主货币时paypal会自动禁用。总之谢谢你提醒,有空我会更新这段代码。

      1. 感谢博主回复!关于提示“网关已禁用: 贝宝不支持你的商铺货币。”的问题,我这里有段代码:https://gist.github.com/Jeff2Ma/91f148fc301a8ae0851b 可以让让woocommerce中文网关支持paypal。

  2. PayPal does not support your store currency.

    网关已禁用: 贝宝不支持你的商铺货币。

    1. paypal本来就不支持人民币啊,你主货币得是它支持的货币,比如美元

      1. 请问一下RMB为主货币的时候是怎么设置仍可以使用Paypal?

        1. paypal直接在代码里限制了不能用rmb,所以靠后台设置无法实现,如果代码里有filter还可以改改,你可以看看is available方法怎么写的,我忘了

  3. 我想付费请您定制这个插件的一些功能,不知可有兴趣?联络我~ 邮箱你知道。

  4. 你好博主有个问题想咨询你,我用的是woocommerce 主题,(英文) 当paypal 在sandbox 测试成功后,我如何讲paypal 设为正常可用状态?(能正常收款)

    1. 禁用sandbox功能,填上真实的paypal账户就可以了。

  5. 你好,打扰了。
    在网上搜来搜去,对woocommerce有研究并且写出来只有这里了。我想请教一个不关于该主题的问题。

    用wordpress 搭建了个网站卖给老外衣服,用了woocommerce 并且配置了paypal,但是配置后怎么都不行,
    checkout后 也输入了paypal的账户 密码,再按一个paynow 就可以支付了,这时候页面自动跳转了,显示
    Dispatch Error, please check logfile for more information

    发生错误。

    返回首页

    请问这大概是什么问题,是woocommerce没配置好,还是我paypal 没配置好,
    谢谢了。

    1. 这个问题比较特殊,我没遇到过。我觉得你应该先用paypal的sandbox模式测试一下,如果没问题说明你的paypal配置正确。如果有问题,最好先看一下woocommerce菜单下的系统信息,如果有红色提示,最好处理下,其中有一项就是类似paypal这种ipn服务所需要的组件,如果没有的话,paypal肯定不能正常工作。要是还解决不了,打电话问paypal客服吧。

      1. 谢谢啊 问题解决了。
        插件冲突。
        对了,你回复我的评论我的邮箱没收到,QQ企业邮箱。
        所以过来看了看。

        1. 可能进垃圾邮箱了吧,我这个bluehost不让用smtp,而它自己的邮件服务器地址各种被标记为垃圾邮件来源…

  6. 代码是加在哪里?

  7. 超赞,解决了这个困扰我的问题

  8. 这个我测试下来还是有bug,就是多商品的时候,前2个可以正常转换,但是超过2个就不行了。第三个就又变成美金,数值还是人民币的值,amount_1这个参数是不是可以无限添加?我添加了amount_3、amount_4,好像多商品就没有这个问题了,但是不知道又没有其他bug,忘答复,谢谢。

    PS,我设置的商品不带邮费,是虚拟物品,不知道又没有关系。

    1. 多谢你发现这个问题,确实如你所说,多商品时会出错,而且商品是可以无限增加的,我更新了一下代码,你再试试看,有问题告诉我,谢谢。

  9. 这个我测试下来还是有bug,就是多商品的时候,前2个可以正常转换,但是超过2个就不行了。第三个就又变成美金,数值还是人民币的值,amount_1这个参数是不是可以无限添加?我添加了amount_3、amount_4,好像多商品就没有这个问题了,但是不知道又没有其他bug,忘答复,谢谢。

  10. 这是我用woocommerce搭建的网店,面向国内的外国人。我大概是国内用这个软件实现营利的比较早的人了。希望有同好交流一下。

    1. 你的网店很漂亮,我喜欢这种简约的风格。我虽然做过woocommerce的东西,都是给别人做,自己还没有。如果你愿意和我交流,我乐意之至!

      1. 还是请教一个问题:

        因为我要销售的是虚拟商品,不需要提供 billing address 和 shipping address,但是用户在付款前,就是有这个步骤。

        这个界面能否在功能上进行调整,只要用户填上 联系方式 (手机、QQ、MSN这些)?

        1. 我感觉可以。
          1. 参考WooCommerce文档 – Overriding core fields ,将billing相关的字段全部删除。

          2. 添加新的自定义字段,比如你说的qq之类的,手机号本来就有,不要删除就是了。代码参考下面的Lesson 2

          3. 写处理函数,参考Lesson 3中 Process the checkout那段代码

        2. PS. shipping不用去管,你在产品编辑页面将产品设置为虚拟的以后,所有shipping相关的内容自动就不显示了

  11. 如果我手里的毛爷爷能变成本杰明·富兰克林,如果我的银联卡能变成VISA卡,而且数值不变该有多好!

评论功能已关闭