【问题标题】:Java Docusign AuthenticationJava Docusign 身份验证
【发布时间】:2019-02-13 09:06:23
【问题描述】:

我正在尝试使用 java 连接 docusign。 下面是我正在使用的代码。

public class DocuSignExample1 {

    private static final String Recipient = "xxx@gmail.com";
    private static final String SignTest1File = "/src/test/docs/SignTest1.pdf";
    private static final String BaseUrl = "https://demo.docusign.net/restapi";
    private static final String IntegratorKey = "xxxxx";
    private static final String UserId = "xxxxxx";
    private static final String privateKeyFullPath = System.getProperty("user.dir") + "/src/test/keys/docusign_private_key2.txt";
    public static void main(String[] args) {

        System.out.println("\nRequestASignatureTest:\n" + "===========================================");
        byte[] fileBytes = null;
        try {
            String currentDir = System.getProperty("user.dir");

            Path path = Paths.get(currentDir + SignTest1File);
            fileBytes = Files.readAllBytes(path);
        } catch (IOException ioExcp) {
            ioExcp.printStackTrace();
        }

        EnvelopeDefinition envDef = new EnvelopeDefinition();
        envDef.setEmailSubject("Please Sign My Sample Document");
        envDef.setEmailBlurb("Hello, Please Sign My Sample Document.");

        // add a document to the envelope
        Document doc = new Document();
        String base64Doc = Base64.encodeToString(fileBytes, false);
        doc.setDocumentBase64(base64Doc);
        doc.setName("TestFile.pdf");
        doc.setDocumentId("1");

        List<Document> docs = new ArrayList<Document>();
        docs.add(doc);
        envDef.setDocuments(docs);

        // Add a recipient to sign the document
        Signer signer = new Signer();
        signer.setEmail(Recipient);
        signer.setName("Sanjay");
        signer.setRecipientId("1");

        // Above causes issue
        envDef.setRecipients(new Recipients());
        envDef.getRecipients().setSigners(new ArrayList<Signer>());
        envDef.getRecipients().getSigners().add(signer);

        // send the envelope (otherwise it will be "created" in the Draft folder
        envDef.setStatus("sent");

        ApiClient apiClient = new ApiClient(BaseUrl);
        try {
            byte[] privateKeyBytes = null;
            try {
                privateKeyBytes = Files.readAllBytes(Paths.get(privateKeyFullPath));
            } catch (IOException ioExcp) {
                Assert.assertEquals(null, ioExcp);
            }
            if (privateKeyBytes == null)
                return;

            java.util.List<String> scopes = new ArrayList<String>();
            scopes.add(OAuth.Scope_SIGNATURE);

            OAuth.OAuthToken oAuthToken = apiClient.requestJWTUserToken(IntegratorKey, UserId, scopes, privateKeyBytes,
                    3600);
            Assert.assertNotSame(null, oAuthToken);
            // now that the API client has an OAuth token, let's use it in all
            // DocuSign APIs
            apiClient.setAccessToken(oAuthToken.getAccessToken(), oAuthToken.getExpiresIn());
            UserInfo userInfo = apiClient.getUserInfo(oAuthToken.getAccessToken());

            System.out.println("UserInfo: " + userInfo);

            apiClient.setBasePath(userInfo.getAccounts().get(0).getBaseUri() + "/restapi");
            Configuration.setDefaultApiClient(apiClient);
            String accountId = userInfo.getAccounts().get(0).getAccountId();

            EnvelopesApi envelopesApi = new EnvelopesApi();

            EnvelopeSummary envelopeSummary = envelopesApi.createEnvelope(accountId, envDef);
            System.out.println("EnvelopeSummary: " + envelopeSummary);
        } catch (ApiException ex) {
            ex.printStackTrace();
            System.out.println("Exception: " + ex);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Exception: " + e.getLocalizedMessage());
        }
    }
}

我正在从给定图像中复制客户端 ID 和集成密钥。

错误:请求访问令牌时出错:POST https://account-d.docusign.com/oauth/token 返回响应状态为 400 Bad Request

【问题讨论】:

    标签: java docusignapi


    【解决方案1】:

    通常,400 Bad Request 响应表明您发送的请求正文有问题或有关请求的其他格式错误。为了解决这个问题,我建议您在发送之前打印您的请求正文(即信封定义),以便您检查其内容并确保它是您所期望的。

    要发送信封,您至少需要电子邮件主题、文档、收件人和状态(设置为"sent")。

    当您以 JSON 格式打印请求正文时,它应该如下所示:

    {
        "emailSubject": "API Signature Request",
        "documents": [{
            "documentId": "1",
            "name": "contract.pdf",
            "documentBase64": "<...base64 document bytes...>",
        }],
        "recipients": {
            "signers": [{
                "email": "bob.smith@docusign.com",
                "name": "Bob Smith",
                "recipientId": "1",
                "routingOrder": "1",
            }]
        },
        "status": "sent"
    }
    

    【讨论】:

    • 在请求令牌期间生成错误。这一行给了我错误。 OAuth.OAuthToken oAuthToken = apiClient.requestJWTUserToken(IntegratorKey, UserId, scopes, privateKeyBytes, 3600);
    • 以上程序与 github.com/docusign/docusign-java-client/blob/master/src/test/… 完美配合。一旦我添加了我的凭据,它就不起作用了。
    【解决方案2】:

    从您对 Ergin 的回答的评论看来,您似乎没有完成 JWT 身份验证流程。

    我建议您从适用于您的语言的 DocuSign JWT Grant 代码示例开始:

    有关安装和配置说明,请参阅自述文件。

    一旦您能够通过 JWT 流程生成访问令牌,您就可以继续实现您的 DocuSign API 调用本身。

    【讨论】:

    【解决方案3】:

    在接受同意 400 错误消失后,我遇到了同样的问题。 您可以通过在浏览器中输入此 URL 来接受同意

    https://account-d.docusign.com/oauth/auth?response_type=token&scope=signature&client_id=<integrator key>&state=<random number to avoid request forgery>&redirect_uri=http://example.com/callback/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      • 2018-12-25
      • 2018-08-07
      • 1970-01-01
      相关资源
      最近更新 更多