我一直在尝试使用OAuth 2.0连接到Exact Online。我们倾向于专注于Java应用程序,可惜Exact没有Java的文档/示例/支持。

我能够执行身份验证请求,但是对于 token 请求,我遇到了一些麻烦。我的代码:

OAuthAuthzResponse oar = OAuthAuthzResponse.oauthCodeAuthzResponse(request);
        code = oar.getCode();

        OAuthClientRequest oAuthRequest;
        try {
            oAuthRequest = OAuthClientRequest
                    .tokenLocation("https://start.exactonline.be/api/oauth2/token")
                    .setGrantType(GrantType.AUTHORIZATION_CODE)
                    .setClientId(CLIENT_ID)
                    .setClientSecret(CLIENT_SECRET)
                    .setRedirectURI(REDIRECT_URI)
                    .setCode(code)
                    .buildQueryMessage();


            OAuthClient client = new OAuthClient(new URLConnectionClient());

            OAuthJSONAccessTokenResponse oauthResponse = client.accessToken(oAuthRequest, OAuth.HttpMethod.POST);
        }

我环顾四周,但所有找到的答案都不能解决问题。
  • 尝试使用其他 token 响应类型。
  • 尝试使用.buildBodyMessage而不是.buildQueryMessage

  • 我总是得到以下问题之一:
    Token request failed: unsupported_response_type, Invalid response! Response body is not application/json encoded
    
    Token request failed: invalid_request, Missing parameters: access_token
    

    我希望任何人都具有处理精确在线问题的经验,希望能对您有所帮助。

    最佳答案

    不确定Java库的工作方式,我仅在C#上使用了Exact Online。

    问题似乎是该库尝试从JSON响应中提取access_token,但响应中没有JSON。您可能尚未授权应用程序(用户操作),或者使用了错误的返回URL值(精确检查服务器端)。如果可能,您可能希望查看实际输出(我猜是HTML)。真正的例外应该在那里。

    10-07 16:04