diff --git a/modules/ppcp-api-client/src/Endpoint/PayUponInvoiceOrderEndpoint.php b/modules/ppcp-api-client/src/Endpoint/PayUponInvoiceOrderEndpoint.php index 97b40a73d..285ebda70 100644 --- a/modules/ppcp-api-client/src/Endpoint/PayUponInvoiceOrderEndpoint.php +++ b/modules/ppcp-api-client/src/Endpoint/PayUponInvoiceOrderEndpoint.php @@ -233,9 +233,15 @@ class PayUponInvoiceOrderEndpoint { * @return array */ private function ensure_taxes( WC_Order $wc_order, array $data ): array { - $tax_total = $data['purchase_units'][0]['amount']['breakdown']['tax_total']['value']; - $item_total = $data['purchase_units'][0]['amount']['breakdown']['item_total']['value']; - $shipping = $data['purchase_units'][0]['amount']['breakdown']['shipping']['value']; + $tax_total = $data['purchase_units'][0]['amount']['breakdown']['tax_total']['value']; + $item_total = $data['purchase_units'][0]['amount']['breakdown']['item_total']['value']; + $shipping = $data['purchase_units'][0]['amount']['breakdown']['shipping']['value']; + + $handling = isset( $data['purchase_units'][0]['amount']['breakdown']['handling'] ) ? $data['purchase_units'][0]['amount']['breakdown']['handling']['value'] : 0; + $insurance = isset( $data['purchase_units'][0]['amount']['breakdown']['insurance'] ) ? $data['purchase_units'][0]['amount']['breakdown']['insurance']['value'] : 0; + $shipping_discount = isset( $data['purchase_units'][0]['amount']['breakdown']['shipping_discount'] ) ? $data['purchase_units'][0]['amount']['breakdown']['shipping_discount']['value'] : 0; + $discount = isset( $data['purchase_units'][0]['amount']['breakdown']['discount'] ) ? $data['purchase_units'][0]['amount']['breakdown']['discount']['value'] : 0; + $order_tax_total = $wc_order->get_total_tax(); $tax_rate = round( ( $order_tax_total / $item_total ) * 100, 1 ); @@ -263,7 +269,7 @@ class PayUponInvoiceOrderEndpoint { ); $total_amount = $data['purchase_units'][0]['amount']['value']; - $breakdown_total = $item_total + $tax_total + $shipping; + $breakdown_total = $item_total + $tax_total + $shipping + $handling + $insurance - $shipping_discount - $discount; $diff = round( $total_amount - $breakdown_total, 2 ); if ( $diff === -0.01 || $diff === 0.01 ) { $data['purchase_units'][0]['amount']['value'] = number_format( $breakdown_total, 2, '.', '' );