在ajax请求后更新购物车总数



这是我的自定义ajax请求回调。

我使用wp_remote_post的一些数据并获得关于我自己的woocommerce支付网关分期付款的json结果。

/**
* Check avaliblity for installments via WordPress Ajax
*
* @return void
*/
function check_installment() {
if ( isset($_REQUEST) ) {
$action = data_get($_REQUEST, 'action');
if($action == 'check_installment')
{
$cart_data = WC()->session->get('cart_totals');  
$binNumber = data_get($_REQUEST, 'bin');
if(!$binNumber)
{
return;
}

$_initGateway = new Woo_Ipara_Gateway();
$_initGateway = $_initGateway->checkInstallment($binNumber);
$data = [
'cardFamilyName' => data_get($_initGateway, 'cardFamilyName'),
'supportedInstallments' => data_get($_initGateway, 'supportedInstallments')
];
echo json_encode(getInstallmentComissions(data_get($_initGateway, 'cardFamilyName')));  

}

} 
die();
}
add_action( 'wp_ajax_check_installment', 'check_installment');
add_action( 'wp_ajax_nopriv_check_installment', 'check_installment');

现在,支付提供商对特定的信用卡有不同的佣金。因此,它的意思是,当用户选择分期付款值时,我想在此请求后更改订单总额。

我还发现了一些过滤器,关于计算总woocommerce_calculated_total,但是如何触发这个,在ajax请求和用户之后,选择分期付款的选择?


add_filter( 'woocommerce_calculated_total', 'custom_calculated_total', 10, 2 );
function custom_calculated_total( $total, $cart ){
// some magic.
}

有什么帮助吗?谢谢。

首先,过滤器方法是错误的,我想尝试woocommerce_calculated_total

肯定是,woocommerce_checkout_order_processed

另一个问题是,WC()->cart->add_fee( "text", $fee, false, '' );不能正确工作。

你应该在你的动作中直接使用new WC_Order_Item_Fee()类。

在我的例子中这是代码的一部分;

add_action('woocommerce_checkout_order_processed', 'addFeesBeforePayment', 10, 3);
function addFeesBeforePayment( $order_id, $posted_data, $order ) {
// some logic about bin verification and remote fetch about installment comissions. 

$cartTotal = WC()->cart->cart_contents_total;

$newCartTotal = $cartTotal + ( $cartTotal * $defaultComission / 100 ); 
$installmentFee = $cartTotal * ($defaultComission / 100 );   
$item_fee = new WC_Order_Item_Fee();
$item_fee->set_name( 'Kredi Kartı Komisyonu ('.$defaultInstallment.' Taksit)' ); // Generic fee name
$item_fee->set_amount( $installmentFee ); // Fee amount
$item_fee->set_tax_class( '' ); // default for ''
$item_fee->set_tax_status( 'none' ); // or 'none'
$item_fee->set_total( $installmentFee ); // Fee amount 
$order->add_item( $item_fee ); 
$order->calculate_totals(); 
$order->add_order_note( 'Bu sipariş için ödeme '. $defaultInstallment . ' taksit seçeneği seçilerek oluşturuldu. Toplam taksit komisyonu, sipariş tutarına ek olarak ' . $installmentFee. ' TL karşılığında eklendi.' );
}

幸福的编码。

相关内容

  • 没有找到相关文章

最新更新