Ошибка при запросе токена доступа.Нет доступа к объекту accessTokenResponse, возможно, не получен HTTP 200? - PullRequest
0 голосов
/ 22 мая 2018

Я следовал этому руководству: https://developers.docusign.com/esign-rest-api/code-examples/config-and-auth (я использовал java)

In the third step  I dont know how to get the code that is sent back form DocuSign as query param in the redirect uri:

// Java request auth token
**String code = "{ENTER_AUTH_CODE_FROM_PREVIOUS_STEP}";**
// assign it to the token endpoint
apiClient.getTokenEndPoint().setCode(code);

// optionally register to get notified when a new token arrives
apiClient.registerAccessTokenListener(new AccessTokenListener() {
    @Override
    public void notify(BasicOAuthToken token) {
        System.out.println("Got a fresh token: " + token.getAccessToken());
    }
});

// following call exchanges the authorization code for an access code and updates 
// the `Authorization: bearer <token>` header on the api client
apiClient.updateAccessToken();

Я получаю сообщение об ошибке, указывающее, что запрошенный токен доступа пуст.Ниже приведена ошибка:

Ошибка при запросе токена доступа.accessTokenResponse объект не получен, возможно, не получен HTTP 200?

Кто-нибудь когда-либо получал такой же или может кто-нибудь подскажет мне, как это исправить.

1 Ответ

0 голосов
/ 23 мая 2018

Я запустил код, указанный ниже, и он работает нормально для меня, после получения кода с предыдущего шага в URL:

public static void main(String[] args) {

                String IntegratorKey = "[Your_Integrator_Key]";

                String ClientSecret = "[Your_Secret_Key]";

                String RedirectURI = "https://www.getpostman.com/oauth2/callback";//This REDIRECT_URI should match whats configured with IntegratorKey in your Sandbox account

                String AuthServerUrl = "https://account-d.docusign.com";

                String RestApiUrl = "https://demo.docusign.net/restapi";

                ApiClient apiClient = new ApiClient(AuthServerUrl, "docusignAccessCode", IntegratorKey, ClientSecret);

                apiClient.setBasePath(RestApiUrl);

                apiClient.configureAuthorizationFlow(IntegratorKey, ClientSecret, RedirectURI);

                Configuration.setDefaultApiClient(apiClient);

                String code = "{ENTER_AUTH_CODE_FROM_PREVIOUS_STEP}";
                apiClient.getTokenEndPoint().setCode(code);

                apiClient.registerAccessTokenListener(new AccessTokenListener() {
                    @Override
                    public void notify(BasicOAuthToken token) {
                        System.out.println("Got a fresh token: " + token.getAccessToken());
                    }
                });

                apiClient.updateAccessToken();
    }

Чтобы получить код, возвращенный DocuSign из браузера, вам необходимо иметь WEBApp, на который DocuSign будет перенаправлять браузер, этот же URL-адрес обратного вызова должен быть настроен в REDIRECT_URI вашей песочницы DS, например, если ваш URL-адрес обратного вызова WEBApp равен http://locahost:8080/docusignapp/callback,, то его следует добавить в REDIRECT_URI в IntegratorKey и аналогичнонеобходимо добавить при вызове DS URL для аутентификации пользователя.Как только DS аутентифицирует пользователя, он перенаправит браузер на ваш URL-адрес приложения.После нажатия на WEBApp вам нужно прочитать URL-адрес и удалить часть кода, используя Javascript, а затем запустить step2, чтобы получить токен доступа.Пример кода JS для удаления части code:

var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
  hash = hashes[i].split('=');
  vars.push(hash[0]);
  vars[hash[0]] = hash[1];
}

var authCode = vars["code"];

В примере, которым вы делитесь, они делали это с помощью автономного кода, где вы вручную копируете часть кода из URL после аутентификации и запускаstep2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...