postman Docusign:400尝试从UI5应用程序的模板ID创建信封时出现错误“无法解析多部分正文”

mwg9r5ms  于 2022-11-07  发布在  Postman
关注(0)|答案(4)|浏览(197)

我们正在尝试弄清楚Docusign是否可以在生产场景中使用,以满足客户的需求。
我们有一个用于签署文档的UI5应用程序。我们已经在Docusign的演示示例中创建了一个模板。
然而,当我们尝试从应用程序创建信封时,我们得到的是400 ErrorUnable to parse multipart body。现在,当在POSTMAN应用程序中使用相同的有效负载时,信封会成功创建。传递的标头也是相同的。
在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));

Postman :

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

rdlzhqv9

rdlzhqv91#

你能不能在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
});

我相信这将引导您得出最终的“综合”答案。

bxjv4tth

bxjv4tth2#

如果从Postman和UI 5应用程序发送完全相同的JSON,那么您将得到相同的结果,但是您不是,所以有些不同。
可能UI 5系统将API作为mime多部分请求发送,但没有正确设置JSON请求部分的内容类型。
验证:使用DocuSign API logger查看DocuSign接收的内容。比较UI 5和Postman发送的请求。
修复方法:您需要设置额外的UI 5参数,这样请求就不会以多部分MIME消息的形式发送。或者发送带有所需设置的多部分消息。请参阅文档并查看multi-part example
PS:请把你的问题的答案和你的问题的解决方案(一旦你找到了)贴出来,以帮助其他人在未来。谢谢!!

fae0ux8s

fae0ux8s3#

我能够直接使用Docusign API(https://demo.docusign.net/restapi/v2/accounts)修复此问题。我之前使用SAP Openconnector连接到Docusign。https://api.openconnectors.eu3.ext.hanatrial.ondemand.com/elements/api-v2
谢谢大家的帮助。

gojuced7

gojuced74#

最近我也遇到了同样的问题,几乎决定给予,但最后,我设法找到了一种方法来解决它!问题是,您需要以下面的方式执行 AJAX 调用:

_createEnvelops: function () {
            var deferred = $.Deferred();

            var oTemplateData = this._getTemplateData();
            var oFormData = new FormData();
            oFormData.append('envelope', JSON.stringify(oTemplateData));

            var settings = {
                "async": true,
                "crossDomain": true,
                "url": '/docusign/envelopes',
                "method": "POST",
                "data": oFormData,
                processData: false,
                contentType: false,
                "headers": {
                    "Authorization": sAuthToken
                }
            };

            $.ajax(settings).done(function (response) {
                deferred.resolve(response);
            }.bind(this)).fail(function (error) {
                deferred.reject(error);
            }.bind(this));

            return deferred;
        },

也许它将来会对某人有用;)

相关问题