woocommerce - 如何在 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 由于不匹配而无法自动完成状态。我也如何更改发票价值?电子邮件发票也一样。
解决方案
推荐阅读
- vba - 如何更改以下代码以生成条件:主题包含单词 True 而不是主题等于 true
- raku - 如何在shell函数中转义引号?
- bluetooth-lowenergy - Tizen 启用特征通知
- sql - InfluxQL:如果值(x)高于或低于(y)值,如何返回布尔值?
- reactjs - 为什么我会收到此 Babel JSON 配置错误?
- c# - 错误模型的 ASP.NET Core Razor 页面 OnGet 未执行
- laravel - 我们能否仅在同一个 eloquent 查询中获得总记录数和第一条记录?
- c++ - 使用 Opencv 模糊矩形中的内容
- c# - 在 Jenkins 上使用 Selenium 在 Internet Explorer 11 上进行无头测试
- python - 将图像划分为网格(例如 3x3)并提取每个网格区域的像素值