2014-08-15 09:56:19 +00:00
< ? php
2014-09-20 19:42:58 +00:00
2014-08-15 09:56:19 +00:00
if ( ! defined ( 'ABSPATH' ) ) {
exit ; // Exit if accessed directly
}
/**
* Simplify Commerce Gateway
*
* @ class WC_Gateway_Simplify_Commerce
* @ extends WC_Payment_Gateway
* @ since 2.2 . 0
* @ version 1.0 . 0
* @ package WooCommerce / Classes / Payment
* @ author WooThemes
*/
class WC_Gateway_Simplify_Commerce extends WC_Payment_Gateway {
/**
* Constructor
*/
public function __construct () {
$this -> id = 'simplify_commerce' ;
$this -> method_title = __ ( 'Simplify Commerce' , 'woocommerce' );
$this -> method_description = __ ( 'Take payments via Simplify Commerce - uses simplify.js to create card tokens and the Simplify Commerce SDK. Requires SSL when sandbox is disabled.' , 'woocommerce' );
$this -> has_fields = true ;
$this -> supports = array (
'subscriptions' ,
'products' ,
'subscription_cancellation' ,
'subscription_reactivation' ,
'subscription_suspension' ,
'subscription_amount_changes' ,
2015-07-22 01:00:00 +00:00
'subscription_payment_method_change' , // Subscriptions 1.n compatibility
'subscription_payment_method_change_customer' ,
2015-07-21 23:49:45 +00:00
'subscription_payment_method_change_admin' ,
2014-08-15 09:56:19 +00:00
'subscription_date_changes' ,
2015-07-22 01:00:55 +00:00
'multiple_subscriptions' ,
2014-08-15 09:56:19 +00:00
'default_credit_card_form' ,
2014-09-02 14:11:21 +00:00
'refunds' ,
'pre-orders'
2014-08-15 09:56:19 +00:00
);
$this -> view_transaction_url = 'https://www.simplify.com/commerce/app#/payment/%s' ;
// Load the form fields
$this -> init_form_fields ();
// Load the settings.
$this -> init_settings ();
// Get setting values
2014-12-09 19:11:55 +00:00
$this -> title = $this -> get_option ( 'title' );
$this -> description = $this -> get_option ( 'description' );
$this -> enabled = $this -> get_option ( 'enabled' );
$this -> mode = $this -> get_option ( 'mode' , 'standard' );
$this -> modal_color = $this -> get_option ( 'modal_color' , '#a46497' );
$this -> sandbox = $this -> get_option ( 'sandbox' );
$this -> public_key = $this -> sandbox == 'no' ? $this -> get_option ( 'public_key' ) : $this -> get_option ( 'sandbox_public_key' );
2014-12-10 12:07:45 +00:00
$this -> private_key = $this -> sandbox == 'no' ? $this -> get_option ( 'private_key' ) : $this -> get_option ( 'sandbox_private_key' );
2014-08-15 09:56:19 +00:00
$this -> init_simplify_sdk ();
// Hooks
add_action ( 'wp_enqueue_scripts' , array ( $this , 'payment_scripts' ) );
add_action ( 'admin_notices' , array ( $this , 'checks' ) );
add_action ( 'woocommerce_update_options_payment_gateways_' . $this -> id , array ( $this , 'process_admin_options' ) );
2014-12-09 19:11:55 +00:00
add_action ( 'woocommerce_receipt_' . $this -> id , array ( $this , 'receipt_page' ) );
add_action ( 'woocommerce_api_wc_gateway_simplify_commerce' , array ( $this , 'return_handler' ) );
2014-08-15 09:56:19 +00:00
}
/**
* Init Simplify SDK .
*/
protected function init_simplify_sdk () {
// Include lib
require_once ( 'includes/Simplify.php' );
Simplify :: $publicKey = $this -> public_key ;
Simplify :: $privateKey = $this -> private_key ;
2014-08-20 15:46:58 +00:00
Simplify :: $userAgent = 'WooCommerce/' . WC () -> version ;
2014-08-15 09:56:19 +00:00
}
/**
* Admin Panel Options
* - Options for bits like 'title' and availability on a country - by - country basis
*/
2014-12-09 19:11:55 +00:00
public function admin_options () {
2014-08-15 09:56:19 +00:00
?>
< h3 >< ? php _e ( 'Simplify Commerce by Mastercard' , 'woocommerce' ); ?> </h3>
< ? php if ( empty ( $this -> public_key ) ) : ?>
< div class = " simplify-commerce-banner updated " >
< img src = " <?php echo WC()->plugin_url() . '/includes/gateways/simplify-commerce/assets/images/logo.png'; ?> " />
< p class = " main " >< strong >< ? php _e ( 'Getting started' , 'woocommerce' ); ?> </strong></p>
< p >< ? php _e ( 'Simplify Commerce is your merchant account and payment gateway all rolled into one. Choose Simplify Commerce as your WooCommerce payment gateway to get access to your money quickly with a powerful, secure payment engine backed by MasterCard.' , 'woocommerce' ); ?> </p>
< p >< a href = " https://www.simplify.com/commerce/partners/woocommerce#/signup " target = " _blank " class = " button button-primary " >< ? php _e ( 'Sign up for Simplify Commerce' , 'woocommerce' ); ?> </a> <a href="https://www.simplify.com/commerce/partners/woocommerce#/" target="_blank" class="button"><?php _e( 'Learn more', 'woocommerce' ); ?></a></p>
</ div >
< ? php else : ?>
< p >< ? php _e ( 'Simplify Commerce is your merchant account and payment gateway all rolled into one. Choose Simplify Commerce as your WooCommerce payment gateway to get access to your money quickly with a powerful, secure payment engine backed by MasterCard.' , 'woocommerce' ); ?> </p>
< ? php endif ; ?>
< table class = " form-table " >
< ? php $this -> generate_settings_html (); ?>
< script type = " text/javascript " >
2014-12-09 19:11:55 +00:00
jQuery ( '#woocommerce_simplify_commerce_sandbox' ) . on ( 'change' , function () {
2014-08-15 14:43:10 +00:00
var sandbox = jQuery ( '#woocommerce_simplify_commerce_sandbox_public_key, #woocommerce_simplify_commerce_sandbox_private_key' ) . closest ( 'tr' ),
production = jQuery ( '#woocommerce_simplify_commerce_public_key, #woocommerce_simplify_commerce_private_key' ) . closest ( 'tr' );
2014-08-15 14:40:19 +00:00
if ( jQuery ( this ) . is ( ':checked' ) ) {
sandbox . show ();
production . hide ();
2014-08-15 09:56:19 +00:00
} else {
2014-08-15 14:40:19 +00:00
sandbox . hide ();
production . show ();
2014-08-15 09:56:19 +00:00
}
}) . change ();
2014-12-09 19:11:55 +00:00
jQuery ( '#woocommerce_simplify_commerce_mode' ) . on ( 'change' , function () {
var color = jQuery ( '#woocommerce_simplify_commerce_modal_color' ) . closest ( 'tr' );
if ( 'standard' == jQuery ( this ) . val () ) {
color . hide ();
} else {
color . show ();
}
}) . change ();
2014-08-15 09:56:19 +00:00
</ script >
</ table >
< ? php
2014-12-09 19:11:55 +00:00
}
2014-08-15 09:56:19 +00:00
/**
* Check if SSL is enabled and notify the user
*/
public function checks () {
2014-12-09 19:11:55 +00:00
if ( 'no' == $this -> enabled ) {
2014-08-15 09:56:19 +00:00
return ;
}
// PHP Version
if ( version_compare ( phpversion (), '5.3' , '<' ) ) {
echo '<div class="error"><p>' . sprintf ( __ ( 'Simplify Commerce Error: Simplify commerce requires PHP 5.3 and above. You are using version %s.' , 'woocommerce' ), phpversion () ) . '</p></div>' ;
}
// Check required fields
elseif ( ! $this -> public_key || ! $this -> private_key ) {
echo '<div class="error"><p>' . __ ( 'Simplify Commerce Error: Please enter your public and private keys' , 'woocommerce' ) . '</p></div>' ;
}
2014-12-09 19:11:55 +00:00
// Show message when using standard mode and no SSL on the checkout page
elseif ( 'standard' == $this -> mode && 'no' == get_option ( 'woocommerce_force_ssl_checkout' ) && ! class_exists ( 'WordPressHTTPS' ) ) {
2014-08-15 14:20:18 +00:00
echo '<div class="error"><p>' . sprintf ( __ ( 'Simplify Commerce is enabled, but the <a href="%s">force SSL option</a> is disabled; your checkout may not be secure! Please enable SSL and ensure your server has a valid SSL certificate - Simplify Commerce will only work in sandbox mode.' , 'woocommerce' ), admin_url ( 'admin.php?page=wc-settings&tab=checkout' ) ) . '</p></div>' ;
2014-08-15 09:56:19 +00:00
}
}
/**
* Check if this gateway is enabled
*/
public function is_available () {
if ( 'yes' != $this -> enabled ) {
return false ;
}
2014-12-09 19:11:55 +00:00
if ( 'standard' == $this -> mode && ! is_ssl () && 'yes' != $this -> sandbox ) {
2014-08-15 09:56:19 +00:00
return false ;
}
if ( ! $this -> public_key || ! $this -> private_key ) {
return false ;
}
return true ;
}
/**
* Initialise Gateway Settings Form Fields
*/
public function init_form_fields () {
$this -> form_fields = array (
'enabled' => array (
'title' => __ ( 'Enable/Disable' , 'woocommerce' ),
'label' => __ ( 'Enable Simplify Commerce' , 'woocommerce' ),
'type' => 'checkbox' ,
'description' => '' ,
'default' => 'no'
),
'title' => array (
'title' => __ ( 'Title' , 'woocommerce' ),
'type' => 'text' ,
'description' => __ ( 'This controls the title which the user sees during checkout.' , 'woocommerce' ),
'default' => __ ( 'Credit card' , 'woocommerce' ),
'desc_tip' => true
),
'description' => array (
'title' => __ ( 'Description' , 'woocommerce' ),
'type' => 'text' ,
'description' => __ ( 'This controls the description which the user sees during checkout.' , 'woocommerce' ),
2014-08-21 16:03:16 +00:00
'default' => 'Pay with your credit card via Simplify Commerce by Mastercard.' ,
2014-08-15 09:56:19 +00:00
'desc_tip' => true
),
2014-12-09 19:11:55 +00:00
'mode' => array (
'title' => __ ( 'Payment Mode' , 'woocommerce' ),
'label' => __ ( 'Enable Hosted Payments' , 'woocommerce' ),
'type' => 'select' ,
2015-01-12 11:53:19 +00:00
'description' => sprintf ( __ ( 'Standard will display the credit card fields on your store (SSL required). %1$s Hosted Payments will display a Simplify Commerce modal dialog on your store (if SSL) or will redirect the customer to Simplify Commerce hosted page (if not SSL). %1$s Note: Hosted Payments need a new API Key pair with the hosted payments flag selected. %2$sFor more details check the Simplify Commerce docs%3$s.' , 'woocommerce' ), '<br />' , '<a href="https://simplify.desk.com/customer/portal/articles/1792405-how-do-i-enable-hosted-payments" target="_blank">' , '</a>' ),
2015-02-13 14:04:05 +00:00
'default' => 'standard' ,
2014-12-09 19:11:55 +00:00
'options' => array (
'standard' => __ ( 'Standard' , 'woocommerce' ),
'hosted' => __ ( 'Hosted Payments' , 'woocommerce' )
)
),
'modal_color' => array (
'title' => __ ( 'Modal Color' , 'woocommerce' ),
'type' => 'color' ,
'description' => __ ( 'Set the color of the buttons and titles on the modal dialog.' , 'woocommerce' ),
'default' => '#a46497' ,
'desc_tip' => true
),
2014-08-15 09:56:19 +00:00
'sandbox' => array (
'title' => __ ( 'Sandbox' , 'woocommerce' ),
'label' => __ ( 'Enable Sandbox Mode' , 'woocommerce' ),
'type' => 'checkbox' ,
'description' => __ ( 'Place the payment gateway in sandbox mode using sandbox API keys (real payments will not be taken).' , 'woocommerce' ),
'default' => 'yes'
),
2014-08-15 14:43:10 +00:00
'sandbox_public_key' => array (
'title' => __ ( 'Sandbox Public Key' , 'woocommerce' ),
2014-08-15 09:56:19 +00:00
'type' => 'text' ,
2014-08-21 16:03:16 +00:00
'description' => __ ( 'Get your API keys from your Simplify account: Settings > API Keys.' , 'woocommerce' ),
2014-08-15 09:56:19 +00:00
'default' => '' ,
'desc_tip' => true
),
2014-08-15 14:43:10 +00:00
'sandbox_private_key' => array (
'title' => __ ( 'Sandbox Private Key' , 'woocommerce' ),
2014-08-15 09:56:19 +00:00
'type' => 'text' ,
2014-08-21 16:03:16 +00:00
'description' => __ ( 'Get your API keys from your Simplify account: Settings > API Keys.' , 'woocommerce' ),
2014-08-15 09:56:19 +00:00
'default' => '' ,
'desc_tip' => true
),
2014-08-15 14:43:10 +00:00
'public_key' => array (
'title' => __ ( 'Public Key' , 'woocommerce' ),
2014-08-15 09:56:19 +00:00
'type' => 'text' ,
2014-08-21 16:03:16 +00:00
'description' => __ ( 'Get your API keys from your Simplify account: Settings > API Keys.' , 'woocommerce' ),
2014-08-15 09:56:19 +00:00
'default' => '' ,
'desc_tip' => true
),
2014-08-15 14:43:10 +00:00
'private_key' => array (
'title' => __ ( 'Private Key' , 'woocommerce' ),
2014-08-15 09:56:19 +00:00
'type' => 'text' ,
2014-08-21 16:03:16 +00:00
'description' => __ ( 'Get your API keys from your Simplify account: Settings > API Keys.' , 'woocommerce' ),
2014-08-15 09:56:19 +00:00
'default' => '' ,
'desc_tip' => true
),
);
}
/**
* Payment form on checkout page
*/
public function payment_fields () {
2014-08-15 10:50:50 +00:00
$description = $this -> get_description ();
2014-08-15 09:56:19 +00:00
if ( 'yes' == $this -> sandbox ) {
2014-08-15 10:50:50 +00:00
$description .= ' ' . sprintf ( __ ( 'TEST MODE ENABLED. Use a test card: %s' , 'woocommerce' ), '<a href="https://www.simplify.com/commerce/docs/tutorial/index#testing">https://www.simplify.com/commerce/docs/tutorial/index#testing</a>' );
}
if ( $description ) {
echo wpautop ( wptexturize ( trim ( $description ) ) );
2014-08-15 09:56:19 +00:00
}
2014-12-09 19:11:55 +00:00
if ( 'standard' == $this -> mode ) {
$this -> credit_card_form ( array ( 'fields_have_names' => false ) );
}
2014-08-15 09:56:19 +00:00
}
/**
* payment_scripts function .
*
* Outputs scripts used for simplify payment
*/
public function payment_scripts () {
2014-09-05 00:27:43 +00:00
if ( ! is_checkout () || ! $this -> is_available () ) {
2014-08-15 09:56:19 +00:00
return ;
}
2014-11-14 11:58:21 +00:00
$suffix = defined ( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min' ;
2014-08-15 10:50:50 +00:00
wp_enqueue_script ( 'simplify-commerce' , 'https://www.simplify.com/commerce/v1/simplify.js' , array ( 'jquery' ), WC_VERSION , true );
2014-11-14 11:58:21 +00:00
wp_enqueue_script ( 'wc-simplify-commerce' , WC () -> plugin_url () . '/includes/gateways/simplify-commerce/assets/js/simplify-commerce' . $suffix . '.js' , array ( 'simplify-commerce' , 'wc-credit-card-form' ), WC_VERSION , true );
2014-08-21 16:03:16 +00:00
wp_localize_script ( 'wc-simplify-commerce' , 'Simplify_commerce_params' , array (
2014-08-15 09:56:19 +00:00
'key' => $this -> public_key ,
'card.number' => __ ( 'Card Number' , 'woocommerce' ),
'card.expMonth' => __ ( 'Expiry Month' , 'woocommerce' ),
'card.expYear' => __ ( 'Expiry Year' , 'woocommerce' ),
2014-12-09 19:11:55 +00:00
'is_invalid' => __ ( 'is invalid' , 'woocommerce' ),
'mode' => $this -> mode ,
'is_ssl' => is_ssl ()
2014-08-15 09:56:19 +00:00
) );
}
/**
2014-12-09 19:11:55 +00:00
* Process standard payments
*
2015-01-12 13:43:27 +00:00
* @ param WC_Order $order
* @ param string $cart_token
2015-03-27 15:15:40 +00:00
* @ uses Simplify_ApiException
* @ uses Simplify_BadRequestException
2014-12-09 19:11:55 +00:00
* @ return array
2014-08-15 09:56:19 +00:00
*/
2015-01-12 13:43:27 +00:00
protected function process_standard_payments ( $order , $cart_token = '' ) {
2014-08-15 09:56:19 +00:00
try {
2015-01-12 13:43:27 +00:00
if ( empty ( $cart_token ) ) {
2014-08-15 09:56:19 +00:00
$error_msg = __ ( 'Please make sure your card details have been entered correctly and that your browser supports JavaScript.' , 'woocommerce' );
if ( 'yes' == $this -> sandbox ) {
$error_msg .= ' ' . __ ( 'Developers: Please make sure that you\'re including jQuery and there are no JavaScript errors on the page.' , 'woocommerce' );
}
throw new Simplify_ApiException ( $error_msg );
}
$payment = Simplify_Payment :: createPayment ( array (
'amount' => $order -> order_total * 100 , // In cents
2015-01-12 13:43:27 +00:00
'token' => $cart_token ,
2015-02-18 03:56:18 +00:00
'description' => sprintf ( __ ( '%s - Order #%s' , 'woocommerce' ), esc_html ( get_bloginfo ( 'name' , 'display' ) ), $order -> get_order_number () ),
2014-08-15 09:56:19 +00:00
'currency' => strtoupper ( get_woocommerce_currency () ),
'reference' => $order -> id ,
'card.addressCity' => $order -> billing_city ,
'card.addressCountry' => $order -> billing_country ,
'card.addressLine1' => $order -> billing_address_1 ,
'card.addressLine2' => $order -> billing_address_2 ,
'card.addressState' => $order -> billing_state ,
'card.addressZip' => $order -> billing_postcode
) );
2014-12-10 17:04:57 +00:00
$order_complete = $this -> process_order_status ( $order , $payment -> id , $payment -> paymentStatus , $payment -> authCode );
2014-08-15 09:56:19 +00:00
2014-12-10 12:07:45 +00:00
if ( $order_complete ) {
2014-08-15 09:56:19 +00:00
// Return thank you page redirect
return array (
'result' => 'success' ,
'redirect' => $this -> get_return_url ( $order )
);
} else {
$order -> add_order_note ( __ ( 'Simplify payment declined' , 'woocommerce' ) );
throw new Simplify_ApiException ( __ ( 'Payment was declined - please try another card.' , 'woocommerce' ) );
}
} catch ( Simplify_ApiException $e ) {
if ( $e instanceof Simplify_BadRequestException && $e -> hasFieldErrors () && $e -> getFieldErrors () ) {
foreach ( $e -> getFieldErrors () as $error ) {
wc_add_notice ( $error -> getFieldName () . ': "' . $error -> getMessage () . '" (' . $error -> getErrorCode () . ')' , 'error' );
}
} else {
wc_add_notice ( $e -> getMessage (), 'error' );
}
return array (
'result' => 'fail' ,
'redirect' => ''
);
}
}
2014-12-09 19:11:55 +00:00
/**
* Process standard payments
*
2015-02-03 14:32:10 +00:00
* @ param WC_Order $order
2014-12-09 19:11:55 +00:00
* @ return array
*/
protected function process_hosted_payments ( $order ) {
return array (
'result' => 'success' ,
'redirect' => $order -> get_checkout_payment_url ( true )
);
}
/**
* Process the payment
*
* @ param integer $order_id
*/
public function process_payment ( $order_id ) {
2015-01-12 13:43:27 +00:00
$cart_token = isset ( $_POST [ 'simplify_token' ] ) ? wc_clean ( $_POST [ 'simplify_token' ] ) : '' ;
$order = wc_get_order ( $order_id );
2014-12-09 19:11:55 +00:00
if ( 'hosted' == $this -> mode ) {
return $this -> process_hosted_payments ( $order );
} else {
2015-01-12 13:43:27 +00:00
return $this -> process_standard_payments ( $order , $cart_token );
2014-12-09 19:11:55 +00:00
}
}
/**
* Hosted payment args .
*
* @ param WC_Order $order
*
* @ return array
*/
protected function get_hosted_payments_args ( $order ) {
$args = apply_filters ( 'woocommerce_simplify_commerce_hosted_args' , array (
2015-01-12 11:53:19 +00:00
'sc-key' => $this -> public_key ,
'amount' => $order -> order_total * 100 ,
'reference' => $order -> id ,
2015-02-18 03:56:18 +00:00
'name' => esc_html ( get_bloginfo ( 'name' , 'display' ) ),
2015-01-12 11:53:19 +00:00
'description' => sprintf ( __ ( 'Order #%s' , 'woocommerce' ), $order -> get_order_number () ),
'receipt' => 'false' ,
'color' => $this -> modal_color ,
'redirect-url' => WC () -> api_request_url ( 'WC_Gateway_Simplify_Commerce' )
2015-01-12 13:43:27 +00:00
), $order -> id );
2014-12-09 19:11:55 +00:00
return $args ;
}
/**
* Receipt page
*
* @ param int $order_id
*/
public function receipt_page ( $order_id ) {
$order = wc_get_order ( $order_id );
echo '<p>' . __ ( 'Thank you for your order, please click the button below to pay with credit card using Simplify Commerce by MasterCard.' , 'woocommerce' ) . '</p>' ;
$args = $this -> get_hosted_payments_args ( $order );
$button_args = array ();
foreach ( $args as $key => $value ) {
2014-12-10 12:07:45 +00:00
$button_args [] = 'data-' . esc_attr ( $key ) . '="' . esc_attr ( $value ) . '"' ;
2014-12-09 19:11:55 +00:00
}
echo ' < script type = " text/javascript " src = " https://www.simplify.com/commerce/simplify.pay.js " ></ script >
2014-12-10 12:07:45 +00:00
< button class = " button alt " id = " simplify-payment-button " ' . implode( ' ', $button_args ) . ' > ' . __( ' Pay Now ', ' woocommerce ' ) . ' </ button > < a class = " button cancel " href = " ' . esc_url( $order->get_cancel_order_url () ) . ' " > ' . __( ' Cancel order & amp ; restore cart ', ' woocommerce ' ) . ' </ a >
2014-12-09 19:11:55 +00:00
' ;
}
2014-12-10 12:07:45 +00:00
/**
2014-12-10 17:04:57 +00:00
* Return handler for Hosted Payments
2014-12-10 12:07:45 +00:00
*/
2014-12-09 19:11:55 +00:00
public function return_handler () {
2014-12-10 12:07:45 +00:00
@ ob_clean ();
header ( 'HTTP/1.1 200 OK' );
2014-12-09 19:11:55 +00:00
2014-12-10 12:07:45 +00:00
if ( isset ( $_REQUEST [ 'reference' ] ) && isset ( $_REQUEST [ 'paymentId' ] ) && isset ( $_REQUEST [ 'signature' ] ) ) {
$signature = strtoupper ( md5 ( $_REQUEST [ 'amount' ] . $_REQUEST [ 'reference' ] . $_REQUEST [ 'paymentId' ] . $_REQUEST [ 'paymentDate' ] . $_REQUEST [ 'paymentStatus' ] . $this -> private_key ) );
2014-12-10 17:04:57 +00:00
$order_id = absint ( $_REQUEST [ 'reference' ] );
2014-12-10 12:07:45 +00:00
$order = wc_get_order ( $order_id );
if ( $signature === $_REQUEST [ 'signature' ] ) {
2014-12-10 17:04:57 +00:00
$order_complete = $this -> process_order_status ( $order , $_REQUEST [ 'paymentId' ], $_REQUEST [ 'paymentStatus' ], $_REQUEST [ 'paymentDate' ] );
2014-12-10 12:07:45 +00:00
if ( ! $order_complete ) {
$order -> update_status ( 'failed' , __ ( 'Payment was declined by Simplify Commerce.' , 'woocommerce' ) );
}
wp_redirect ( $this -> get_return_url ( $order ) );
exit ();
}
}
2014-12-09 19:11:55 +00:00
2015-02-15 19:13:22 +00:00
wp_redirect ( wc_get_page_permalink ( 'cart' ) );
2014-12-09 19:11:55 +00:00
exit ();
}
2014-12-10 12:07:45 +00:00
/**
2014-12-10 17:04:57 +00:00
* Process the order status
2014-12-10 12:07:45 +00:00
*
2014-12-10 17:04:57 +00:00
* @ param WC_Order $order
* @ param string $payment_id
* @ param string $status
* @ param string $auth_code
2014-12-10 12:07:45 +00:00
*
* @ return bool
*/
2014-12-10 17:04:57 +00:00
public function process_order_status ( $order , $payment_id , $status , $auth_code ) {
2014-12-10 12:07:45 +00:00
if ( 'APPROVED' == $status ) {
// Payment complete
$order -> payment_complete ( $payment_id );
// Add order note
$order -> add_order_note ( sprintf ( __ ( 'Simplify payment approved (ID: %s, Auth Code: %s)' , 'woocommerce' ), $payment_id , $auth_code ) );
// Remove cart
WC () -> cart -> empty_cart ();
return true ;
}
return false ;
}
2014-08-15 09:56:19 +00:00
/**
* Process refunds
* WooCommerce 2.2 or later
*
* @ param int $order_id
* @ param float $amount
* @ param string $reason
2015-03-27 15:15:40 +00:00
* @ uses Simplify_ApiException
* @ uses Simplify_BadRequestException
2014-08-15 09:56:19 +00:00
* @ return bool | WP_Error
*/
public function process_refund ( $order_id , $amount = null , $reason = '' ) {
try {
$payment_id = get_post_meta ( $order_id , '_transaction_id' , true );
$refund = Simplify_Refund :: createRefund ( array (
'amount' => $amount * 100 , // In cents
'payment' => $payment_id ,
'reason' => $reason ,
'reference' => $order_id
) );
if ( 'APPROVED' == $refund -> paymentStatus ) {
return true ;
} else {
throw new Simplify_ApiException ( __ ( 'Refund was declined.' , 'woocommerce' ) );
}
} catch ( Simplify_ApiException $e ) {
if ( $e instanceof Simplify_BadRequestException && $e -> hasFieldErrors () && $e -> getFieldErrors () ) {
foreach ( $e -> getFieldErrors () as $error ) {
return new WP_Error ( 'simplify_refund_error' , $error -> getFieldName () . ': "' . $error -> getMessage () . '" (' . $error -> getErrorCode () . ')' );
}
} else {
return new WP_Error ( 'simplify_refund_error' , $e -> getMessage () );
}
}
return false ;
}
2014-08-15 10:50:50 +00:00
/**
* get_icon function .
*
* @ access public
* @ return string
*/
public function get_icon () {
2014-12-09 19:11:55 +00:00
$icon = '<img src="' . WC_HTTPS :: force_https_url ( WC () -> plugin_url () . '/assets/images/icons/credit-cards/visa.png' ) . '" alt="Visa" />' ;
$icon .= '<img src="' . WC_HTTPS :: force_https_url ( WC () -> plugin_url () . '/assets/images/icons/credit-cards/mastercard.png' ) . '" alt="Mastercard" />' ;
$icon .= '<img src="' . WC_HTTPS :: force_https_url ( WC () -> plugin_url () . '/assets/images/icons/credit-cards/discover.png' ) . '" alt="Discover" />' ;
$icon .= '<img src="' . WC_HTTPS :: force_https_url ( WC () -> plugin_url () . '/assets/images/icons/credit-cards/amex.png' ) . '" alt="Amex" />' ;
$icon .= '<img src="' . WC_HTTPS :: force_https_url ( WC () -> plugin_url () . '/assets/images/icons/credit-cards/jcb.png' ) . '" alt="JCB" />' ;
2014-08-15 14:20:18 +00:00
2014-08-15 10:50:50 +00:00
return apply_filters ( 'woocommerce_gateway_icon' , $icon , $this -> id );
2014-08-15 14:20:18 +00:00
}
2014-08-15 09:56:19 +00:00
}