function eddsss_subscription_status_shortcode()
 {
     if (!is_user_logged_in() || !class_exists('EDD_Recurring_Customer')) {
         return;
     }
     $user_id = get_current_user_id();
     $status = EDD_Recurring_Customer::get_customer_status($user_id);
     if ($status !== 'active' && $status !== 'cancelled' && $status !== 'expired') {
         return;
     }
     // Check if expired and set to expired if so
     if (EDD_Recurring_Customer::is_customer_expired($user_id)) {
         $status = 'expired';
         EDD_Recurring_Customer::set_customer_status($user_id, $status);
     }
     $message = '';
     switch ($status) {
         case 'active':
             $message = sprintf(__('Your subscription is active and will renew on %s.', 'edd'), date_i18n(get_option('date_format'), EDD_Recurring_Customer::get_customer_expiration($user_id)));
             break;
         case 'cancelled':
             $message = sprintf(__('Your subscription is cancelled and expires on %s.', 'edd'), date_i18n(get_option('date_format'), EDD_Recurring_Customer::get_customer_expiration($user_id)));
             break;
         case 'expired':
             $message = sprintf(__('Your subscription expired on %s.', 'edd'), date_i18n(get_option('date_format'), EDD_Recurring_Customer::get_customer_expiration($user_id)));
             break;
     }
     if (!empty($message)) {
         return '<div id="edd-subscription-status" class="' . esc_attr($status) . '">' . $message . '</div>';
     }
 }
function pw_edd_give_subscription_on_purchase($payment_id)
{
    $user_id = edd_get_payment_user_id($payment_id);
    if (empty($user_id) || $user_id < 1) {
        return;
    }
    if (!class_exists('EDD_Recurring_Customer')) {
        return;
    }
    $customer = new EDD_Recurring_Customer();
    $customer->set_as_subscriber($user_id);
    $customer->set_customer_payment_id($payment_id);
    $customer->set_customer_status($user_id, 'active');
    $customer->set_customer_expiration($user_id, strtotime('+1 year'));
}
Exemplo n.º 3
0
 /**
  * Setup customer status (expiration, status, etc) for users purchasing with Test Mode
  *
  * This is mainly so that site admins can test integrations.
  *
  * Test Mode purchases are not truly recurring and only the initial payment will be recorded
  *
  * @since  1.0
  * @return void
  */
 public function process_test_payment($payment_id, $payment_data)
 {
     if (!isset($_POST['edd-gateway']) || $_POST['edd-gateway'] != 'manual') {
         return;
     }
     foreach ($payment_data['downloads'] as $download) {
         if (isset($download['options']) && isset($download['options']['recurring'])) {
             $user_id = $payment_data['user_info']['id'];
             // Set user as subscriber
             EDD_Recurring_Customer::set_as_subscriber($user_id);
             // Set the customer's status to active
             EDD_Recurring_Customer::set_customer_status($user_id, 'active');
             // Calculate the customer's new expiration date
             $new_expiration = EDD_Recurring_Customer::calc_user_expiration($user_id, $payment_id);
             // Set the customer's new expiration date
             EDD_Recurring_Customer::set_customer_expiration($user_id, $new_expiration);
             // Store the original payment ID in the customer meta
             EDD_Recurring_Customer::set_customer_payment_id($user_id, $payment_id);
         }
     }
 }
Exemplo n.º 4
0
/**
 * Listen for Stripe events, primarily recurring payments
 *
 * @access      public
 * @since       1.5
 * @return      void
 */
