Forum Discussion
posting from my other now linked dev account
I have solved this myself. little bit "surprised" at the lack of support both from myob and community. maybe these forums arent that busy/alive..
anyway..got the access code and passed it in..looks like ths SDK has a problem from there on in as I am returned a Bad Request
I have built own classes to extract the tokens using a httpListener and it works fine whic his why Ican verify that I am getting the correct access code
If anyone gets stuck like I did PM and I'll be happy to share code..
- PhilWherrett3 years agoExperienced User
Howdy Again kjm ,
I've just started on this implementation myself - sounds like we've headed down the same path using HttpListener - but I'm not sure how to handlethe redirect if the redirect Url is http://desktop as per MYOBs recommendation when creating the API Key. I can get a code using http://localhost as a redirect Url.
I'd be keen to get code examples of your implementation if you're willing to share (I can't seem to work out how to send you a PM :-()?
Cheers,
Phil.
- kjm3 years agoTrusted Cover User
Hi PhilWherrett
To PM I think just hover over avatar and click on "Send Message"I have the redirect set to http://127.0.0.1 I suppose you could modify the host file so that http://desktop resolves to this or localhost but not sure why myob are recommending that. Dont you simply need a socket for the httpListener so that it know where to listen for the response?
I have this in a in a base classpublic class BaseAuthenticator { // ref http://stackoverflow.com/a/3978040 private static int GetRandomUnusedPort() { var listener = new TcpListener(IPAddress.Loopback, 0); listener.Start(); var port = ((IPEndPoint)listener.LocalEndpoint).Port; listener.Stop(); return port; } public string GetRedirectUri => $"http://{IPAddress.Loopback}:{GetRandomUnusedPort()}/"; }
private string GetAuthorizationCode() { var redirectUri = GetRedirectUri; Output("redirect URI: " + redirectUri); // Creates an HttpListener to listen for requests on that redirect URI. var httpListener = new HttpListener(); httpListener.Prefixes.Add(redirectUri); Output("Listening.."); httpListener.Start(); // Creates the OAuth 2.0 authorization request. var authorizationRequest = string.Format("{0}?response_type=code&scope=CompanyFile&redirect_uri={1}&client_id={2}", AuthorizationCodeEndpoint, System.Uri.EscapeDataString(redirectUri), ClientId); // Opens request in the browser. System.Diagnostics.Process.Start(authorizationRequest); // Waits for the OAuth authorization response. var context = httpListener.GetContext();
var response = context.Response; }then get the response and parse it for the code
happy to give you the whole code if you're still stuck- PhilWherrett3 years agoExperienced User
Howdy kjm ,
Yep I tried to do that for the PM - but the page I get sent to doesn't render properly to allow sending anything:
Your code snippets are pretty much what I'm doing so thanks for sharing and confirming that I'm heading in the right direction :-)
I've managed to successfully get a code response and return the company files available so that's good.
Now just need to add the managing of token storage and refresh lifecycle so subsequent calls don't need to go through additional code requests.
Cheers,
Phil.
Looking for something else?
Search the Community Forum for answers or find your topic and get the conversation started!
Find technical support and help for all MYOB products in our online help centre
Dig into MYOB Academy for free courses, learning paths and live events to help build your business with MYOB.