DocuSign Rest API отправляет конверт с использованием составного шаблона

У меня есть составной шаблон, который я использую для отправки следующего:

  1. 1 документ для подписи
  2. Еще один документ, который не требует подписи, но включен
  3. Документ хранится в шаблоне

Я получаю эту ошибку: Ошибка при выполнении веб-запроса. { "errorCode": "UNSPECIFIED_ERROR", "message": "Недопустимая длина для массива или строки Base-64 char." Я проверил, что Base64 кратно 4. Я думаю, что проблема в том, что у меня нет нужного типа контента. Я использую Nintex и SharePoint для отправки API остальных в DocuSign.

Тип содержимого: multipart/form-data;border =MY_BOUNDARY

Accept: application/json
Host: na2.docusign.net


--MY_BOUNDARY
Content-Type: application/json
Content-Disposition: form-data

{
"emailSubject": "Contract Package for {ItemProperty:Title}",
"status" : "sent",
"compositeTemplates": [
{
"inlineTemplates": [
    {
        "sequence" : 2,
        "recipients": {
            "signers" : [
            {
                "email": "{WorkflowVariable:varCreatedByEmail}",
                "name": "{WorkflowVariable:varCreatedByName}",
                "recipientId": "1",
                "roleName": "MI Employee",
                "routingOrder": "1",
                "tabs":
                    {"signerAttachmentTabs": [
                        {"anchorString": "/ea1/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0",
                            "tabLabel": "Scope of Work Attachment",
                            "optional": "true",
                            "tabOrder": 1},
                        {"anchorString": "/ea2/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0",
                            "tabLabel": "Pricing Attachment",
                            "optional": "true",
                            "tabOrder": 3}],
                    "textTabs":[
                        {"anchorString": "/ec1/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0",
                            "tabLabel": "Scope of Work Text",
                            "disableAutoSize": true,
                            "width": 550,
                            "height": 220,
                            "tabOrder": 2},
                        {"anchorString": "/ec2/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0",
                            "tabLabel": "Pricing Text",
                            "disableAutoSize": true,
                            "width": 550,
                            "height": 220,
                            "tabOrder": 4}]
                    }
            },
            {
                "email": "{ItemProperty:E_x002d_Mail}",
                "name": "{ItemProperty:Primary_x0020_Contact}",
                "recipientId": "2",
                "roleName": "Vendor",
                "routingOrder": "2",
                "tabs": 
                    {"fullNameTabs": [
                        {"anchorString": "/vn/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0"}]
                ,
                    "signHereTabs":[
                        {"anchorString": "/vs/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0"}]
                ,
                    "dateSignedTabs":[
                        {"anchorString": "/dvs/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0"}]
                ,
                    "initialHereTabs":[
                        {"anchorString": "/vi/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0"}]
                ,
                    "titleTabs":[
                        {"anchorString": "/vt/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0"}]
                ,
                    "emailAddressTabs":[
                        {"anchorString": "/ve/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0"}]
                ,
                    "textTabs":[
                        {"anchorString": "/va1/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0",
                            "tabLabel": "Address Line 1"},
                        {"anchorString": "/va2/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0",
                            "tabLabel": "Address Line 2",
                            "required": false},
                        {"anchorString": "/va3/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0",
                            "tabLabel": "Address Line 3",},
                        {"anchorString": "/vc/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0",
                            "tabLabel": "Vendor Name",
                            "disableAutoSize": true,
                            "width": 225,
                            "height": 32}]
                    }   
            },
            {
                "email": "{WorkflowVariable:varContractApproverEmail}",
                "name": "{WorkflowVariable:varContractApproverName}",
                "recipientId": "3",
                "roleName": "MI Approver",
                "routingOrder": "3",
                "tabs":
                    {"signHereTabs":[
                        {"anchorString": "/as/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0"}]
                ,
                    "dateSignedTabs":[
                        {"anchorString": "/das/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0"}]
                ,
                    "fullNameTabs":[
                        {"anchorString": "/an/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0"}]
                ,
                    "titleTabs":[
                        {"anchorString": "/at/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0"}]
                ,
                    "emailAddressTabs":[
                        {"anchorString": "/ae/",
                            "anchorXOffset": "1",
                            "anchorYOffset": "0"}]
                    }
            }           ]
                    }
    }               ],
    "document": {
        "documentId": 1,
        "name": "{WorkflowVariable:varContractName}",
        "documentbase64": "{WorkflowVariable:varContractBase64}"
    }
},
{
"inlineTemplates": [
    {
        "sequence" : 3,
        "recipients": {
            "carbonCopies" : [
            {
                "email": "{WorkflowVariable:varCreatedByEmail}",
                "name": "{Common:InitiatorsDisplayName}",
                "recipientId": "1",
                "roleName": "MI Employee",
                "routingOrder": "1"
            },
            {
                "email": "{ItemProperty:E_x002d_Mail}",
                "name": "{ItemProperty:Primary_x0020_Contact}",
                "recipientId": "2",
                "roleName": "Vendor",
                "routingOrder": "2"
            },
            {
                "email": "{WorkflowVariable:varContractApproverEmail}",
                "name": "{WorkflowVariable:varContractApproverName}",
                "recipientId": "3",
                "roleName": "MI Approver",
                "routingOrder": "3"
            }]
        }
    }],
    "document": {
        "documentId": 2,
        "name": "{WorkflowVariable:varExhibitAName}",
        "documentbase64": "{WorkflowVariable:varExhibitABase64}"
    }
},
{
    "serverTemplates": [
    {
        "sequence" : 6,
        "templateId": "D7472F81-46F9-4BEB-9017-DFAD3C0BCE83"
    }],
    "inlineTemplates": [
    {
        "sequence" : 7,
        "recipients": {
            "signers" : [{
                "email": "{WorkflowVariable:varCreatedByEmail}",
                "name": "{Common:InitiatorsDisplayName}",
                "recipientId": "1",
                "roleName": "MI Employee",
                "routingOrder": "1"
            },
            {
                "email": "{ItemProperty:E_x002d_Mail}",
                "name": "{ItemProperty:Primary_x0020_Contact}",
                "recipientId": "2",
                "roleName": "Vendor",
                "routingOrder": "2",
                "tabs": {
                "textTabs": [
                {
                "tabLabel": "VendorName"}]}
            },
            {
                "email": "{WorkflowVariable:varContractApproverEmail}",
                "name": "{WorkflowVariable:varContractApproverName}",
                "recipientId": "3",
                "roleName": "MI Approver",
                "routingOrder": "3"
            }
            ]
        }
    }],
    "document": {
        "documentId": 4,
        "name": "CCare_Pledge.pdf"
    }
}]
}

--MY_BOUNDARY
Content-Type: application/pdf
Content-Disposition: file; filename="{WorkflowVariable:varContractName}";     documentid="1"

<document bytes removed>

--MY_BOUNDARY--
Content-Type: application/pdf
Content-Disposition: file; filename="{WorkflowVariable:varExhibitAName}";     documentid="2"

<document bytes removed>

--MY_BOUNDARY--
Content-Type: application/pdf
Content-Disposition: file; filename="CCare_Pledge.pdf"; documentid="4"

Ссылка на base64- http://www.mihomes.com/corp/vit/Base64.txt

1 ответ

Решение

При просмотре запроса, который вы разместили, несколько вещей бросаются в глаза:

Во-первых, вы неправильно указали граничный разделитель для части, которая определяет documentmentid=2 как " --MY_BOUNDARY-- "

--MY_BOUNDARY--
Content-Type: application/pdf
Content-Disposition: file; filename="{WorkflowVariable:varExhibitAName}";     documentid="2"

Включая - в конце этой граничной строки, вы указываете конец составного сообщения, так что вполне возможно, что DocuSign не считывает содержимое запроса, которое следует за этой строкой. Я бы предложил изменить это на " --MY_BOUNDARY"

Во-вторых, вы указываете байты документа несколько раз для двух документов (documentmentid=1 и documentmentid=2) - один раз как часть объекта документа (с использованием атрибута documentbase64) в каждом составном шаблоне и снова в дополнительных частях многочастного запроса. Я бы предложил удалить атрибут documentbase64 из объекта документа каждого объекта составного шаблона - он не нужен, если вы указываете байты документа в дополнительных частях составного сообщения.

Далее, если CCare_Pledge.pdf является первым документом, содержащимся в используемом вами шаблоне, то вы должны удалить атрибут документа (объект) из этого объекта составного шаблона:

"document": {
    "documentId": 4,
    "name": "CCare_Pledge.pdf"
}

А также удалите заключительную часть запроса:

--MY_BOUNDARY--
Content-Type: application/pdf
Content-Disposition: file; filename="CCare_Pledge.pdf"; documentid="4"

В этом нет необходимости, поскольку документ поступает из самого шаблона, поэтому вам не нужно указывать информацию о документе в запросе.

Наконец, убедитесь, что ваш запрос заканчивается правильной строкой ограничителя границы:

--MY_BOUNDARY--

(Ответ на этот другой пост показывает хороший пример общей структуры запроса в отношении разделителей границ.)

После того, как вы внедрили эти предлагаемые изменения, ваша структура запроса должна выглядеть следующим образом:

--MY_BOUNDARY
Content-Type: application/json
Content-Disposition: form-data

{
    "emailSubject": "Contract Package for {ItemProperty:Title}",
    "status" : "sent",
    "compositeTemplates": [
        {
            "inlineTemplates": [
                {
                    "sequence" : 2,
                    "recipients": {
                        ...
                    }
                }
            ],
            "document": {
                "documentId": 1,
                "name": "{WorkflowVariable:varContractName}"
            }
        },
        {
            "inlineTemplates": [
                {
                    "sequence" : 3,
                    "recipients": {
                        ...
                    }
                }
            ],
            "document": {
                "documentId": 2,
                "name": "{WorkflowVariable:varExhibitAName}"
            }
        },
        {
            "serverTemplates": [
                {
                    "sequence" : 6,
                    "templateId": "D7472F81-46F9-4BEB-9017-DFAD3C0BCE83"
                }
            ],
            "inlineTemplates": [
                {
                    "sequence" : 7,
                    "recipients": {
                        ...
                    }
                }
            ]
        }
    ]
}

--MY_BOUNDARY
Content-Type: application/pdf
Content-Disposition: file; filename="{WorkflowVariable:varContractName}"; documentid="1"

<document bytes removed>

--MY_BOUNDARY
Content-Type: application/pdf
Content-Disposition: file; filename="{WorkflowVariable:varExhibitAName}"; documentid="2"

<document bytes removed>

--MY_BOUNDARY--
Другие вопросы по тегам