.NET MVC - API-интерфейс QuickBooks OAuth2 - Как установить конечные точки - PullRequest
1 голос
/ 03 июня 2019

Я не могу понять, где или нужно ли мне настраивать конечные точки API для QuickBooks OAuth2.

Если я добавляю базовый URL для запроса кода, QuickBooks правильно возвращается к URL перенаправления с кодом,После этого я не знаю, как добавить конечную точку для обмена токенами.

На обмене токенами я получаю исключение:

Value cannot be null. Parameter name: endpoint

В конечном счете, я могу 't выяснить, как правильно установить конечные точки.Любая помощь будет оценена.

public class QuickbooksController : Controller
{
    public static OAuth2Client oauthClient = new OAuth2Client(
        "REDACTED",
        "REDACTED",
        "https://localhost:302/QuickBooks/AccessToken/",
        "sandbox");

    // GET: Quickbooks
    public ActionResult Index(string connect, string msg)
    {
        if (!String.IsNullOrEmpty(connect)) {

            //Prepare scopes
            List<OidcScopes> scopes = new List<OidcScopes>();
            scopes.Add(OidcScopes.Accounting);
            scopes.Add(OidcScopes.OpenId);

            string authorizeUrl =  oauthClient.GetAuthorizationURL(scopes);

            return Redirect("https://appcenter.intuit.com/connect/oauth2" + authorizeUrl);
        }

        ViewBag.TokenFailed = false;
        ViewBag.ConfirmMessage = msg;
        return View(new QuickBooksViewModel(new App()));
    }

    public async Task<ActionResult> Accesstoken(string state, string code, string realmId)
    {
        try {
            TokenResponse tokenResponse = await oauthClient.GetBearerTokenAsync(code);

            if (tokenResponse.IsError) { 
                return RedirectToAction("Index", new { msg = "Error connecting to QuickBooks. Response: "  + tokenResponse.Raw });
            }

            return RedirectToAction("Index", new { msg = "Connected to QuickBooks. Token: " + tokenResponse.AccessToken });
        } catch (Exception ex) {
            return RedirectToAction("Index", new { msg = "Error connecting to QuickBooks. Error: " + ex.Message });
        }
    }

1 Ответ

0 голосов
/ 03 июня 2019

Наконец:

Получить документ обнаружения с URL-адреса и назначить его клиенту oauth. Документ обнаружения отличается от производственного, поэтому его необходимо настроить.

Обязательно проверяйте наличие ошибок после ответа документа обнаружения. Мне не хватало dll, который не выдавал ошибку.

После этого все конечные точки должны работать, не нужно ничего добавлять или назначать. Надеюсь, это сэкономит кому-то еще несколько часов.

public async Task<ActionResult> Connect()
{
    try { 
        DiscoveryClient discoveryClient = new DiscoveryClient("https://developer.api.intuit.com/.well-known/openid_sandbox_configuration/");
        DiscoveryResponse doc = await discoveryClient.GetAsync();
        if (doc.IsError) {
            return RedirectToAction("Index", new { msg = "Token Endpoint. Received error: " + doc.Error });
        }

        oauthClient.DiscoveryDoc = doc;

        //Prepare scopes
        List<OidcScopes> scopes = new List<OidcScopes>();
        scopes.Add(OidcScopes.Accounting);
        scopes.Add(OidcScopes.OpenId);
        //scopes.Add(OidcScopes.Email);

        string authorizeUrl = oauthClient.GetAuthorizationURL(scopes);

        return Redirect(authorizeUrl);
    } catch(Exception ex) {
        return RedirectToAction("Index", new { msg = "Token Endpoint. Error: " + ex.Message });
    }
}
...