我正在使用woocommerce插件和wointommerce的braintree扩展付款。我已经支持woocommerce braintree的卡和paypal支付结账。我试图弄清楚如何知道用户在用户实际结账和付款之前选择了哪个支付网关。检查 woocommerce 或 braintree 下的任何挂钩,以查找信用卡单选按钮或PayPal付款单选按钮。
但是我知道我们可以在成功付款后检测用于特定订单的网关,但我希望在结账页面中付款完成之前选择的网关信息。任何帮助?
答案 0 :(得分:0)
您可以在结帐页面上使用一些基本JavaScript检测所选的付款方式,并通过挂钩 woocommerce_checkout_update_order_review 操作来运行您的自定义代码。
首先, 您还应该将JS代码放在结帐页面,结帐模板或主题的页眉/页脚中,以便您可以检测用户何时更改了付款方式选项并在此之后运行您自己的代码。
JS代码:
jQuery(document).ready( function() {
jQuery( "#payment_method_bacs" ).on( "click", function() {
jQuery( 'body' ).trigger( 'update_checkout' );
});
jQuery( "#payment_method_paypal" ).on( "click", function() {
jQuery(document.body).trigger("update_checkout");
});
jQuery( "#payment_method_stripe" ).on( "click", function() {
jQuery(document.body).trigger("update_checkout");
});
});
请注意,对于您处于有效状态的每种付款方式,您都应添加“点击”事件。它为您提供了在触发自定义代码时进行微调的选项。 要防止点击事件仅运行,您应该在第一个下面添加下一个JS代码块。
jQuery( document ).ajaxStop(function() {
jQuery( "#payment_method_bacs" ).on( "click", function() {
jQuery(document.body).trigger("update_checkout");
});
jQuery( "#payment_method_paypal" ).on( "click", function() {
jQuery(document.body).trigger("update_checkout");
});
jQuery( "#payment_method_stripe" ).on( "click", function() {
jQuery(document.body).trigger("update_checkout");
});
});
它只是在ajax之后触发的相同代码。 在两个JS代码块中添加您实际使用的付款选项。
之后,您将自定义PHP代码挂钩到这样的结帐:
if ( ! function_exists( 'name_of_your_function' ) ) :
function name_of_your_function( $posted_data) {
// Your code goes here
}
endif;
add_action('woocommerce_checkout_update_order_review', 'name_of_your_function');
此代码可以放在functions.php。
中以下是完整的PHP代码,可在结帐页面选择特定付款选项时检测并运行:
function name_of_your_function( $posted_data) {
global $woocommerce;
// Parsing posted data on checkout
$post = array();
$vars = explode('&', $posted_data);
foreach ($vars as $k => $value){
$v = explode('=', urldecode($value));
$post[$v[0]] = $v[1];
}
// Here we collect payment method
$payment_method = $post['payment_method'];
// Run code custom code for each specific payment option selected
if ($payment_method == "paypal") {
// Your code goes here
}
elseif ($payment_method == "bacs") {
// Your code goes here
}
elseif ($payment_method == "stripe") {
// Your code goes here
}
}
add_action('woocommerce_checkout_update_order_review', 'name_of_your_function');
我希望这有帮助! 这是在结帐页面上运行所有自定义逻辑的一个非常强大的选项!