Problem implementing endpoint OAuth

(Ron) #1

I am working on a REST Endpoint trying to follow these instructions from @Ben

Everything works fine util step 3
Step 1: I redirect to get the code. ST login and device selection is displayed and I select the devices I want access to.

This works.

Step 2: I am returned json with the access_token
I get the access token from the json and forward to myself

this works

Step 3: I reach my routine with the access_token populated and make the call to get the data. But I am always returned only
[ ]

Not sure how to debug this at this point since ST is always returning empty results.

The call I make in step 3 is$client?access_token=

where … is my access token. I write the token I get from step 2 and it matches what is in this request.

I don’t know php that well so I am guessing at Ben’s code.
I am writing my code in Spring Boot.
I notice Ben makes the calls differently for the access_token call which returns json and the call which returns the data.

The first uses curl

$page = “".$client."&client_secret=".$secret."&redirect_uri=".$url."&code=".$code."&scope=app”;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $page );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POST, 0 );
curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Content-Type: application/json’));
$response = json_decode(curl_exec($ch),true);

The second uses file which I don’t really understand

$url = “$client?access_token=”.$_REQUEST[‘access_token’];
$json = implode(’’, file($url));

I think the difference between these may be my issue.

I am using the same technique for both steps and wondering if this is what I am doing wrong.
Why is the different technique used for the second step.

As a test I just forward in step 3 to the url$client?access_token=

and I get the blank [ ] displayed in the browser.

(Ron) #2

I figured out my problem$client?access_token=

I put literal $client…needed that to me my client ID.

But now I am dealing with the fact that the first call which returns a list of endpoints doesn’t return valid json. JSONObject thows json exception trying to parse. I wish I could read php code better but I think I have it now…

For some reason this returns a crazy key/value string which I am trying to figure out how to parse easily (or correctly)
The url call to get endpoints returns the following string including the open and close branckets []


This does not parse as json (why didn’t they just return json ?

The php code loops first on this as an array of $key $value endpoints. I have only one so my sample is an array of one key/value.

Buy I am not sure how to parse this in Java code. Since it is a mix of json and Map output. It seems messy to me.

Parsing it by had I think it is the following.
endpoints[0]= everything inside the [ ] pair perhaps split on , ?



I don’t understand the code here
foreach ($theEndPoints as $k => $v)

what will be used from the string endpoints[0] for key and what for value ?
then value is accessed as $v[‘url’] so this is a HashMap itself ?

Does anyone know how to parse this string in Java ? I am confused :confused:

( co-founder Terry @ActionTiles; GitHub: @cosmicpuppy) #3

I ran this through “JSON Lint” and it parses just fine…

(Ron) #4

Hmm…why is JSON throwing a parse JSONException…interesting…
JSON lint…cool…

( co-founder Terry @ActionTiles; GitHub: @cosmicpuppy) #5

Yeah… it really helps to have a suite of debugging tools; I just googled to find that one :wink:

There’s a web based Groovy tester too, and so on… (Though I’m not sure you can load libraries into it).

(Ron) #6

Yea I love using
xpath tester

and jsfiddle is my favorite

should have thought of a json parsing tool LOL

(Ron) #7

OK JSONObject throws exception with the following error

Error:A JSONObject text must begin with ‘{’ at character 1

Why does jsonlint accept the [ ]'s ?

If I strip of the [ ] then JSONObject throws this error.
Error:Expected a ‘,’ or ‘}’ at character 184

( co-founder Terry @ActionTiles; GitHub: @cosmicpuppy) #8

Hmmm… Perhaps JSON lint accepts partial objects? It does seem that the “entire” object should be surrounded by {}, and only array / maps are [].

There must be a detailed JSON syntax spec, of course, but found this:

Let’s have a quick look on JSON basic syntax. JSON syntax is basically considered as subset of JavaScript syntax, it includes the following:

Data is represented in name/value pairs

Curly braces hold objects and each name is followed by ‘:’(colon), the name/value pairs are separated by , (comma).

Square brackets hold arrays and values are separated by ,(comma).

Here’s the syntax diagrams:

(Ron) #9

Figured it out. For this json I need to create a JSONArray not a JSONObject.

Learning a lot here :smile: