Stop sending line items to Mijireh Fixes #5365
Like PayPal, Mijireh struggles with out prices including tax due to rounding errors. Since the validation cannot be disabled, its better to just send the order as 1 item. This will prevent rounding errors and payment failures. Prices excluding tax are unaffected.
This commit is contained in:
parent
78e9aed6c1
commit
97e0449bd8
|
@ -25,7 +25,6 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
|
|
||||||
$this->id = 'mijireh_checkout';
|
$this->id = 'mijireh_checkout';
|
||||||
$this->method_title = __( 'Mijireh Checkout', 'woocommerce' );
|
$this->method_title = __( 'Mijireh Checkout', 'woocommerce' );
|
||||||
$this->icon = apply_filters( 'woocommerce_mijireh_checkout_icon', WC()->plugin_url() . '/includes/gateways/mijireh/assets/images/credit_cards.png' );
|
$this->icon = apply_filters( 'woocommerce_mijireh_checkout_icon', WC()->plugin_url() . '/includes/gateways/mijireh/assets/images/credit_cards.png' );
|
||||||
|
@ -84,8 +83,6 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
*/
|
*/
|
||||||
public function mijireh_notification() {
|
public function mijireh_notification() {
|
||||||
if ( isset( $_GET['order_number'] ) ) {
|
if ( isset( $_GET['order_number'] ) ) {
|
||||||
global $woocommerce;
|
|
||||||
|
|
||||||
$this->init_mijireh();
|
$this->init_mijireh();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -103,9 +100,7 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
} catch ( Mijireh_Exception $e ) {
|
} catch ( Mijireh_Exception $e ) {
|
||||||
|
|
||||||
wc_add_notice( __( 'Mijireh error:', 'woocommerce' ) . $e->getMessage(), 'error' );
|
wc_add_notice( __( 'Mijireh error:', 'woocommerce' ) . $e->getMessage(), 'error' );
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elseif ( isset( $_POST['page_id'] ) ) {
|
elseif ( isset( $_POST['page_id'] ) ) {
|
||||||
|
@ -115,8 +110,6 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialise Gateway Settings Form Fields
|
* Initialise Gateway Settings Form Fields
|
||||||
*
|
*
|
||||||
|
@ -154,7 +147,6 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Admin Panel Options
|
* Admin Panel Options
|
||||||
* - Options for bits like 'title' and availability on a country-by-country basis
|
* - Options for bits like 'title' and availability on a country-by-country basis
|
||||||
|
@ -184,7 +176,6 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process the payment and return the result
|
* Process the payment and return the result
|
||||||
*
|
*
|
||||||
|
@ -199,23 +190,35 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
$mj_order = new Mijireh_Order();
|
$mj_order = new Mijireh_Order();
|
||||||
$wc_order = new WC_Order( $order_id );
|
$wc_order = new WC_Order( $order_id );
|
||||||
|
|
||||||
|
// Avoid rounding issues altogether by sending the order as one lump
|
||||||
|
if ( get_option( 'woocommerce_prices_include_tax' ) == 'yes' ) {
|
||||||
|
|
||||||
|
// Don't pass items - Pass 1 item for the order items overall
|
||||||
|
$item_names = array();
|
||||||
|
|
||||||
|
if ( sizeof( $wc_order->get_items() ) > 0 ) {
|
||||||
|
foreach ( $wc_order->get_items() as $item ) {
|
||||||
|
if ( $item['qty'] ) {
|
||||||
|
$item_names[] = $item['name'] . ' x ' . $item['qty'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$mj_order->add_item( sprintf( __( 'Order %s' , 'woocommerce'), $wc_order->get_order_number() ) . " - " . implode( ', ', $item_names ), number_format( $wc_order->get_total() - round( $wc_order->get_total_shipping() + $wc_order->get_shipping_tax(), 2 ) + $wc_order->get_order_discount(), 2, '.', '' ), 1 );
|
||||||
|
|
||||||
|
if ( ( $wc_order->get_total_shipping() + $wc_order->get_shipping_tax() ) > 0 ) {
|
||||||
|
$mj_order->shipping = number_format( $wc_order->get_total_shipping() + $wc_order->get_shipping_tax(), 2, '.', '' );
|
||||||
|
}
|
||||||
|
$mj_order->show_tax = false;
|
||||||
|
|
||||||
|
// No issues when prices exclude tax
|
||||||
|
} else {
|
||||||
// add items to order
|
// add items to order
|
||||||
$items = $wc_order->get_items();
|
$items = $wc_order->get_items();
|
||||||
|
|
||||||
foreach( $items as $item ) {
|
foreach( $items as $item ) {
|
||||||
$product = $wc_order->get_product_from_item( $item );
|
$product = $wc_order->get_product_from_item( $item );
|
||||||
|
|
||||||
if ( get_option( 'woocommerce_prices_include_tax' ) == 'yes' ) {
|
|
||||||
|
|
||||||
$mj_order->add_item( $item['name'], $wc_order->get_item_subtotal( $item, true, false ), $item['qty'], $product->get_sku() );
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
$mj_order->add_item( $item['name'], $wc_order->get_item_subtotal( $item, false, true ), $item['qty'], $product->get_sku() );
|
$mj_order->add_item( $item['name'], $wc_order->get_item_subtotal( $item, false, true ), $item['qty'], $product->get_sku() );
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle fees
|
// Handle fees
|
||||||
|
@ -225,6 +228,14 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
$mj_order->add_item( $item['name'], number_format( $item['line_total'], 2, '.', ',' ), 1, '' );
|
$mj_order->add_item( $item['name'], number_format( $item['line_total'], 2, '.', ',' ), 1, '' );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$mj_order->shipping = round( $wc_order->get_total_shipping(), 2 );
|
||||||
|
$mj_order->tax = $wc_order->get_total_tax();
|
||||||
|
}
|
||||||
|
|
||||||
|
// set order totals
|
||||||
|
$mj_order->total = $wc_order->get_total();
|
||||||
|
$mj_order->discount = $wc_order->get_total_discount();
|
||||||
|
|
||||||
// add billing address to order
|
// add billing address to order
|
||||||
$billing = new Mijireh_Address();
|
$billing = new Mijireh_Address();
|
||||||
$billing->first_name = $wc_order->billing_first_name;
|
$billing->first_name = $wc_order->billing_first_name;
|
||||||
|
@ -237,8 +248,10 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
$billing->country = $wc_order->billing_country;
|
$billing->country = $wc_order->billing_country;
|
||||||
$billing->company = $wc_order->billing_company;
|
$billing->company = $wc_order->billing_company;
|
||||||
$billing->phone = $wc_order->billing_phone;
|
$billing->phone = $wc_order->billing_phone;
|
||||||
if ( $billing->validate() )
|
|
||||||
|
if ( $billing->validate() ) {
|
||||||
$mj_order->set_billing_address( $billing );
|
$mj_order->set_billing_address( $billing );
|
||||||
|
}
|
||||||
|
|
||||||
// add shipping address to order
|
// add shipping address to order
|
||||||
$shipping = new Mijireh_Address();
|
$shipping = new Mijireh_Address();
|
||||||
|
@ -251,26 +264,16 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
$shipping->zip_code = $wc_order->shipping_postcode;
|
$shipping->zip_code = $wc_order->shipping_postcode;
|
||||||
$shipping->country = $wc_order->shipping_country;
|
$shipping->country = $wc_order->shipping_country;
|
||||||
$shipping->company = $wc_order->shipping_company;
|
$shipping->company = $wc_order->shipping_company;
|
||||||
if ( $shipping->validate() )
|
|
||||||
|
if ( $shipping->validate() ) {
|
||||||
$mj_order->set_shipping_address( $shipping );
|
$mj_order->set_shipping_address( $shipping );
|
||||||
|
}
|
||||||
|
|
||||||
// set order name
|
// set order name
|
||||||
$mj_order->first_name = $wc_order->billing_first_name;
|
$mj_order->first_name = $wc_order->billing_first_name;
|
||||||
$mj_order->last_name = $wc_order->billing_last_name;
|
$mj_order->last_name = $wc_order->billing_last_name;
|
||||||
$mj_order->email = $wc_order->billing_email;
|
$mj_order->email = $wc_order->billing_email;
|
||||||
|
|
||||||
// set order totals
|
|
||||||
$mj_order->total = $wc_order->get_total();
|
|
||||||
$mj_order->discount = $wc_order->get_total_discount();
|
|
||||||
|
|
||||||
if ( get_option( 'woocommerce_prices_include_tax' ) == 'yes' ) {
|
|
||||||
$mj_order->shipping = round( $wc_order->get_total_shipping() + $wc_order->get_shipping_tax(), 2 );
|
|
||||||
$mj_order->show_tax = false;
|
|
||||||
} else {
|
|
||||||
$mj_order->shipping = round( $wc_order->get_total_shipping(), 2 );
|
|
||||||
$mj_order->tax = $wc_order->get_total_tax();
|
|
||||||
}
|
|
||||||
|
|
||||||
// add meta data to identify woocommerce order
|
// add meta data to identify woocommerce order
|
||||||
$mj_order->add_meta_data( 'wc_order_id', $order_id );
|
$mj_order->add_meta_data( 'wc_order_id', $order_id );
|
||||||
|
|
||||||
|
@ -288,11 +291,10 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
);
|
);
|
||||||
return $result;
|
return $result;
|
||||||
} catch ( Mijireh_Exception $e ) {
|
} catch ( Mijireh_Exception $e ) {
|
||||||
wc_add_notice( __( 'Mijireh error:', 'woocommerce' ) . $e->getMessage(), 'error' );
|
wc_add_notice( __( 'Mijireh error:', 'woocommerce' ) . $e->getMessage() . print_r( $mj_order, true ), 'error' );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* init_mijireh function.
|
* init_mijireh function.
|
||||||
*
|
*
|
||||||
|
@ -313,15 +315,12 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* page_slurp function.
|
* page_slurp function.
|
||||||
*
|
*
|
||||||
* @access public
|
* @access public
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public static function page_slurp() {
|
public static function page_slurp() {
|
||||||
|
|
||||||
self::init_mijireh();
|
self::init_mijireh();
|
||||||
|
|
||||||
$page = get_page( absint( $_POST['page_id'] ) );
|
$page = get_page( absint( $_POST['page_id'] ) );
|
||||||
|
@ -334,17 +333,12 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
die;
|
die;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add_page_slurp_meta function.
|
* add_page_slurp_meta function.
|
||||||
*
|
*
|
||||||
* @access public
|
* @access public
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public static function add_page_slurp_meta() {
|
public static function add_page_slurp_meta() {
|
||||||
global $woocommerce;
|
|
||||||
|
|
||||||
if ( self::is_slurp_page() ) {
|
if ( self::is_slurp_page() ) {
|
||||||
wp_enqueue_style( 'mijireh_css', WC()->plugin_url() . '/includes/gateways/mijireh/assets/css/mijireh.css' );
|
wp_enqueue_style( 'mijireh_css', WC()->plugin_url() . '/includes/gateways/mijireh/assets/css/mijireh.css' );
|
||||||
wp_enqueue_script( 'pusher', 'https://d3dy5gmtp8yhk7.cloudfront.net/1.11/pusher.min.js', null, false, true );
|
wp_enqueue_script( 'pusher', 'https://d3dy5gmtp8yhk7.cloudfront.net/1.11/pusher.min.js', null, false, true );
|
||||||
|
@ -361,7 +355,6 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* is_slurp_page function.
|
* is_slurp_page function.
|
||||||
*
|
*
|
||||||
|
@ -380,17 +373,13 @@ class WC_Gateway_Mijireh extends WC_Payment_Gateway {
|
||||||
return $is_slurp;
|
return $is_slurp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* draw_page_slurp_meta_box function.
|
* draw_page_slurp_meta_box function.
|
||||||
*
|
*
|
||||||
* @access public
|
* @access public
|
||||||
* @param mixed $post
|
* @param mixed $post
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public static function draw_page_slurp_meta_box( $post ) {
|
public static function draw_page_slurp_meta_box( $post ) {
|
||||||
global $woocommerce;
|
|
||||||
|
|
||||||
self::init_mijireh();
|
self::init_mijireh();
|
||||||
|
|
||||||
echo "<div id='mijireh_notice' class='mijireh-info alert-message info' data-alert='alert'>";
|
echo "<div id='mijireh_notice' class='mijireh-info alert-message info' data-alert='alert'>";
|
||||||
|
|
Loading…
Reference in New Issue