1
votes

I want to integrate the WSO2 API Manager with a website so that the user doesn't need to login to the API Store.

From what I can see there is a stumbling block, in that the user needs to click on the 'Generate' button in the store in order to first generate the consumer key and secret.

Once this has been done then on it is possible to call the subscription API and generate token API as documented:

$ curl -b cookies http://localhost:9763/store/site/blocks/subscription/subscription-list/ajax/subscription-list.jag?action=getAllSubscriptions
{
   "error" : false,
   "subscriptions" : [
      {
      {
         "sandRegenarateOption" : true,
         "prodKey" : "2486e65cbac4e372fb319375744fb",
         "subscriptions" : [
            {
               ...
               "prodConsumerSecret" : "Tx9i9WYu6_a3qqW08bF7jEG660",
               "prodConsumerKey" : "VfS5r5u4rFhec2vVBlFosxRgcE",
               "prodAuthorizedDomains" : "ALL"
               ...
            }
         ],
         ...
         "prodConsumerSecret" : "Tx9i9WYu6_a3qqW08bF7jEG660",
         "prodConsumerKey" : "VfS5r5u4rFhec2vVBlFosxRgcE"
         ...
      }
   ]
}

However until the 'Generate' button has been clicked in the browser, the values above are null

When I tried using the suggestion:

$ curl -X POST -b cookies http://localhost:9763/store/site/blocks/subscription/subscription-add/ajax/subscription-add.jag -d "action=generateApplicationKey&application=4&keytype=PRODUCTION&provider=admin&tier=Unlimited&version=0.1&callbackUrl=&authorizedDomains="

The server logs:

ERROR - APIStoreHostObject Error while obtaining the application access token for the application:4
org.wso2.carbon.apimgt.api.APIManagementException: Application should be approved before registering.
    at org.wso2.carbon.apimgt.impl.APIConsumerImpl.requestApprovalForApplicationRegistration(APIConsumerImpl.java:1678)
    at org.wso2.carbon.apimgt.impl.UserAwareAPIConsumer.requestApprovalForApplicationRegistration(UserAwareAPIConsumer.java:34)
    at org.wso2.carbon.apimgt.hostobjects.APIStoreHostObject.jsFunction_getApplicationKey(APIStoreHostObject.java:649)

But according to the getApplications API it is approved already:

curl -b cookies   http://localhost:9763/store/site/blocks/application/application-list/ajax/application-list.jag?action=getApplications
{
   "applications" : [
      ...
      {
         "tier" : "Unlimited",
         "status" : "APPROVED",
         "callbackUrl" : "",
         "name" : "app2",
         "id" : 4,
         "description" : ""
      }
   ],
   "error" : false
}

Any more thoughts ?

3

3 Answers

0
votes

I do not see any direct way to get that done. But you can make use of Store API exposed by wso2 API manger and retrieve all the subscription and from that you can filter the required ConsumerKey and ConsumerSecret.

I have tried this and worked pretty well to me :)

0
votes

You can try the following REST invocation

curl -X POST -b cookies http://localhost:9763/store/site/blocks/subscription/subscription-add/ajax/subscription-add.jag -d "action=generateApplicationKey&application=DefaultApplication&keytype=PRODUCTION&provider=admin&tier=Unlimited&version=1.0.0&callbackUrl=&authorizedDomains="
0
votes

You need to promote before subscribing. You need to call "/site/blocks/life-cycles/ajax/life-cycles.jag" endpoint with "PUBLISHED" status and "updateStatus" action. Once it is in promoted state you can subscribe to it.