首页 > 解决方案 > 如何在 woocommerce 结账时以编程方式更改发票价格

问题描述

我正在使用 woocommerce_paypal_args 更改传递给 Paypal 的价格。但是,在发票中记录的价格不是发送到 Paypal 的价格。

因此,首先,我想更改发送到 Paypal 的价格。我让贝宝更改我使用会话“调整”计算的差异。

add_filter('woocommerce_paypal_args', 'addition_pay');

function addition_pay($paypal_args){
global $adjustment;
if ( ! session_id() ) {
    session_start();
}

if ( array_key_exists( 'adjustment', $_SESSION ) ) {
    $adjustment = $_SESSION['adjustment'];
} else {
    $adjustment = 0;
}
//$adjustment=0.01;
    $new_value=$paypal_args['amount_1']-$adjustment;
    $paypal_args['amount_1']=$new_value;
    return $paypal_args;
} 

这是我从中获得调整的方法。

add_filter( 'woocommerce_cart_item_subtotal', 'show_coupon_item_subtotal_discounty', 101, 3 );
function show_coupon_item_subtotal_discounty( $subtotal, $cart_item, $cart_item_key ){
    global $woocommerce;
    global $adjustment;
    if ( ! session_id() ) {
        session_start();
    }
    $adjustment =0;
    //$cartsub = wp_proce(0);
    $cartsub = 0;
    $line_subtotal = $cart_item['line_subtotal'];//$210
    $line_total    = number_format(floor(($cart_item['line_total']*100))/100,2);//178.51
    if( $line_subtotal !== $line_total ) {
        $discount = 0;
        $cpn=0;
        foreach ( WC()->cart->get_coupons() as $code => $coupon_notsure ) {
            $coupon = new WC_Coupon($code);
             $discount_type = $coupon->get_discount_type(); // Get coupon discount type
            if ($discount_type=="percent"){
                $discount += $line_subtotal*($coupon->get_amount()/100);
            }
            if ($discount_type=="fixed"){
                $discount += $coupon->get_amount();
            }
            $cpn++; 
        }
        
        
        if ($cpn>1){
        $line_total    =  $line_subtotal -$discount;
        $cart_item['line_total'] =$line_total;
        //WC()->cart->set_cart_contents_tax() =  $cart_item['line_tax'];
        //WC()->cart->set_discount_total() = $discount;
            //$cart_item['line_tax']=number_format($cart_item['line_tax'],2);
            //$cart_item['line_tax_data']['total'][1]=number_format($cart_item['line_tax_data']['total'][1],2);
        }
        $subtotal_tax  = $cart_item['line_subtotal_tax'];
        $total_tax     = $cart_item['line_tax'];
        $incl_taxes    = WC()->cart->display_prices_including_tax() && $cart_item['data']->is_taxable();
        
        $raw_subtotal = $incl_taxes ? $line_subtotal + $subtotal_tax : $line_subtotal;
        $raw_total    = $incl_taxes ? $line_total + $total_tax : $line_total;
        ///$subtotal     = sprintf( '<del>%s</del> <ins>%s<ins>',  wc_price($raw_subtotal), wc_price($raw_total) );
        $subtotal     = sprintf( '<ins>%s<ins>',  wc_price($raw_subtotal) );
        $cartsub1 =  (float)((float)($raw_total)+$cartsub);
        $cartsub = (floor($cartsub1*100)/100);
        //ADJUSTMENT
        $adjustment = $woocommerce->cart->total-(($line_subtotal-$discount)+$total_tax);
        $_SESSION['adjustment'] = $adjustment;
    }
}

问题是,当客户去订单>查看时,发票在没有调整的情况下反映。因此,当 IPN 返回回调时,woocommerce 由于不匹配而无法自动完成状态。我也如何更改发票价值?电子邮件发票也一样。

标签: woocommercepaypalpriceinvoice

解决方案


推荐阅读