function edds_stripe_event_listener()
{
    if (!class_exists('EDD_Recurring')) {
        return;
    }
    if (isset($_GET['edd-listener']) && $_GET['edd-listener'] == 'stripe') {
        global $edd_options;
        if (!class_exists('Stripe')) {
            require_once EDDS_PLUGIN_DIR . '/Stripe/Stripe.php';
        }
        $secret_key = edd_is_test_mode() ? trim($edd_options['test_secret_key']) : trim($edd_options['live_secret_key']);
        Stripe::setApiKey($secret_key);
        // retrieve the request's body and parse it as JSON
        $body = @file_get_contents('php://input');
        $event_json = json_decode($body);
        // for extra security, retrieve from the Stripe API
        $event_id = $event_json->id;
        if (isset($event_json->id)) {
            status_header(200);
            $event = Stripe_Event::retrieve($event_json->id);
            $invoice = $event->data->object;
            switch ($event->type) {
                case 'invoice.payment_succeeded':
                    // Process a subscription payment
                    // retrieve the customer who made this payment (only for subscriptions)
                    $user_id = EDD_Recurring_Customer::get_user_id_by_customer_id($invoice->customer);
                    // retrieve the customer ID from WP database
                    $customer_id = EDD_Recurring_Customer::get_customer_id($user_id);
                    // check to confirm this is a stripe subscriber
                    if ($user_id && $customer_id) {
                        $cu = Stripe_Customer::retrieve($customer_id);
                        // Get all subscriptions of this customer
                        $plans = $cu->subscriptions->data;
                        $subscriptions = wp_list_pluck($plans, 'plan');
                        $subscription_ids = !empty($subscriptions) ? wp_list_pluck($subscriptions, 'id') : array();
                        // Make sure this charge is for the user's subscription
                        if (!empty($subscription_ids) && !in_array($invoice->lines->data[0]->plan->id, $subscription_ids)) {
                            die('-3');
                        }
                        // Retrieve the original payment details
                        $parent_payment_id = EDD_Recurring_Customer::get_customer_payment_id($user_id);
                        if (false !== get_transient('_edd_recurring_payment_' . $parent_payment_id)) {
                            die('2');
                            // This is the initial payment
                        }
                        try {
                            // Store the payment
                            EDD_Recurring()->record_subscription_payment($parent_payment_id, $invoice->total / 100, $invoice->charge);
                            // Set the customer's status to active
                            EDD_Recurring_Customer::set_customer_status($user_id, 'active');
                            // Calculate the customer's new expiration date
                            $new_expiration = EDD_Recurring_Customer::calc_user_expiration($user_id, $parent_payment_id);
                            // Set the customer's new expiration date
                            EDD_Recurring_Customer::set_customer_expiration($user_id, $new_expiration);
                        } catch (Exception $e) {
                            die('3');
                            // Something not as expected
                        }
                    }
                    break;
                case 'customer.subscription.deleted':
                    // Process a cancellation
                    // retrieve the customer who made this payment (only for subscriptions)
                    $user_id = EDD_Recurring_Customer::get_user_id_by_customer_id($invoice->customer);
                    $parent_payment_id = EDD_Recurring_Customer::get_customer_payment_id($user_id);
                    // Set the customer's status to active
                    EDD_Recurring_Customer::set_customer_status($user_id, 'cancelled');
                    edd_update_payment_status($parent_payment_id, 'cancelled');
                    break;
            }
            do_action('edds_stripe_event_' . $event->type, $event);
            die('1');
            // Completed successfully
        } else {
            status_header(500);
            die('-1');
            // Failed
        }
        die('-2');
        // Failed
    }
}
 /**
  * Processes the "end of term (eot)" IPN notice
  *
  * @since  1.0
  * @return void
  */
 public static function process_paypal_subscr_eot($ipn_data)
 {
     $user_id = edd_get_payment_user_id($ipn_data['custom']);
     // set the customer status
     EDD_Recurring_Customer::set_customer_status($user_id, 'expired');
 }
 public static function create_payment($data)
 {
     if (wp_verify_nonce($data['edd_create_payment_nonce'], 'edd_create_payment_nonce')) {
         global $edd_options;
         if (empty($data['downloads'][0]['id'])) {
             wp_die(sprintf(__('Please select at least one %s to add to the payment.', 'edd-manual-purchases'), edd_get_label_singular()));
         }
         $user = strip_tags(trim($data['user']));
         if (empty($user)) {
             wp_die(__('Please enter a username, user ID, or email for the customer this payment belongs to.', 'edd-manual-purchases'));
         }
         if (is_numeric($user)) {
             $user = get_userdata($user);
         } elseif (is_email($user)) {
             $user = get_user_by('email', $user);
         } elseif (is_string($user)) {
             $user = get_user_by('login', $user);
         } else {
             return;
         }
         // no user assigned
         $user_id = $user ? $user->ID : 0;
         $email = $user ? $user->user_email : strip_tags(trim($data['user']));
         if (isset($data['first'])) {
             $user_first = sanitize_text_field($data['first']);
         } else {
             $user_first = $user ? $user->first_name : '';
         }
         if (isset($data['last'])) {
             $user_last = sanitize_text_field($data['last']);
         } else {
             $user_last = $user ? $user->last_name : '';
         }
         $user_info = array('id' => $user_id, 'email' => $email, 'first_name' => $user_first, 'last_name' => $user_last, 'discount' => 'none');
         $price = !empty($data['amount']) ? edd_sanitize_amount(strip_tags(trim($data['amount']))) : false;
         $cart_details = array();
         $total = 0;
         foreach ($data['downloads'] as $key => $download) {
             // calculate total purchase cost
             if (isset($download['options'])) {
                 $prices = get_post_meta($download['id'], 'edd_variable_prices', true);
                 $price_key = $download['options']['price_id'];
                 $item_price = $prices[$price_key]['amount'];
             } else {
                 $item_price = edd_get_download_price($download['id']);
             }
             $cart_details[$key] = array('name' => get_the_title($download['id']), 'id' => $download['id'], 'item_number' => $download, 'price' => $price ? $price : $item_price, 'subtotal' => $price ? $price : $item_price, 'quantity' => 1, 'tax' => 0);
             $total += $item_price;
         }
         // assign total to the price given, if any
         if ($price) {
             $total = $price;
         }
         $date = !empty($data['date']) ? date('Y-m-d H:i:s', strtotime(strip_tags(trim($data['date'])))) : false;
         if (!$date) {
             $date = date('Y-m-d H:i:s', current_time('timestamp'));
         }
         if (strtotime($date, time()) > time()) {
             $date = date('Y-m-d H:i:s', current_time('timestamp'));
         }
         $status = isset($_POST['status']) ? sanitize_text_field($_POST['status']) : 'pending';
         $tax = !empty($_POST['tax']) ? edd_sanitize_amount(sanitize_text_field($_POST['tax'])) : 0;
         $purchase_data = array('price' => edd_sanitize_amount($total), 'tax' => $tax, 'post_date' => $date, 'purchase_key' => strtolower(md5(uniqid())), 'user_email' => $email, 'user_info' => $user_info, 'currency' => edd_get_currency(), 'downloads' => $data['downloads'], 'cart_details' => $cart_details, 'status' => 'pending');
         $payment_id = edd_insert_payment($purchase_data);
         edd_update_payment_meta($payment_id, '_edd_payment_tax', $tax);
         if (empty($data['receipt']) || $data['receipt'] != '1') {
             remove_action('edd_complete_purchase', 'edd_trigger_purchase_receipt', 999);
         }
         if (!empty($data['expiration']) && class_exists('EDD_Recurring_Customer') && $user_id > 0) {
             $expiration = strtotime($data['expiration'] . ' 23:59:59');
             EDD_Recurring_Customer::set_as_subscriber($user_id);
             EDD_Recurring_Customer::set_customer_payment_id($user_id, $payment_id);
             EDD_Recurring_Customer::set_customer_status($user_id, 'active');
             EDD_Recurring_Customer::set_customer_expiration($user_id, $expiration);
         }
         if (!empty($data['shipped'])) {
             update_post_meta($payment_id, '_edd_payment_shipping_status', '2');
         }
         // increase stats and log earnings
         edd_update_payment_status($payment_id, $status);
         wp_redirect(admin_url('edit.php?post_type=download&page=edd-payment-history&edd-message=payment_created'));
         exit;
     }
 }