You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce中PayPal额外费用未同步至订单及邮件的问题求助

解决WooCommerce PayPal额外费用不显示在订单及邮件中的问题

你遇到的核心问题很明确:只修改了发送给PayPal的支付金额,但没有在WooCommerce的订单系统中添加这笔额外费用的记录。所以PayPal收到了加价后的金额,但WooCommerce本身不知道这笔费用的存在,自然不会在订单详情、邮件通知里体现。

要彻底解决这个问题,我们需要从两个维度入手:一是在购物车/订单中实际添加这笔额外费用项,让系统认可这笔费用;二是确保传给PayPal的金额和订单总金额保持一致。下面是具体的实现方案:

1. 添加PayPal专属额外费用到订单

我们可以使用woocommerce_cart_calculate_fees钩子,在用户结算时自动添加这笔费用,并且只针对PayPal支付方式生效:

// 添加PayPal专属额外费用到购物车与订单
add_action('woocommerce_cart_calculate_fees', 'add_paypal_surcharge_fee');
function add_paypal_surcharge_fee() {
    // 仅在结算页面且未进入订单完成等端点时生效
    if (is_checkout() && !is_wc_endpoint_url()) {
        // 获取用户选择的支付方式
        $chosen_payment_method = WC()->session->get('chosen_payment_method');
        // 仅当选择PayPal时添加10元额外费用
        if ($chosen_payment_method === 'paypal') {
            $surcharge_amount = 10;
            // 添加费用:参数依次为费用名称、金额、是否含税、费用类别(可选)
            WC()->cart->add_fee(__('PayPal 服务费', 'woocommerce'), $surcharge_amount, true, '');
        }
    }
}

2. 实现支付方式切换时的实时费用刷新

当用户在结算页面切换支付方式时,需要自动刷新购物车来显示/隐藏这笔费用,否则不会实时更新:

// 支付方式切换时刷新结算页面,更新费用显示
add_action('woocommerce_review_order_before_submit', 'refresh_payment_method_change');
function refresh_payment_method_change() {
    ?>
    <script type="text/javascript">
        jQuery(function($){
            // 监听支付方式选择框的变化
            $('form.checkout').on('change', 'input[name="payment_method"]', function(){
                // 触发结算页面更新
                $('body').trigger('update_checkout');
            });
        });
    </script>
    <?php
}

3. 同步PayPal的支付金额(可选但推荐)

虽然WooCommerce默认会把订单总金额传给PayPal,但为了避免潜在的金额不一致问题,我们可以手动同步PayPal的参数:

// 确保PayPal接收的金额与订单总金额一致
add_filter('woocommerce_paypal_args', 'sync_paypal_total_amount');
function sync_paypal_total_amount($paypal_args) {
    // 获取包含额外费用的订单总金额
    $order_total = WC()->cart->total;
    // 格式化金额为两位小数,符合PayPal的要求
    $paypal_args['amount'] = number_format($order_total, 2, '.', '');
    return $paypal_args;
}

为什么原来的代码无效?

你之前的代码只修改了paypal_args['amount_1'](单个商品的金额),但没有在WooCommerce的订单数据中添加这笔费用的记录。这会导致:

  • 订单详情、邮件通知中看不到这笔费用
  • 订单系统记录的金额和用户实际支付的金额不一致,后续对账会很麻烦
  • 可能触发WooCommerce的金额校验警告

注意事项

  • 把以上代码添加到你的主题functions.php文件中,或者使用自定义代码插件
  • 测试前请清空网站缓存,确保代码生效
  • 可以根据需求修改费用名称、金额,以及是否包含税费(add_fee的第三个参数)

内容的提问来源于stack exchange,提问作者Manik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:08:24