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')); }
/** * 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); } } }
/** * 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; } }