diff --git a/CRM/Core/Payment/Stripe.php b/CRM/Core/Payment/Stripe.php
index 6d58517a7082853885ecd92128cfd9509f089fe0..80d004595676890dc656b7609455666224336033 100644
--- a/CRM/Core/Payment/Stripe.php
+++ b/CRM/Core/Payment/Stripe.php
@@ -926,5 +926,88 @@ class CRM_Core_Payment_Stripe extends CRM_Core_Payment {
           ))));
   }
 
+  /**
+   * Get url for users to manage this recurring contribution for this processor.
+   *
+   * @param int $entityID
+   * @param null $entity
+   * @param string $action
+   *
+   * @return string
+   */
+  public function subscriptionURL($entityID = NULL, $entity = NULL, $action = 'cancel') {
+    // Set URL
+    switch ($action) {
+      case 'cancel':
+        if (!$this->supports('cancelRecurring')) {
+          return NULL;
+        }
+        $url = 'civicrm/contribute/unsubscribe';
+        break;
+
+      case 'billing':
+        //in notify mode don't return the update billing url
+        if (!$this->supports('updateSubscriptionBillingInfo')) {
+          return NULL;
+        }
+        $url = 'civicrm/contribute/updatebilling';
+        break;
+
+      case 'update':
+        if (!$this->supports('changeSubscriptionAmount') && !$this->supports('editRecurringContribution')) {
+          return NULL;
+        }
+        $url = 'civicrm/contribute/updaterecur';
+        break;
+    }
+
+    $userId = CRM_Core_Session::singleton()->get('userID');
+    $contactID = 0;
+    $checksumValue = '';
+    $entityArg = '';
+
+    // Find related Contact
+    if ($entityID) {
+      switch ($entity) {
+        case 'membership':
+          $contactID = CRM_Core_DAO::getFieldValue("CRM_Member_DAO_Membership", $entityID, "contact_id");
+          $entityArg = 'mid';
+          break;
+
+        case 'contribution':
+          $contactID = CRM_Core_DAO::getFieldValue("CRM_Contribute_DAO_Contribution", $entityID, "contact_id");
+          $entityArg = 'coid';
+          break;
+
+        case 'recur':
+          $sql = "
+    SELECT DISTINCT con.contact_id
+      FROM civicrm_contribution_recur rec
+INNER JOIN civicrm_contribution con ON ( con.contribution_recur_id = rec.id )
+     WHERE rec.id = %1";
+          $contactID = CRM_Core_DAO::singleValueQuery($sql, array(1 => array($entityID, 'Integer')));
+          $entityArg = 'crid';
+          break;
+      }
+    }
+
+    // Add entity arguments
+    if ($entityArg != '') {
+      // Add checksum argument
+      if ($contactID != 0 && $userId != $contactID) {
+        $checksumValue = '&cs=' . CRM_Contact_BAO_Contact_Utils::generateChecksum($contactID, NULL, 'inf');
+      }
+      return CRM_Utils_System::url($url, "reset=1&{$entityArg}={$entityID}{$checksumValue}", TRUE, NULL, FALSE, TRUE);
+    }
+
+    // Else login URL
+    if ($this->supports('accountLoginURL')) {
+      return $this->accountLoginURL();
+    }
+
+    // Else default
+    return isset($this->_paymentProcessor['url_recur']) ? $this->_paymentProcessor['url_recur'] : '';
+  }
+
 }