我在woocommerce中出现此错误“已禁用网关:贝宝(PayPal)不支持您的商店货币". [英] I have this error in woocommerce "Gateway Disabled: PayPal does not support your store currency"

查看:203
本文介绍了我在woocommerce中出现此错误“已禁用网关:贝宝(PayPal)不支持您的商店货币".的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的woocommerce网站上出现此错误:

I have this error in my woocommerce web site:

禁用网关:PayPal不支持您的商店货币.

Gateway Disabled: PayPal does not support your store currency.

有人对此有具体解决方案吗?

Any one have specific solution for this?

我正在使用沙特里亚尔(SAR)和美元($).

I am using currency Saudi Riyaal(SAR) and american Dollars($).

推荐答案

我已经在这个问题上工作了几天,这是我找到的解决方案. 在我的情况下,我需要BGN,因此代码适用于该货币(可以轻松地将其用于其他货币).

I have been working on this problem for few days and here are the solutions I found. In my case I need BGN, so the codes are for that currency (they can be easily adapted for other currencies).

===解决方案1 ​​===

此解决方案中的代码适用于名为 paypal-bgn-to-euro.php 的插件文件(在保加利亚语中保存为UTF-8,而没有BOM单词),该文件位于名为 paypal-bgn-to-euro .该插件告诉PayPal支持BGN.然后,用户离开订单页面并转到PayPal网站后,它将货币(和金额)转换为EUR(PayPal支持的实际货币).汇率每天从免费的API自动更新两次.用户用欧元付款,但是在WooCommerce中创建的订单仍然是BGN. WooCommerce在验证中检测到错误(有时是两个),因为货币(和金额)不匹配,因此将订单保留.然后,该插件会将任何订单的状态更改为正在处理,其中包含说明PayPal货币或金额不匹配的订单的注释.阅读代码中的注释以获取更多信息.

The code in this solution is for a plugin file called paypal-bgn-to-euro.php (saved as UTF-8 without BOM for the Bulgarian words) that is in a folder called paypal-bgn-to-euro. The plugin tells PayPal to support BGN. Then after the user leaves the order page and goes to the PayPal site, it converts the currency (and amount) to EUR (an actual PayPal supported currency). The exchange rate is updated automatically twice daily from a free API. The user pays in EUR but the created order in WooCommerce is still in BGN. WooCommerce detects an error (or sometimes two) in the validation because the currencies (and amounts) do not match and it puts the order on hold. The plugin then changes the status to processing for any order with an order note saying something about PayPal currencies or amounts not matching. Read the comments in the code for more info.

<?php

/*
Plugin Name: Paypal BGN support
Description: Plugin description here.
Author: Nikolay Nikolov
Version: 1.0.0
*/

/////////////////////BEGIN segment 1
//this segment I got from here and changed it a little: http://devseon.com/en/wordpress-tutorials/woocommerce-add-a-paypal-unsupported-currency
//it lies to PayPal that the BGN currency is supported, and converts it to EUR when the payment is made
//it does not change the currency in the WooCommerce order, it remains the same, and WooCommerce detects an error and it puts the order on hold
//but we fix that in segment 3

add_filter( 'woocommerce_paypal_supported_currencies', 'pbte_add_bgn_paypal_valid_currency' );

function pbte_add_bgn_paypal_valid_currency( $currencies )
{
    array_push ( $currencies , 'BGN' );
    return $currencies;
}

add_filter('woocommerce_paypal_args', 'pbte_convert_bgn_to_eur');

function pbte_convert_bgn_to_eur($paypal_args)
{
    if ( $paypal_args['currency_code'] == 'BGN')
    {
        $convert_rate = get_option('pbte_eur_to_bgn_rate'); //set the converting rate
        $paypal_args['currency_code'] = 'EUR'; //change BGN to EUR
        $i = 1;

        while (isset($paypal_args['amount_' . $i]))
        {
            $paypal_args['amount_' . $i] = round( $paypal_args['amount_' . $i] / $convert_rate, 2);
            ++$i;
        }
    }
    return $paypal_args;
}

/////////////////////END segment 1


/////////////////////BEGIN segment 2
//I made this segment so the exchange rate is updated automatically with a wordpress cron job twice daily

//runs on plugin activation
register_activation_hook( plugin_dir_path( __FILE__ )."paypal-bgn-to-euro.php", 'pbte_activate_plugin' );

//runs on plugin deactivation
register_deactivation_hook( plugin_dir_path( __FILE__ )."paypal-bgn-to-euro.php", 'pbte_deactivate_plugin' );

//when the cron job runs, we call a function to update the exchange rate option value
add_action('pbte_twicedaily_check_eur_event', 'pbte_update_eur_rate_option');

