You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:32:08