0

我正在尝试在独立(非 Web)应用程序中使用 Docusign SDK,但会引发以下错误。

com.docusign.esign.client.ApiException: Error while requesting server, received a non successful HTTP code 401 with response Body: '{"errorCode":"PARTNER_AUTHENTICATION_FAILED","message":"The specified Integrator Key was not found or is disabled. An Integrator key was not specified."}'

示例代码:

ApiClient apiClient = new ApiClient();
apiClient.setOAuthBasePath("account-d.docusign.com");
OAuth.OAuthToken oAuthToken = apiClient.requestJWTUserToken(
        CLIENT_ID, 
        ACCOUNT_ID,
        List.of(OAuth.Scope_SIGNATURE),
        getRsaBytes(), TOKEN_EXPIRATION_SECONDS);


apiClient.setAccessToken(oAuthToken.getAccessToken(), oAuthToken.getExpiresIn());

OAuth.UserInfo userInfo = apiClient.getUserInfo(oAuthToken.getAccessToken());

ApiClient apiClientRequest = new ApiClient("https://demo.docusign.net/restapi");
apiClient.addDefaultHeader(HttpHeaders.AUTHORIZATION, BEARER_AUTHENTICATION + oAuthToken.getAccessToken());

EnvelopesApi envelopesApi = new EnvelopesApi(apiClientRequest);
EnvelopeIdsRequest request = new EnvelopeIdsRequest();
request.addEnvelopeIdsItem("740525a1-6eb9-4045-a634-7e77bd52e474");
EnvelopesInformation status = envelopesApi.listStatus(ACCOUNT_ID, request);

值得一提的是以下几点:

  1. 我的帐户、集成密钥和 RSA 都是正确的
  2. 已同意申请
  3. 当我使用 RestTemplate 而不是 ApiClient 对象时,此代码的逻辑有效

如果有人可以帮助我,我将不胜感激。

4

2 回答 2

0

要让 JWT 正常工作,您需要确保在开发者帐户中创建了集成密钥并正确配置它。 https://developers.docusign.com/platform/auth/jwt/jwt-get-token/

或者,使用快速入门获取已经为您设置好所有内容的代码。

于 2020-10-16T01:11:04.860 回答
0

@Inbar,与使用 Docusign SDK 不同,下面的代码完美运行。

ApiClient apiClient = new ApiClient();
apiClient.setOAuthBasePath("account-d.docusign.com");
OAuth.OAuthToken oAuthToken = apiClient.requestJWTUserToken(
        CLIENT_ID,
        ACCOUNT_ID,
        List.of(OAuth.Scope_SIGNATURE),
        getRsaBytes(), TOKEN_EXPIRATION_SECONDS);


OAuth.UserInfo userInfo = apiClient.getUserInfo(oAuthToken.getAccessToken());
OAuth.Account account = userInfo.getAccounts().get(0);

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(oAuthToken.getAccessToken());

RestTemplate restTemplate = new RestTemplate();

String resourceUrl = ApiClient.DEMO_REST_BASEPATH + "/v2.1/accounts/" + account.getAccountId() + "/envelopes/" + ENVELOPE_ID;

ResponseEntity<Envelope> response = restTemplate.exchange(RequestEntity.get(new URI(resourceUrl)).headers(headers).build(), Envelope.class);
于 2020-10-16T17:53:55.707 回答