示例#1
0
function premise_recurring_payment_handler()
{
    global $premise_cron_args, $wpdb;
    if (is_user_logged_in() || !function_exists('memberaccess_get_cron_key')) {
        return;
    }
    if (!is_array($premise_cron_args) || empty($premise_cron_args['key']) || memberaccess_get_cron_key() != $premise_cron_args['key']) {
        return;
    }
    $now = time();
    // check for expired subscriptions
    $expired_subscriptions = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_acp_order_renewal_time' AND meta_value BETWEEN %s AND %s", $now - 259200, $now - 172800));
    if (!empty($expired_subscriptions)) {
        foreach ($expired_subscriptions as $order) {
            $order_status = get_post_meta($order, '_acp_order_status', true);
            if ($order_status == __('cancel', 'premise')) {
                continue;
            }
            AccessPress_Orders::cancel_subscription($order, false);
        }
    }
    // try renewing over a 3 day window
    $subscriptions = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_acp_order_renewal_time' AND meta_value BETWEEN %s AND %s", $now - 172800, $now + 86400));
    if (!empty($subscriptions)) {
        $orders = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'acp-orders' AND post_status = 'publish' AND ID IN (" . implode(',', $subscriptions) . ')');
    }
    if (empty($orders)) {
        premise_recurring_payment_notification(__('No subscriptions to renew.', 'premise'));
    }
    $results = array();
    foreach ($orders as $order) {
        $order_status = get_post_meta($order, '_acp_order_status', true);
        if ($order_status == __('cancel', 'premise')) {
            continue;
        }
        $order_post = get_post($order);
        $result = AccessPress_Orders::renew_subscription($order, false);
        if (!$result) {
            $results[] = sprintf(__('Could not find product on order # %s', 'premise'), $order_post->post_name);
            continue;
        }
        if (is_wp_error($result)) {
            $results[] = sprintf(__('Error on order # %s - %s', 'premise'), $order_post->post_name, $result->get_error_message());
            continue;
        }
        $product = get_post($result['product_id']);
        $results[] = sprintf(__('Processed order # %d - %s - %s - Amount %.2f', 'premise'), $order, $order_post->post_name, $product->post_title, $result['order_details']['_acp_order_price']);
    }
    premise_recurring_payment_notification(implode("\n", $results));
}