/** * Expires a single subscription on a users account. * * @param $user_id int The id of the user who owns the expiring subscription. * @param $subscription_key string A subscription key of the form obtained by @see get_subscription_key( $order_id, $product_id ) * @since 1.0 */ public static function process_subscription_payment_failure($user_id, $subscription_key) { // Store a record of the subscription payment date $subscription = self::get_users_subscription($user_id, $subscription_key); if (!isset($subscription['failed_payments'])) { $subscription['failed_payments'] = 0; } $subscription['failed_payments'] = $subscription['failed_payments'] + 1; self::update_users_subscriptions($user_id, array($subscription_key => $subscription)); $order = new WC_Order($subscription['order_id']); $item = WC_Subscriptions_Order::get_item($order, $subscription['product_id']); // We've reached the maximum failed payments allowed on the subscription if ($subscription['failed_payments'] >= get_option(WC_Subscriptions_Admin::$option_prefix . '_max_failed_payments')) { self::cancel_subscription($user_id, $subscription_key); $order->add_order_note(sprintf(__('Cancelled Subscription "%s". Maximum number of failed subscription payments reached.', WC_Subscriptions::$text_domain), $item['name'])); if ('yes' == get_option(WC_Subscriptions_Admin::$option_prefix . '_generate_renewal_order')) { $renewal_order_id = WC_Subscriptions_Renewal_Order::generate_renewal_order($order, $subscription['product_id'], 'parent'); } } else { // Log payment failure on order $order->add_order_note(sprintf(__('Payment failed for subscription "%s".', WC_Subscriptions::$text_domain), $item['name'])); } do_action('processed_subscription_payment_failure', $user_id, $subscription_key); }
/** * When a store manager or user suspends a subscription in the store, also suspend the subscription with PayPal. * * @since 1.1 */ public static function suspend_subscription_with_paypal($order, $product_id) { $profile_id = self::get_subscriptions_paypal_id($order, $product_id); // Make sure a subscriptions status is active with PayPal $response = self::change_subscription_status($profile_id, 'Suspend'); if (isset($response['ACK']) && $response['ACK'] == 'Success') { $item = WC_Subscriptions_Order::get_item($order, $product_id); $order->add_order_note(sprintf(__('Subscription "%s" suspended with PayPal', WC_Subscriptions::$text_domain), $item['name'])); } }