2012-06-08 10:46:10 +00:00
< ? php
/**
* Mijireh Checkout Gateway
2012-08-15 18:15:06 +00:00
*
2012-06-08 10:46:10 +00:00
* Provides WooCommerce with Mijireh Checkout integration .
*
* @ class WC_Mijireh_Checkout
2012-08-15 18:15:06 +00:00
* @ extends WC_Payment_Gateway
* @ version 1.6 . 4
* @ package WooCommerce / Classes / Payment
* @ author Mijireh
2012-06-08 10:46:10 +00:00
*/
2012-10-15 10:57:58 +00:00
if ( ! defined ( 'ABSPATH' ) ) exit ; // Exit if accessed directly
2012-06-08 10:46:10 +00:00
class WC_Mijireh_Checkout extends WC_Payment_Gateway {
2012-08-15 18:15:06 +00:00
/** @var string Access key for mijireh */
2012-06-08 10:46:10 +00:00
var $access_key ;
2012-08-15 18:15:06 +00:00
/**
* Constructor for the gateway .
*
* @ access public
* @ return void
*/
2012-06-08 10:46:10 +00:00
public function __construct () {
global $woocommerce ;
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
$this -> id = 'mijireh_checkout' ;
$this -> method_title = __ ( 'Mijireh Checkout' , 'woocommerce' );
2012-08-15 18:15:06 +00:00
$this -> icon = apply_filters ( 'woocommerce_mijireh_checkout_icon' , $woocommerce -> plugin_url () . '/classes/gateways/mijireh/assets/images/credit_cards.png' );
2012-06-08 10:46:10 +00:00
$this -> has_fields = false ;
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
// Load the settings.
$this -> init_settings ();
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
// Define user set variables
2012-12-31 12:07:43 +00:00
$this -> access_key = $this -> get_option ( 'access_key' );
$this -> title = $this -> get_option ( 'title' );
$this -> description = $this -> get_option ( 'description' );
2012-06-08 10:46:10 +00:00
if ( $this -> enabled && is_admin () ) {
$this -> install_slurp_page ();
// Hooks
2012-12-15 11:53:32 +00:00
add_action ( 'add_meta_boxes' , array ( $this , 'add_page_slurp_meta' ) );
add_action ( 'wp_ajax_page_slurp' , array ( $this , 'page_slurp' ) );
2012-06-08 10:46:10 +00:00
}
2012-08-15 18:15:06 +00:00
2012-06-14 16:25:49 +00:00
// Save options
2012-12-15 11:53:32 +00:00
add_action ( 'woocommerce_update_options_payment_gateways' , array ( $this , 'process_admin_options' ) );
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
// Payment listener/API hook
2012-12-15 11:53:32 +00:00
add_action ( 'woocommerce_api_wc_mijireh_checkout' , array ( $this , 'mijireh_notification' ) );
2012-06-08 10:46:10 +00:00
}
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
/**
* init_mijireh function .
2012-08-15 18:15:06 +00:00
*
2012-06-08 10:46:10 +00:00
* @ access public
*/
public function init_mijireh () {
2012-08-15 18:15:06 +00:00
if ( ! class_exists ( 'Mijireh' ) ) {
require_once 'includes/Mijireh.php' ;
2012-06-08 10:46:10 +00:00
Mijireh :: $access_key = $this -> access_key ;
}
}
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
/**
* install_slurp_page function .
2012-08-15 18:15:06 +00:00
*
2012-06-08 10:46:10 +00:00
* @ access public
*/
public function install_slurp_page () {
$slurp_page_installed = get_option ( 'slurp_page_installed' , false );
if ( $slurp_page_installed != 1 ) {
if ( ! get_page_by_path ( 'mijireh-secure-checkout' ) ) {
$page = array (
'post_title' => 'Mijireh Secure Checkout' ,
'post_name' => 'mijireh-secure-checkout' ,
'post_parent' => 0 ,
'post_status' => 'private' ,
'post_type' => 'page' ,
'comment_status' => 'closed' ,
'ping_status' => 'closed' ,
'post_content' => " <h1>Checkout</h1> \n \n { { mj-checkout-form}} " ,
);
wp_insert_post ( $page );
}
update_option ( 'slurp_page_installed' , 1 );
}
}
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
/**
* page_slurp function .
2012-08-15 18:15:06 +00:00
*
2012-06-08 10:46:10 +00:00
* @ access public
* @ return void
*/
public function page_slurp () {
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
$this -> init_mijireh ();
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
$page = get_page ( absint ( $_POST [ 'page_id' ] ) );
$url = get_permalink ( $page -> ID );
wp_update_post ( array ( 'ID' => $page -> ID , 'post_status' => 'publish' ) );
$job_id = Mijireh :: slurp ( $url );
wp_update_post ( array ( 'ID' => $page -> ID , 'post_status' => 'private' ) );
echo $job_id ;
die ;
}
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
/**
* mijireh_notification function .
2012-08-15 18:15:06 +00:00
*
2012-06-08 10:46:10 +00:00
* @ access public
* @ return void
*/
public function mijireh_notification () {
global $woocommerce ;
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
$this -> init_mijireh ();
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
try {
$mj_order = new Mijireh_Order ( esc_attr ( $_GET [ 'order_number' ] ) );
$wc_order_id = $mj_order -> get_meta_value ( 'wc_order_id' );
$wc_order = new WC_Order ( absint ( $wc_order_id ) );
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
// Mark order complete
$wc_order -> payment_complete ();
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
// Empty cart and clear session
$woocommerce -> cart -> empty_cart ();
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
wp_redirect ( $this -> get_return_url ( $wc_order ) );
exit ;
} catch ( Mijireh_Exception $e ) {
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
$woocommerce -> add_error ( __ ( 'Mijireh error:' , 'woocommerce' ) . $e -> getMessage () );
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
}
}
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
/**
2012-08-15 18:15:06 +00:00
* Initialise Gateway Settings Form Fields
*
2012-06-08 10:46:10 +00:00
* @ access public
* @ return void
*/
public function init_form_fields () {
$this -> form_fields = array (
'enabled' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'Enable/Disable' , 'woocommerce' ),
'type' => 'checkbox' ,
'label' => __ ( 'Enable Mijireh Checkout' , 'woocommerce' ),
2012-06-08 10:46:10 +00:00
'default' => 'no'
),
'access_key' => array (
2012-10-16 09:45:33 +00:00
'title' => __ ( 'Access Key' , 'woocommerce' ),
2012-06-08 10:46:10 +00:00
'type' => 'text' ,
2012-10-16 09:45:33 +00:00
'description' => __ ( 'The Mijireh access key for your store.' , 'woocommerce' ),
2012-06-08 10:46:10 +00:00
'default' => ''
),
'title' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'Title' , 'woocommerce' ),
'type' => 'text' ,
'description' => __ ( 'This controls the title which the user sees during checkout.' , 'woocommerce' ),
2012-06-08 10:46:10 +00:00
'default' => __ ( 'Credit Card' , 'woocommerce' )
),
'description' => array (
2012-08-15 18:15:06 +00:00
'title' => __ ( 'Description' , 'woocommerce' ),
'type' => 'textarea' ,
'default' => __ ( 'Pay securely with you credit card.' , 'woocommerce' ),
'description' => __ ( 'This controls the description which the user sees during checkout.' , 'woocommerce' ),
2012-06-08 10:46:10 +00:00
),
);
}
2012-08-15 18:15:06 +00:00
/**
* Admin Panel Options
* - Options for bits like 'title' and availability on a country - by - country basis
*
* @ access public
* @ return void
*/
2012-06-08 10:46:10 +00:00
public function admin_options () {
?>
2012-10-16 09:45:33 +00:00
< h3 >< ? php _e ( 'Mijireh Checkout' , 'woocommerce' ); ?> </h3>
2012-06-08 10:46:10 +00:00
< ? php if ( empty ( $this -> access_key ) ) : ?>
< div id = " wc_get_started " class = " mijireh " >
2012-10-16 09:45:33 +00:00
< span class = " main " >< ? php _e ( 'Get started with Mijireh Checkout' , 'woocommerce' ); ?> </span>
< span >< a href = " http://www.mijireh.com/integrations/woocommerce/ " > Mijireh Checkout </ a > < ? php _e ( 'provides a fully PCI Compliant, secure way to collect and transmit credit card data to your payment gateway while keeping you in control of the design of your site. Mijireh supports a wide variety of payment gateways: Stripe, Authorize.net, PayPal, eWay, SagePay, Braintree, PayLeap, and more.' , 'woocommerce' ); ?> </span>
2012-08-15 18:15:06 +00:00
2012-10-16 09:45:33 +00:00
< p >< a href = " http://secure.mijireh.com/signup " target = " _blank " class = " button button-primary " >< ? php _e ( 'Join for free' , 'woocommerce' ); ?> </a> <a href="http://www.mijireh.com/integrations/woocommerce/" target="_blank" class="button"><?php _e( 'Learn more about WooCommerce and Mijireh', 'woocommerce' ); ?></a></p>
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
</ div >
< ? php else : ?>
2012-10-16 09:45:33 +00:00
< p >< a href = " http://www.mijireh.com/integrations/woocommerce/ " > Mijireh Checkout </ a > < ? php _e ( 'provides a fully PCI Compliant, secure way to collect and transmit credit card data to your payment gateway while keeping you in control of the design of your site.' , 'woocommerce' ); ?> </p>
2012-06-08 10:46:10 +00:00
< ? php endif ; ?>
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
< table class = " form-table " >
< ? php $this -> generate_settings_html (); ?>
</ table ><!--/. form - table -->
< ? php
}
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
/**
2012-08-15 18:15:06 +00:00
* Process the payment and return the result
*
2012-06-08 10:46:10 +00:00
* @ access public
2012-08-15 18:15:06 +00:00
* @ param int $order_id
* @ return array
2012-06-08 10:46:10 +00:00
*/
public function process_payment ( $order_id ) {
global $woocommerce ;
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
$this -> init_mijireh ();
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
$mj_order = new Mijireh_Order ();
$wc_order = new WC_Order ( $order_id );
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
// add items to order
$items = $wc_order -> get_items ();
2012-11-27 16:22:47 +00:00
2012-11-12 17:15:54 +00:00
foreach ( $items as $item ) {
2012-06-08 10:46:10 +00:00
$product = $wc_order -> get_product_from_item ( $item );
2012-11-27 16:22:47 +00:00
2012-12-12 10:46:36 +00:00
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 , false ), $item [ 'qty' ], $product -> get_sku () );
}
2012-06-08 10:46:10 +00:00
}
2012-11-27 16:22:47 +00:00
2012-11-12 17:15:54 +00:00
// Handle fees
$items = $wc_order -> get_fees ();
2012-11-27 16:22:47 +00:00
2012-11-12 17:15:54 +00:00
foreach ( $items as $item ) {
$mj_order -> add_item ( $item [ 'name' ], $item [ 'line_total' ], 1 , '' );
}
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
// add billing address to order
$billing = new Mijireh_Address ();
$billing -> first_name = $wc_order -> billing_first_name ;
$billing -> last_name = $wc_order -> billing_last_name ;
$billing -> street = $wc_order -> billing_address_1 ;
$billing -> apt_suite = $wc_order -> billing_address_2 ;
$billing -> city = $wc_order -> billing_city ;
$billing -> state_province = $wc_order -> billing_state ;
$billing -> zip_code = $wc_order -> billing_postcode ;
$billing -> country = $wc_order -> billing_country ;
$billing -> company = $wc_order -> billing_company ;
$billing -> phone = $wc_order -> billing_phone ;
2012-08-15 18:15:06 +00:00
if ( $billing -> validate () )
2012-06-08 10:46:10 +00:00
$mj_order -> set_billing_address ( $billing );
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
// add shipping address to order
$shipping = new Mijireh_Address ();
$shipping -> first_name = $wc_order -> shipping_first_name ;
$shipping -> last_name = $wc_order -> shipping_last_name ;
$shipping -> street = $wc_order -> shipping_address_1 ;
$shipping -> apt_suite = $wc_order -> shipping_address_2 ;
$shipping -> city = $wc_order -> shipping_city ;
$shipping -> state_province = $wc_order -> shipping_state ;
$shipping -> zip_code = $wc_order -> shipping_postcode ;
$shipping -> country = $wc_order -> shipping_country ;
$shipping -> company = $wc_order -> shipping_company ;
2012-08-15 18:15:06 +00:00
if ( $shipping -> validate () )
2012-06-08 10:46:10 +00:00
$mj_order -> set_shipping_address ( $shipping );
2012-08-15 18:15:06 +00:00
// set order name
2012-06-08 10:46:10 +00:00
$mj_order -> first_name = $wc_order -> billing_first_name ;
$mj_order -> last_name = $wc_order -> billing_last_name ;
$mj_order -> email = $wc_order -> billing_email ;
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
// set order totals
$mj_order -> total = $wc_order -> get_order_total ();
$mj_order -> discount = $wc_order -> get_total_discount ();
2012-12-12 10:46:36 +00:00
if ( get_option ( 'woocommerce_prices_include_tax' ) == 'yes' ) {
$mj_order -> shipping = $wc_order -> get_shipping () + $wc_order -> get_shipping_tax ();
$mj_order -> show_tax = false ;
} else {
$mj_order -> shipping = $wc_order -> get_shipping ();
$mj_order -> tax = $wc_order -> get_total_tax ();
}
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
// add meta data to identify woocommerce order
$mj_order -> add_meta_data ( 'wc_order_id' , $order_id );
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
// Set URL for mijireh payment notificatoin - use WC API
$mj_order -> return_url = str_replace ( 'https:' , 'http:' , add_query_arg ( 'wc-api' , 'WC_Mijireh_Checkout' , home_url ( '/' ) ) );
2012-11-27 16:22:47 +00:00
2012-06-08 10:46:10 +00:00
// Identify woocommerce
$mj_order -> partner_id = 'woo' ;
2012-11-27 16:22:47 +00:00
2012-06-08 10:46:10 +00:00
try {
$mj_order -> create ();
$result = array (
'result' => 'success' ,
'redirect' => $mj_order -> checkout_url
);
return $result ;
} catch ( Mijireh_Exception $e ) {
2012-08-15 18:15:06 +00:00
$woocommerce -> add_error ( __ ( 'Mijireh error:' , 'woocommerce' ) . $e -> getMessage () );
2012-06-08 10:46:10 +00:00
}
}
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
/**
* add_page_slurp_meta function .
2012-08-15 18:15:06 +00:00
*
2012-06-08 10:46:10 +00:00
* @ access public
* @ return void
*/
2012-08-15 18:15:06 +00:00
public function add_page_slurp_meta () {
2012-06-08 10:46:10 +00:00
global $woocommerce ;
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
if ( $this -> is_slurp_page () ) {
2012-08-15 18:15:06 +00:00
wp_enqueue_style ( 'mijireh_css' , $woocommerce -> plugin_url () . '/classes/gateways/mijireh/assets/css/mijireh.css' );
2012-06-08 10:46:10 +00:00
wp_enqueue_script ( 'pusher' , 'https://d3dy5gmtp8yhk7.cloudfront.net/1.11/pusher.min.js' , null , false , true );
2012-08-15 18:15:06 +00:00
wp_enqueue_script ( 'page_slurp' , $woocommerce -> plugin_url () . '/classes/gateways/mijireh/assets/js/page_slurp.js' , array ( 'jquery' ), false , true );
add_meta_box (
'slurp_meta_box' , // $id
'Mijireh Page Slurp' , // $title
2012-12-15 11:53:32 +00:00
array ( $this , 'draw_page_slurp_meta_box' ), // $callback
2012-08-15 18:15:06 +00:00
'page' , // $page
'normal' , // $context
'high' // $priority
);
2012-06-08 10:46:10 +00:00
}
}
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
/**
* is_slurp_page function .
2012-08-15 18:15:06 +00:00
*
2012-06-08 10:46:10 +00:00
* @ access public
* @ return void
*/
public function is_slurp_page () {
global $post ;
$is_slurp = false ;
if ( isset ( $post ) && is_object ( $post ) ) {
$content = $post -> post_content ;
if ( strpos ( $content , '{{mj-checkout-form}}' ) !== false ) {
$is_slurp = true ;
}
}
return $is_slurp ;
}
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
/**
* draw_page_slurp_meta_box function .
2012-08-15 18:15:06 +00:00
*
2012-06-08 10:46:10 +00:00
* @ access public
* @ param mixed $post
* @ return void
*/
public function draw_page_slurp_meta_box ( $post ) {
global $woocommerce ;
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
$this -> init_mijireh ();
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
echo " <div id='mijireh_notice' class='mijireh-info alert-message info' data-alert='alert'> " ;
echo " <h2>Slurp your custom checkout page!</h2> " ;
echo " <p>Get the page designed just how you want and when you're ready, click the button below and slurp it right up.</p> " ;
echo " <div id='slurp_progress' class='meter progress progress-info progress-striped active' style='display: none;'><div id='slurp_progress_bar' class='bar' style='width: 20%;'>Slurping...</div></div> " ;
echo " <p><a href='#' id='page_slurp' rel= " . $post -> ID . " class='button-primary'>Slurp This Page!</a> " ;
echo '<a class="nobold" href="' . Mijireh :: preview_checkout_link () . '" id="view_slurp" target="_new">Preview Checkout Page</a></p>' ;
echo " </div> " ;
}
}
2012-08-15 18:15:06 +00:00
2012-06-08 10:46:10 +00:00
/**
* Add the gateway to WooCommerce
2012-08-15 18:15:06 +00:00
*
* @ access public
* @ package WooCommerce / Classes / Payment
* @ param array $methods
* @ return array
*/
2012-06-08 10:46:10 +00:00
function add_mijireh_gateway ( $methods ) {
2012-08-15 18:15:06 +00:00
$methods [] = 'WC_Mijireh_Checkout' ;
return $methods ;
2012-06-08 10:46:10 +00:00
}
add_filter ( 'woocommerce_payment_gateways' , 'add_mijireh_gateway' );