Search code examples
paypalpaypal-subscriptions

I called Paypal subscription API which returns success message but don't see any active subscription in the Paypal dashboard


I am trying to create Paypal subscription through its Rest API using live client and secret. The API returns success message. The GET subscription API returns the active subscription created, however I don't see any active subscription in my Paypal dashbaord. Paypal support says the subscription ID does not exist. Has anyone encountered such issue with Paypal API? I have attached API JSON response and snapshot herewith.

{
"plans": [
    {
        "id": "P-4UJ45561KJ704964LMJ2QDZQ",
        "product_id": "PROD-4EX86934CR7151923",
        "name": "Certified business economist IHK | VO 2022",
        "status": "ACTIVE",
        "description": "The business economist IHK is divided into the following five subjects with the new examination regulations 2022",
        "usage_type": "LICENSED",
        "create_time": "2022-05-06T11:09:26Z",
        "links": [
            {
                "href": "https://api.paypal.com/v1/billing/plans/P-4UJ45561KJ704964LMJ2QDZQ",
                "rel": "self",
                "method": "GET",
                "encType": "application/json"
            }
        ]
    }
],
"total_items": 1,
"total_pages": 1,
"links": [
    {
        "href": "https://api.paypal.com/v1/billing/plans?product_id=PROD-4EX86934CR7151923&page_size=2&page=1",
        "rel": "self",
        "method": "GET",
        "encType": "application/json"
    }
]

}

Get active subscription


Solution

  • First of all, everything in your question shows creating a plan. A plan is not a subscription, it is the cycle details to be able to create a subscription.

    Secondly, creating a subscription still will not do anything unless a payer signs in to approve it. For a payer to approve a subscription, use a PayPal button. This is detailed in the Subscriptions Integration Guide.

    Note that the createSubscription function can create a subscription for approval itself, by passing it an object with a plan_id (and optionally a plan object to override some part of that plan_id). This is the most simple method.

    Alternatively, the subscription can be created via API, at a route on your server which that function will fetch when the button is clicked. Something like:

      <script src="https://www.paypal.com/sdk/js?client-id=YOUR_CLIENT_ID_GOES_HERE&amp;vault=true&amp;intent=subscription"></script>
    
      <div id="paypal-button-container"></div>
    
      <script>
        paypal.Buttons({
          style: {
              label:'subscribe'  //Optional text in button
          },
          createSubscription: function(data, actions) {
              return fetch('/path/on/your/server/paypal/subscription/create/', {
                  method: 'post'
              }).then(function(res) {
                  return res.json();
              }).then(function(serverData) {
                  console.log(serverData);
                  return serverData.id;
              });
          },
    
          onApprove: function(data, actions) {
          /*  Optional: At this point, notify your server of the activated subscription...
    
              fetch('/path/on/your/server/paypal/subscription/activated/' + data.subscriptionID , {
                  method: 'post'
              }).then(function(res) {
                  return res.json();
              }).then(function(serverData) {
                  //
              });
          */
              //You could additionally subscribe to a webhook for the BILLING.SUBSCRIPTION.ACTIVATED event (just in case), as well as other future subscription events
              //Ref: https://developer.paypal.com/api-basics/notifications/webhooks/event-names/#subscriptions
    
              // Show a message to the buyer, or redirect to a success page
              alert('You successfully subscribed! ' + data.subscriptionID);
          }
    
        }).render('#paypal-button-container');
      </script>