get_payment_method() !== 'innovext_allpay_aio')
return;
$order_id = $order->get_id();
$return_code = get_post_meta($order_id, '_RtnCode', true);
$payment_type = get_post_meta($order_id, '_PaymentType', true);
$payment_type_label = WC_innovext_allpay_aio::parse_payment_type($payment_type);
$merchant_trade_no = get_post_meta($order_id, '_MerchantTradeNo', true);
$label = WC_innovext_allpay_aio::get_allpay_ecpay_label($order_id);
if ($return_code === '1') {
?>
get_status() !== 'cancelled') {
?>
get_payment_method() !== 'innovext_allpay_aio') {
return;
}
// Get order instructions
$allpay_aio_settings = get_option('woocommerce_innovext_allpay_aio_settings');
if ($allpay_aio_settings) {
$allpay_instruction_succ = $allpay_aio_settings['instruction_succ'];
$allpay_instruction_on_hold = $allpay_aio_settings['instruction_on_hold'];
$return_code = get_post_meta($order_id, '_RtnCode', true);
} else {
return;
}
if ($return_code === '1' && $order->get_status() == 'processing') {
if ($allpay_instruction_succ) {
echo '';
echo wpautop(wptexturize($allpay_instruction_succ));
echo '
';
}
} elseif (( $return_code === '2' || $return_code === '10100073' ) && $order->get_status() == 'on-hold') {
if ($allpay_instruction_on_hold) {
echo '';
echo wpautop(wptexturize($allpay_instruction_on_hold));
echo '
';
}
}
}
/**
* Check the orders if their Allpay AIO orderstatus payment deadline is expired,
*
* @return void
*/
static function cancel_unpaid_orders() {
$args = array(
'post_type' => 'shop_order',
'post_status' => array('wc-on-hold'),
'order' => 'ASC', // make sure update from the oldest order
'orderby' => 'date',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => '_payment_method',
'value' => array(
'innovext_allpay_aio',
),
'compare' => 'IN'
),
)
);
$posts = get_posts($args);
if (empty($posts)) {
return;
}
foreach ($posts as $post) {
$order_id = $post->ID;
$expiredate = get_post_meta($order_id, '_ExpireDate', true);
if (empty($expiredate)) {
continue;
}
$order = new WC_Order($order_id);
$parse_date = date_parse($expiredate);
// the format of ATM expire date is YYYY-mm-dd, which doesn't contain time.
// so we need to +1 day to make sure the order is expired at the end of the given day
if (isset($parse_date['hour']) && $parse_date['hour'] === false) {
$expiredate = $expiredate . '+1 day';
}
$deadline_timestamp = strtotime($expiredate);
$now_timestamp = strtotime('now');
// if expired, cancel the WC order
if ($now_timestamp > $deadline_timestamp) {
$order->update_status('cancelled', '訂單超過繳費期限');
}
}
// die(); // use die to get the output
}
/**
* Add cron schedules interval
*
* @return void
*/
static function add_cancel_order_schedule($schedules) {
$allpay_aio_settings = get_option('woocommerce_innovext_allpay_aio_settings');
if (isset($allpay_aio_settings['cron_frequency_min']) && !empty($allpay_aio_settings['cron_frequency_min'])) {
$cron_frequency_min = $allpay_aio_settings['cron_frequency_min'];
} else {
$cron_frequency_min = 360;
}
$schedules['woocommerce_allpay_aio_cron_frequency'] = array(
'interval' => $cron_frequency_min * 60, // X minutes * 60 seconds, default is 1 hour
'display' => __('歐付寶/綠界全方位金流檢查過期訂單')
);
return $schedules;
}
/**
* Schedule the event
*
* @return void
*/
static function auto_update_order_schedule() {
$allpay_aio_settings = get_option('woocommerce_innovext_allpay_aio_settings');
if (isset($allpay_aio_settings['cron_frequency_min']) && $allpay_aio_settings['cron_frequency_min'] > 0) {
$enable_cron = 'yes';
} else {
$enable_cron = 'no';
}
if ($enable_cron != 'yes') {
return;
}
if (function_exists('wp_next_scheduled') && function_exists('wp_schedule_event')) {
$now_timestmp = strtotime('now');
if (!wp_next_scheduled('allpay_aio_auto_update_order')) {
wp_schedule_event($now_timestmp, 'woocommerce_allpay_aio_cron_frequency', 'allpay_aio_auto_update_order');
}
}
}
}
Innvext_Allpay_AIO_Addon::init();
}