Forum Discussion
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 class
public 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
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.
- Hamishjam3 years agoContributing User
Hey, I also wound up in MYOB website 404 land sorting this out. I've played with the code from KJM to spit out the auth code in a .NET core WPF app. It's a bit rough at this stage but seems to do the trick as a replacement for the lost OAuthLogin.GetAuthorizationCode:
private string GetAuthorizationCode() { var redirectUri = $"http://localhost:8080/"; var developerKey = "blah blah"; var AuthorizationCodeEndpoint = "https://secure.myob.com/oauth2/account/authorize";
// Creates an HttpListener to listen for requests on that redirect URI. var httpListener = new HttpListener(); httpListener.Prefixes.Add(redirectUri); // 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), developerKey); // Opens request in the browser. var ps = new ProcessStartInfo(authorizationRequest) { UseShellExecute = true, Verb = "open" }; Process.Start(ps); //System.Diagnostics.Process.Start(authorizationRequest); // Waits for the OAuth authorization response. var context = httpListener.GetContext(); var request = context.Request; httpListener.Stop(); var uri = new Uri(request.Url.OriginalString); var query = System.Web.HttpUtility.ParseQueryString(uri.Query); var code = query.Get("code"); return code; }- John_Dinning3 years agoTrusted User
Hi Hamishjam,
The lost OAuthLogin.GetAuthorizationCode is in the zip file attached to my last post.
Let me know if you can't get access to it.
- Hamishjam3 years agoContributing User
Cheers John - I came back to the forum and saw you posted this after I spent an hour stuffing around with it :)
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.