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

如何设置Woocommerce中MercadoPago附加费不可退款且自动更新订单状态

实现方案

你当前的附加费添加逻辑可正常运行,只需追加退款拦截的钩子代码即可实现需求,以下代码直接添加到主题functions.php文件即可生效:

// 拦截MercadoPago订单退款逻辑,排除附加费
add_filter( 'woocommerce_refund_amount', 'exclude_mp_surcharge_from_refund', 10, 3 );
function exclude_mp_surcharge_from_refund( $refund_amount, $order, $max_refund ) {
    // 仅处理MercadoPago支付的订单
    if ( $order->get_payment_method() !== 'woo-mercado-pago-basic' ) {
        return $refund_amount;
    }
    // 查找订单中的Tasa de Emisión附加费
    $surcharge_amount = 0;
    foreach( $order->get_fees() as $fee ) {
        if ( $fee->get_name() === 'Tasa de Emisión' ) {
            $surcharge_amount = $fee->get_total();
            break;
        }
    }
    // 如果是全额退款请求,扣除附加费金额
    if ( $refund_amount == $max_refund && $surcharge_amount > 0 ) {
        $refund_amount = $refund_amount - $surcharge_amount;
    }
    return $refund_amount;
}

// 退款完成后自动将订单状态设置为已退款
add_action( 'woocommerce_refund_created', 'set_mp_order_refunded_status', 10, 2 );
function set_mp_order_refunded_status( $refund_id, $refund ) {
    $order = $refund->get_order();
    if ( $order->get_payment_method() !== 'woo-mercado-pago-basic' ) {
        return;
    }
    // 检查剩余未退款金额是否等于附加费金额,如果是直接标记为全额退款
    $surcharge_amount = 0;
    $fee_name = '';
    foreach( $order->get_fees() as $fee ) {
        if ( $fee->get_name() === 'Tasa de Emisión' ) {
            $surcharge_amount = $fee->get_total();
            $fee_name = $fee->get_name();
            break;
        }
    }
    if ( $order->get_remaining_refund_amount() == $surcharge_amount ) {
        $order->set_status( 'refunded' );
        $order->save();
        // 添加订单备注说明附加费未退款,方便对账
        $order->add_order_note( sprintf( '已自动处理全额退款,%s附加费%s未纳入退款金额', $fee_name, wc_price($surcharge_amount) ) );
    }
}
逻辑说明
  • 自动识别使用MercadoPago支付的订单,不会影响其他支付渠道的退款规则
  • 触发全额退款时自动扣除「Tasa de Emisión」附加费金额,仅退还商品及运费等其他费用
  • 退款完成后自动将订单状态更新为REFUNDED(已退款),同时自动添加订单备注说明附加费未退款
  • 附加费金额直接从订单数据中读取,不需要手动写死固定数值,后续你调整附加费金额也不需要修改这段代码
测试建议

上线前建议先走测试流程验证逻辑:

  • 选择MercadoPago渠道下单,确认订单中存在对应附加费
  • 发起全额退款,确认退款金额为订单总额减去附加费,订单状态自动变为已退款
  • 切换其他支付方式下单退款,确认规则不受影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:06:03