/**
  * 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);
     $subscription['failed_payments'] = $subscription['failed_payments']++;
     self::update_users_subscriptions($user_id, array($subscription_key => $subscription));
     $order = new WC_Order($subscription['order_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->cancel_order(__('Maximum number of failed payments reached.', WC_Subscriptions::$text_domain));
         if ('yes' == get_option(WC_Subscriptions_Admin::$option_prefix . '_generate_renewal_order')) {
             WC_Subscriptions_Order::generate_renewal_order($subscription['order_id'], $subscription['product_id']);
         }
     } else {
         // Log payment failure on order
         $order->add_order_note(sprintf(__('Payment failed for subscription %s', WC_Subscriptions::$text_domain), $subscription_key));
     }
     do_action('processed_subscription_payment_failure', $user_id, $subscription_key);
 }