//runs on plugin activation
function pbte_activate_plugin()
{
    pbte_update_eur_rate_option();  //we update the exchange rate option

    if (!wp_next_scheduled('pbte_twicedaily_check_eur_event'))  //adds an cron job (if it is not already added) to udpate the exchange rate twice daily
        wp_schedule_event(time(), 'twicedaily', 'pbte_twicedaily_check_eur_event');
}

//runs on plugin deactivation
function pbte_deactivate_plugin()
{
    wp_clear_scheduled_hook('pbte_twicedaily_check_eur_event'); //removes the cron job we added
}

//gets the exchange rate from a free api and updates our option
function pbte_update_eur_rate_option()
{
    $data = json_decode(file_get_contents("http://api.fixer.io/latest?symbols=BGN&base=EUR")); //gets the exchange rate from a free api
    if(!empty($data->rates->BGN))
    {
        if(get_option('pbte_eur_to_bgn_rate'))
            update_option('pbte_eur_to_bgn_rate', floatval($data->rates->BGN));
        else
            add_option('pbte_eur_to_bgn_rate', floatval($data->rates->BGN)); //if the option does not exist for some reason, we create it
    }
    else //something went wrong while getting the data from the api so we will email the admin
    {
        $message = "This is a message from ".get_site_url()
        .". There is a problem getting the API data in the plugin PayPal BGN support.";
        $subject = "Problem with Paypal BGN support";
        $to_email = get_bloginfo('admin_email');
        $headers[] = 'Content-Type: text/html; charset=UTF-8';
        wp_mail($to_email, $subject, $message, $headers);
    }
}

/////////////////////END segment 2


/////////////////////BEGIN segment 3
//Since the currencies do not match, WooCommerce puts the order on hold. We fix this with this segment.

//this runs when a new note is added to the order
add_filter( 'woocommerce_new_order_note_data', 'pbte_fix_order_status', 10, 2 );

//if the note says that the PayPal currencies or amounts do not match, then we will change the status to processing
function pbte_fix_order_status($a_note, $a_order)
{
    //the check is done in two languages
    if ( strpos($a_note['comment_content'],'PayPal валутите не съвпадат') !== false
    || strpos($a_note['comment_content'],'PayPal currencies do not match') !== false
    || strpos($a_note['comment_content'],'PayPal наличността не отговаря') !== false
    || strpos($a_note['comment_content'],'PayPal amounts do not match') !== false )
    {
        //we create the order var
        $order = new WC_Order($a_order['order_id']);
        //if the current status is on-hold - we change it to processing and add an optional note
        if($order->status == 'on-hold')
            $order->update_status('processing', 'The PayPal BGN support plugin did this note.');
    }

    return $a_note;
}

/////////////////////END segment 3

?>

===解决方案2 ===

---步骤1 ---

您需要使用一个小插件或在您的functions.php中添加此代码:

You need to add this code with a small plugin or in your functions.php:

add_filter( 'woocommerce_paypal_supported_currencies', 'add_my_own_paypal_currency' );

function add_my_own_paypal_currency( $currencies )
{
    array_push ( $currencies , 'BGN' );
    return $currencies;
}

---步骤2 ---

当用户在我们网站的订购页面上时,由于他选择PayPal方法,因此我们将货币(和金额)转换为支持的货币.

We convert the currency (and amount) to a supported one while the user is on the order page in our site, as he chooses the PayPal method.

因此,对于不同的WooCommerce网关,我们需要使用不同的币种.这正是名为 Booster for WooCommerce 的免费插件的功能之一(也有付费版本).此功能称为付款网关货币.

So we need a different currency for different WooCommerce gateways. Which is exactly one of the features of a free plugin called Booster for WooCommerce (it has a paid version too). This feature is called Payment Gateways Currency.

当我们激活插件和所选功能时,我们只能为PayPal选择不同的货币,然后在此处输入转换率(由于某种原因,它希望分隔符使用逗号而不是点).不过据说付费版本支持转换率的自动更新(我还没有测试过).

When we activate the plugin and the selected feature we can choose a different currency only for PayPal and we enter there a conversion rate (for some reason it wants a comma for a separator and not a point). The paid version though is said to support automatic updates of the conversion rates (I haven't tested it).

付款后,WooCommerce中的订单现在使用新币种(与解决方案1不同).如果它们假定所有订单均使用WooCommerce商店货币,则可能会影响您正在使用的其他插件.

After the payment is made, the order in WooCommerce is with the new currency now (not like Solution 1). Which might affect other plugins that you are using if they assume all orders are in the WooCommerce store currency.

===解决方案3 ===

我还没有测试过这个,但是我发现这个付费插件叫做"

I haven't tested this one, but I found this paid plugin called "PAYPAL CURRENCY CONVERTER PRO FOR WOOCOMMERCE" and the author claims that it solves the problem.

这篇关于我在woocommerce中出现此错误“已禁用网关:贝宝(PayPal)不支持您的商店货币".的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