WooCommerce Opayo Payment Suite:程序化设置交易为立即付款或仅认证
解决方案
针对你的需求,我们可以利用Opayo Payment Suite提供的过滤器钩子动态修改交易类型,以下是具体实现步骤:
核心实现代码
将以下代码添加到你的主题functions.php文件或自定义插件中:
add_filter( 'opayo_payment_suite_transaction_type', 'custom_opayo_transaction_type_based_on_deposit', 10, 2 ); function custom_opayo_transaction_type_based_on_deposit( $transaction_type, $order ) { // 1. 定义判断订单是否包含预付款的逻辑,根据你的实际情况调整 $has_deposit = false; // 示例1:检查订单是否有预付款元数据(比如使用了WooCommerce Deposits插件) $deposit_amount = $order->get_meta( '_deposit_amount', true ); if ( ! empty( $deposit_amount ) && $deposit_amount > 0 ) { $has_deposit = true; } // 示例2:检查订单是否包含特定产品类型的预付款商品 foreach ( $order->get_items() as $item ) { $product = $item->get_product(); if ( $product && $product->is_type( 'deposit' ) ) { $has_deposit = true; break; } } // 2. 根据判断结果修改交易类型 if ( ! $has_deposit ) { // 无预付款时设置为「仅认证」,对应Opayo的交易类型值为AUTH return 'AUTH'; } // 有预付款时保留默认的「立即付款」(对应Opayo的SALE) return $transaction_type; }
关键说明
- 钩子说明:
opayo_payment_suite_transaction_type是Opayo Payment Suite官方提供的过滤器,用于覆盖默认交易类型,接收当前交易类型和订单对象两个参数。 - 预付款判断逻辑:代码提供了两种常见判断示例,你需要根据业务场景调整:
- 若使用第三方预付款插件(如WooCommerce Deposits),可通过订单元数据判断
- 若是自定义预付款产品类型,直接检查商品类型即可
- 交易类型值:Opayo交易类型中,
SALE对应「立即付款」,AUTH对应「仅认证」,注意值的大小写要准确。
测试建议
- 创建两个测试订单:一个含预付款商品,一个不含
- 完成支付流程后,登录Opayo后台查看交易记录类型是否符合预期
- 若判断逻辑不生效,可通过
var_dump($order)输出订单数据,确认预付款相关标识字段
内容的提问来源于stack exchange,提问作者AlwaysConfused
相关产品推荐
相关产品推荐

