使用DocuSign下载文档时遇“Integrator key not found”认证错误
DocuSign JWT认证创建信封正常,但下载签署后文档报PARTNER_AUTHENTICATION_FAILED错误
我通过JWT认证可以正常创建信封并发送文档给收件人进行电子签名,但文档签署完成后,调用以下代码下载文档时:
Envelope envelope = envelopesApi.getEnvelope(accountId,envelopeId); byte[] results = envelopesApi.getDocument(accountId,envelopeId,"33");
出现错误:
com.docusign.esign.client.ApiException: 请求服务器失败,收到非成功HTTP状态码400,响应体为'{"errorCode":"PARTNER_AUTHENTICATION_FAILED","message":"The specified Integrator Key was not found or is disabled. Invalid account specified for user."}'
创建信封代码(JWT认证可正常运行)
package com.sripy.demo; import com.docusign.esign.api.AccountsApi; import com.docusign.esign.api.EnvelopesApi; import com.docusign.esign.client.ApiClient; import com.docusign.esign.client.auth.OAuth.OAuthToken; import com.docusign.esign.client.auth.OAuth.UserInfo; import com.docusign.esign.client.ApiException; import com.docusign.esign.model.*; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; import java.io.*; /** * Starter class for JWTConsoleApp application. */ public class JWTConsoleAppCreateEnvelope { static String DevCenterPage = "https://developers.docusign.com/platform/auth/consent"; /** * Application entry point. * * @param args application command line arguments */ public static void main(String[] args) throws IOException { String signerEmail = "******@yahoo.com"; String signerName = "sriram sundararajan"; String ccEmail = "******@gmail.com"; String ccName = "John Doe"; String className = "javax.ws.rs.client.ClientBuilder"; try { Class<?> clazz = Class.forName(className); String classPath = clazz.getProtectionDomain().getCodeSource().getLocation().toString(); System.out.println("Loaded " + className + " from: " + classPath); } catch (ClassNotFoundException e) { System.out.println("Class " + className + " not found!"); } try { // Get access token and accountId ApiClient apiClient = new ApiClient("https://demo.docusign.net/restapi"); apiClient.setOAuthBasePath("account-d.docusign.com"); ArrayList<String> scopes = new ArrayList<String>(); scopes.add("signature"); scopes.add("impersonation"); scopes.add("envelope_read"); scopes.add("envelope_send"); scopes.add("envelope_write"); byte[] privateKeyBytes = Files.readAllBytes(Paths.get("/...../src/main/resources/privatekey")); OAuthToken oAuthToken = apiClient.requestJWTUserToken("*****", "*****", scopes, privateKeyBytes, 3600); String accessToken = oAuthToken.getAccessToken(); UserInfo userInfo = apiClient.getUserInfo(accessToken); apiClient.setAccessToken(accessToken, Long.valueOf("3600")); String accountId = userInfo.getAccounts().get(0).getAccountId(); // Check account association AccountsApi accountsApi = new AccountsApi(apiClient); AccountInformation accountInfo = accountsApi.getAccountInformation(accountId); // Create envelopeDefinition object EnvelopeDefinition envelope = new EnvelopeDefinition(); envelope.setEmailSubject("Please sign this document set"); envelope.setStatus("sent"); // Create tabs object SignHere signHere = new SignHere(); signHere.setDocumentId("1"); signHere.setPageNumber("1"); signHere.setXPosition("191"); signHere.setYPosition("148"); Tabs tabs = new Tabs(); tabs.setSignHereTabs(Arrays.asList(signHere)); // Set recipients Signer signer = new Signer(); signer.setEmail(signerEmail); signer.setName(signerName); signer.recipientId("1"); signer.setTabs(tabs); CarbonCopy cc = new CarbonCopy(); cc.setEmail(ccEmail); cc.setName(ccName); cc.recipientId("2"); Recipients recipients = new Recipients(); recipients.setSigners(Arrays.asList(signer)); recipients.setCarbonCopies(Arrays.asList(cc)); envelope.setRecipients(recipients); // Add document Document document = new Document(); document.setDocumentBase64("VGhhbmtzIGZvciByZXZpZXdpbmcgdGhpcyEKCldlJ2xsIG1vdmUgZm9yd2FyZCBhcyBzb29uIGFzIHdlIGhlYXIgYmFjay4="); document.setName("doc1.txt"); document.setFileExtension("txt"); document.setDocumentId("1"); envelope.setDocuments(Arrays.asList(document)); // Send envelope apiClient.addDefaultHeader("Authorization", "Bearer " + accessToken); EnvelopesApi envelopesApi = new EnvelopesApi(apiClient); EnvelopeSummary results = envelopesApi.createEnvelope(accountId, envelope); System.out.println("Successfully sent envelope with envelopeId " + results.getEnvelopeId()); } catch (ApiException exp) { if (exp.getMessage().contains("consent_required")) { try { System.out.println("Consent required, please provide consent in browser window and then run this app again."); //Desktop.getDesktop().browse(new URI("https://account-d.docusign.com/oauth/auth?response_type=code&scope=impersonation%20signature&client_id=" + prop.getProperty("clientId") + "&redirect_uri=" + DevCenterPage)); } catch (Exception e) { System.out.print("Error!!! "); System.out.print(e.getMessage()); } } } catch (Exception e) { System.out.print("Error!!! "); System.out.print(e.getMessage()); } } }
下载文档代码(除调用下载接口外与创建信封代码一致)
package com.sripy.demo; import com.docusign.esign.api.AccountsApi; import com.docusign.esign.api.EnvelopesApi; import com.docusign.esign.client.ApiClient; import com.docusign.esign.client.ApiException; import com.docusign.esign.client.auth.OAuth.OAuthToken; import com.docusign.esign.client.auth.OAuth.UserInfo; import com.docusign.esign.model.*; import java.io.*; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; /** * Starter class for JWTConsoleApp application. */ public class JWTConsoleAppDownloadDocument { static String DevCenterPage = "https://developers.docusign.com/platform/auth/consent"; /** * Application entry point. * * @param args application command line arguments */ public static void main(String[] args) throws IOException { String signerEmail = "******@yahoo.com"; String signerName = "sriram sundararajan"; String ccEmail = "******@gmail.com"; String ccName = "John Doe"; try { // Get access token and accountId ApiClient apiClient = new ApiClient("https://demo.docusign.net/restapi"); apiClient.setOAuthBasePath("account-d.docusign.com"); ArrayList<String> scopes = new ArrayList<String>(); scopes.add("signature"); scopes.add("impersonation"); scopes.add("envelope_read"); scopes.add("envelope_send"); scopes.add("envelope_write"); byte[] privateKeyBytes = Files.readAllBytes(Paths.get("/...../src/main/resources/private.key")); OAuthToken oAuthToken = apiClient.requestJWTUserToken("******", "*******", scopes, privateKeyBytes, 3600); String accessToken = oAuthToken.getAccessToken(); UserInfo userInfo = apiClient.getUserInfo(accessToken); apiClient.setAccessToken(accessToken, Long.valueOf("3600")); String accountId = userInfo.getAccounts().get(0).getAccountId(); String envelopeId = "3e07c8c9-7db7-47c4-a83f-f03bf229f7f7"; downloadDoc(apiClient, envelopeId, accountId); } catch (ApiException exp) { if (exp.getMessage().contains("consent_required")) { try { System.out.println("Consent required, please provide consent in browser window and then run this app again."); //Desktop.getDesktop().browse(new URI("https://account-d.docusign.com/oauth/auth?response_type=code&scope=impersonation%20signature&client_id=" + prop.getProperty("clientId") + "&redirect_uri=" + DevCenterPage)); } catch (Exception e) { System.out.print("Error!!! "); System.out.print(e.getMessage()); } } } catch (Exception e) { System.out.print("Error!!! "); System.out.print(e.getMessage()); } } private static void downloadDoc(ApiClient apiClient, String envelopeId, String accountId) { EnvelopesApi envelopesApi = new EnvelopesApi(apiClient); try { Envelope envelope = envelopesApi.getEnvelope(accountId, envelopeId); System.out.println(envelope.getAnySigner()); byte[] results = envelopesApi.getDocument(accountId, envelopeId, "33"); String dirPathString = "/...../src/main/resources/"; String fileName = "DocuSign_POC_Signer_final.pdf"; File f = new File(dirPathString + fileName); OutputStream os = new FileOutputStream(f); // Starting writing the bytes in it os.write(results); } catch (ApiException e) { throw new RuntimeException(e); } catch (FileNotFoundException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } System.out.println("Downloaded successfully"); } }
内容的提问来源于stack exchange,提问作者user3453814
相关产品推荐
相关产品推荐

