current_currency = $this->current_currency();
$this->multi_currency_enabled = in_array('woocommerce-multilingual/wpml-woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))
&& get_option('icl_enable_multi_currency') == 'yes';
$this->id = 'alipay';
$this->icon = apply_filters('woocommerce_alipay_icon', plugins_url('images/alipay.png', __FILE__));
$this->has_fields = false;
// Load the form fields.
$this->init_form_fields();
// Load the settings.
$this->init_settings();
// Define user set variables
$this->title = $this->settings['title'];
$this->description = $this->settings['description'];
$this->alipay_account = $this->settings['alipay_account'];
$this->partnerID = $this->settings['partnerID'];
$this->secure_key = $this->settings['secure_key'];
$this->payment_method = $this->settings['payment_method'];
$this->debug = $this->settings['debug'];
$this->form_submission_method = $this->settings['form_submission_method'] == 'yes' ? true : false;
$this->exchange_rate = $this->settings['exchange_rate'];
$this->secure_key = $this->settings['secure_key'];
$this->notify_url = str_replace('https:', 'http:', add_query_arg('wc-api', 'WC_Alipay', home_url('/'))); //trailingslashit(home_url());
//Log
if ($this->debug == 'yes')
$this->log = $woocommerce->logger();
// Actions
add_action('admin_notices', array($this, 'requirement_checks'));
add_action('woocommerce_api_wc_alipay', array($this, 'check_alipay_response'));
add_action('woocommerce_update_options_payment_gateways', array($this, 'process_admin_options')); // WC <= 1.6.6
add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this, 'process_admin_options')); // WC >= 2.0
add_action('woocommerce_thankyou_alipay', array($this, 'thankyou_page'));
add_action('woocommerce_receipt_alipay', array($this, 'receipt_page'));
}
/**
* Initialise Gateway Settings Form Fields
*
* @access public
* @return void
*/
function init_form_fields() {
global $woocommerce;
$this->form_fields = array(
'enabled' => array(
'title' => __('Enable/Disable', 'alipay'),
'type' => 'checkbox',
'label' => __('Enable Alipay Payment', 'alipay'),
'default' => 'no'
),
'title' => array(
'title' => __('Title', 'alipay'),
'type' => 'text',
'description' => __('This controls the title which the user sees during checkout.', 'alipay'),
'default' => __('Alipay', 'alipay')
),
'description' => array(
'title' => __('Description', 'alipay'),
'type' => 'textarea',
'default' => __('Pay via Alipay, if you don\'t have an Alipay account, you can also pay with your debit card or credit card', 'alipay')
),
'payment_method' => array(
'title' => __('Alipay Payment Gateway Type', 'alipay'),
'type' => 'select',
'description' => __('Choose a payment method', 'alipay'),
'options' => array(
'escrow' => __('Escrow Payment', 'alipay'),
'dualfun' => __('Dual(Direct Payment + Escrow payment)', 'alipay'),
'direct' => __('Direct Payment', 'alipay')
)
),
'partnerID' => array(
'title' => __('Partner ID', 'alipay'),
'type' => 'text',
'description' => __('Please enter the partner ID
If you don\'t have one, click here to get.', 'alipay'),
'css' => 'width:400px'
),
'secure_key' => array(
'title' => __('Security Key', 'alipay'),
'type' => 'text',
'description' => __('Please enter the security key
If you don\'t have one, click here to get.', 'alipay'),
'css' => 'width:400px'
),
'alipay_account' => array(
'title' => __('Alipay Account', 'alipay'),
'type' => 'text',
'description' => __('Please enter your Alipay Email; this is needed in order to take payment.', 'alipay'),
'css' => 'width:200px'
),
'form_submission_method' => array(
'title' => __('Submission method', 'alipay'),
'type' => 'checkbox',
'label' => __('Use form submission method.', 'alipay'),
'description' => __('Enable this to post order data to Alipay via a form instead of using a redirect/querystring.', 'alipay'),
'default' => 'no'
),
'debug' => array(
'title' => __('Debug Log', 'alipay'),
'type' => 'checkbox',
'label' => __('Enable logging', 'alipay'),
'default' => 'no',
'description' => __('Log Alipay events, such as trade status, inside woocommerce/logs/alipay.txt', 'alipay'),
)
);
if ($this->current_currency != 'RMB') {
$this->form_fields['exchange_rate'] = array(
'title' => __('Exchange Rate', 'alipay'),
'type' => 'text',
'description' => __("Please set the $this->current_currency against RMB exchange rate ", 'alipay'),
'css' => 'width:100px;'
);
}
}
/**
* Check if requirements are met and display notices
*
* @access public
* @return void
*/
function requirement_checks() {
if ($this->current_currency != 'RMB' && !$this->exchange_rate) {
echo '
' . sprintf(__('Alipay is enabled, but the store currency is not set to RMB. Please set the ' . $this->current_currency . ' against the RMB exchange rate.', 'alipay'), admin_url('admin.php?page=woocommerce_settings&tab=payment_gateways§ion=WC_Alipay#woocommerce_alipay_exchange_rate')) . '
' . __('Thank you for your order, please click the button below to pay with Alipay.', 'alipay') . '
'; echo $this->generate_alipay_form($order); } /** * Check for Alipay IPN Response * * @access public * @return void */ function check_alipay_response() { global $woocommerce; @ob_clean(); if (isset($_POST['seller_id']) && $_POST['seller_id'] == $this->partnerID) { if ($this->debug == 'yes') $this->log->add('alipay', 'Received notification from Alipay, the order number is: ' . $_POST['out_trade_no']); //Get order id $out_trade_no = $_POST['out_trade_no']; $array = explode('|', $out_trade_no); $order_id = $array[1]; if (!$order_id || !is_numeric($order_id)) wp_die("Invalid Order ID"); //Get alipay config $order = new WC_Order($order_id); $alipay_config = $this->get_alipay_config($order); //Verify alipay's notification require_once("lib/alipay_notify.class.php"); $alipayNotify = new AlipayNotify($alipay_config); //Log verification if ($this->debug == 'yes') $log = true; $verify_result = $alipayNotify->verifyNotify($log); if ($this->debug == 'yes') { $verify_result = $verify_result ? 'Valid' : 'Invalid'; if ($this->debug == 'yes') $this->log->add('alipay', 'Verification result: ' . $verify_result); } if ($verify_result) { if ($this->payment_method == 'direct') { if ($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS') { $order->add_order_note(__('The order is completed', 'alipay')); $order->payment_complete(); $this->successful_request($_POST); } } else { if ($_POST['trade_status'] == 'WAIT_BUYER_PAY') { $order->add_order_note(__('Order received, awaiting payment', 'alipay')); $this->successful_request($_POST); } else if ($_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS') { $order->update_status('processing', __('Payment received, awaiting fulfilment', 'alipay')); $woocommerce->cart->empty_cart(); $this->successful_request($_POST); } else if ($_POST['trade_status'] == 'WAIT_BUYER_CONFIRM_GOODS') { $order->add_order_note(__('Your order has been shipped, awaiting buyer\'s confirmation', 'alipay')); $this->successful_request($_POST); } else if ($_POST['trade_status'] == 'TRADE_FINISHED') { $order->payment_complete(); $order->add_order_note(__('The order is completed', 'alipay')); $this->successful_request($_POST); } else { header('HTTP/1.1 200 OK'); echo "success"; exit; } } } else { wp_die("fail"); } } else { wp_die("Alipay Notification Request Failure"); } } /** * Successful Payment! * * @access public * @param array $posted * @return void */ function successful_request($posted) { if ($this->debug == 'yes') $this->log->add('alipay', 'Trade Status Received: [' . $posted['trade_status'] . '] For Order: [' . $_POST['out_trade_no'] . ']'); header('HTTP/1.1 200 OK'); echo "success"; exit; } } ?>