Docusign:尝试从 UI5 应用程序的模板 ID 创建信封时出现 400 错误 "Unable to parse multipart body"

Docusign : 400 Error "Unable to parse multipart body" when trying to create envelope from Template ID from UI5 application

我们正在尝试弄清楚 Docusign 是否可以用于满足我们客户要求的生产方案。

我们有一个 UI5 应用程序,将用于签署文档。我们在 Docusign.

的演示实例中创建了一个模板

然而,当我们尝试从应用程序创建信封时,我们得到 400 Error Unable to parse multipart body。现在,在 POSTMAN 应用程序中使用相同的有效负载会导致成功创建信封。传的headers也是一样

在 Ui5 应用中:

var settings = {
                "async": true,
                "crossDomain": true,
                "url": "/docusign/envelopes",
                "method": "POST",
                "timeout": 0,
                "headers": {
                    "Authorization": "User DnVj27euWrCi4ANoMV5puvxVxYAcUCG3PlkUSpWpC08=, Organization 6ba64ce816dec995b17d04605e329a30, Element X4XuUq/T5UUh2o9xwaamZCCRwOKUCPr1Kv1Nj+qHPj0=",
                    "Content-Type": "application/json"
                },
                "data": JSON.stringify({
                    "status": "sent",
                    "compositeTemplates": [{
                        "compositeTemplateId": "1",
                        "inlineTemplates": [{
                            "recipients": {
                                "signers": [{
                                    "email": "johndoe@testmail.com",
                                    "name": "John Doe",
                                    "recipientId": "1",
                                    "roleName": "Signer",
                                    "clientUserId": "12345",
                                    "tabs": {
                                        "textTabs": [{
                                            "tabLabel": "firstName",
                                            "value": "John"
                                        }, {
                                            "tabLabel": "lastName",
                                            "value": "Doe"
                                        }, {
                                            "tabLabel": "phoneNo",
                                            "value": "022-635363"
                                        }, {
                                            "tabLabel": "email",
                                            "value": "test@gmail.com"
                                        }]
                                    }
                                }]
                            },
                            "sequence": "1"
                        }],
                        "serverTemplates": [{
                            "sequence": "1",
                            "templateId": "0bf97611-a457-4e8e-ac7e-1593c17ba3f6"
                        }]
                    }]
                })
            };
    var deferred = $.Deferred();
            $.ajax(settings).done(function (response) {
                deferred.resolve(response);
            }.bind(this)).fail(function (error) {
                deferred.reject(error);
            }.bind(this));

在邮递员中:

如果能帮助解决这个问题,我们将不胜感激。

你能否在 json 设置之外进行字符串化,或许在将所有内容放入设置之前将你的调用分解一下。

即尝试重新调整您的 jquery ajax 调用:

var headers = {"Authorization": "User DnVj27euWrCi4ANoMV5puvxVxYAcUCG3PlkUSpWpC08=, Organization 6ba64ce816dec995b17d04605e329a30, Element X4XuUq/T5UUh2o9xwaamZCCRwOKUCPr1Kv1Nj+qHPj0=", "Content-Type": "application/json" };
var payload = JSON.stringify({
                "status": "sent",
                "compositeTemplates": [{
                    "compositeTemplateId": "1",
                    "inlineTemplates": [{
                        "recipients": {
                            "signers": [{
                                "email": "johndoe@testmail.com",
                                "name": "John Doe",
                                "recipientId": "1",
                                "roleName": "Signer",
                                "clientUserId": "12345",
                                "tabs": {
                                    "textTabs": [{
                                        "tabLabel": "firstName",
                                        "value": "John"
                                    }, {
                                        "tabLabel": "lastName",
                                        "value": "Doe"
                                    }, {
                                        "tabLabel": "phoneNo",
                                        "value": "022-635363"
                                    }, {
                                        "tabLabel": "email",
                                        "value": "test@gmail.com"
                                    }]
                                }
                            }]
                        },
                        "sequence": "1"
                    }],
                    "serverTemplates": [{
                        "sequence": "1",
                        "templateId": "0bf97611-a457-4e8e-ac7e-1593c17ba3f6"
                    }]
                }]
            });
$.ajax({
  "async": true,
  "crossDomain": true,
  "url": "/docusign/envelopes",
  "method": "POST",
  "timeout": 0,
  "headers": headers,
  "data": payload
});

我相信这会引导您找到最终的 "consolidated" 答案。

如果从 Postman 和 UI5 应用程序发送 完全相同 JSON,那么您会得到相同的结果。但你不是,所以有些不同。

可能 UI5 系统将 API 作为 MIME 多部分请求发送,但未正确设置 JSON 请求部分的内容类型。

验证:使用 DocuSign API logger 查看 DocuSign 收到的内容。比较从 UI5 和 Postman 发送的请求。

解决方法:您需要设置额外的 UI5 参数,这样请求就不会作为多部分 MIME 消息发送。或者发送包含所需设置的多部分消息。见 docs and see a multi-part example.

PS 请 post 回答您的问题并提供问题的解决方案(一旦您找到它),以便将来帮助其他人。谢谢!!

我能够通过直接使用 Docusign API (https://demo.docusign.net/restapi/v2/accounts) 来解决问题。我之前使用 SAP Openconnector 连接到 Docusign。 https://api.openconnectors.eu3.ext.hanatrial.ondemand.com/elements/api-v2

感谢大家的帮助。