使用Chilkat dll的DocuSign,如何在json中传递templateRoles?

问题描述

我正在创建演示应用程序,该应用程序动态地通过文件和签名者进行Docusing传递,为此,我需要使用docusign templateid并传递详细信息,我可以使用已在模板本身中定义的签名者的templateid传递文件,现在我想将多个签名者作为动态。为此,需要使用templateRoles。

 Dim json As New Chilkat.JsonObject
    json.UpdateString("documents[0].name","Testing.pdf")
    json.UpdateString("documents[0].documentBase64",base64String)
    json.UpdateString("documents[0].documentId","2")
    json.UpdateString("emailSubject","DocuSign REST API Testing Sample")
    json.UpdateString("emailBlurb","Create and send an envelope from a document.")
    json.UpdateString("templateId","xxxxx-xxxxx-xxxxx-xxxx-xxxx")
    json.UpdateString("templateRoles","{roleName: Signer 1,name: Aravind,email: aravi[email protected],recipientId: 1}") ' Here i pass template role for signer 1,and also need to pass multiple signer.
    json.UpdateString("status","sent")

    rest.AddHeader("X-DocuSign-Authentication","{ ""Username"":    ""[email protected]"",""Password"":""DocuSign_password"",""IntegratorKey"":""DocuSign_Integrator_Key"" }")
     

    rest.AddHeader("Content-Type","application/json")
    rest.AddHeader("Accept","application/json")

    Dim sbRequestBody As New Chilkat.StringBuilder
    json.EmitSb(sbRequestBody)


    Dim sbResponseBody As New Chilkat.StringBuilder

    success = rest.FullRequestSb("POST","/restapi/v2.1/accounts/xxxxxx/envelopes",sbRequestBody,sbResponseBody)
    Dim respStatusCode As Integer = rest.ResponseStatusCode

在这里我粘贴代码以供您参考,在该电子邮件密码,密钥中,我将其更改为安全目的。 当我使用带有值的templateroles传递错误时,对于上面的代码,我从api返回以下错误

“ errorCode”:“ INVALID_REQUEST_ParaMETER”,“ message”:“请求 包含至少一个无效参数。未设置“ recipientId” 收件人。”

请帮助我解决错误

关于, Aravind

解决方法

以下是使用SDK的代码:

Imports System
Imports System.Collections.Generic
Imports DocuSign.eSign.Api
Imports DocuSign.eSign.Client
Imports DocuSign.eSign.Model
Imports Microsoft.AspNetCore.Mvc


    Private Function DoWork(ByVal signerEmail As String,ByVal signerName As String,ByVal ccEmail As String,ByVal ccName As String,ByVal accessToken As String,ByVal basePath As String,ByVal accountId As String,ByVal templateId As String) As String
        Dim config = New Configuration(New ApiClient(basePath))
        config.AddDefaultHeader("Authorization","Bearer " & accessToken)
        Dim envelopesApi As EnvelopesApi = New EnvelopesApi(config)
        Dim envelope As EnvelopeDefinition = MakeEnvelope(signerEmail,signerName,ccEmail,ccName,templateId)
        Dim result As EnvelopeSummary = envelopesApi.CreateEnvelope(accountId,envelope)
        Return result.EnvelopeId
    End Function

Private Function MakeEnvelope(ByVal signerEmail As String,ByVal signerName As String) As EnvelopeDefinition
    Dim buffer As Byte() = System.IO.File.ReadAllBytes(Config.docPdf)
    Dim envelopeDefinition As EnvelopeDefinition = New EnvelopeDefinition()
    envelopeDefinition.EmailSubject = "Please sign this document"
    Dim doc1 As Document = New Document()
    Dim doc1b64 As String = Convert.ToBase64String(buffer)
    doc1.DocumentBase64 = doc1b64
    doc1.Name = "Lorem Ipsum"
    doc1.FileExtension = "pdf"
    doc1.DocumentId = "3"
    envelopeDefinition.Documents = New List(Of Document) From {
        doc1
    }
    Dim signer1 As Signer = New Signer With {
        .Email = signerEmail,.Name = signerName,.ClientUserId = signerClientId,.RecipientId = "1"
    }
    Dim signHere1 As SignHere = New SignHere With {
        .AnchorString = "/sn1/",.AnchorUnits = "pixels",.AnchorXOffset = "10",.AnchorYOffset = "20"
    }
    Dim signer1Tabs As Tabs = New Tabs With {
        .SignHereTabs = New List(Of SignHere) From {
            signHere1
        }
    }
    signer1.Tabs = signer1Tabs
    Dim recipients As Recipients = New Recipients With {
        .Signers = New List(Of Signer) From {
            signer1
        }
    }
    envelopeDefinition.Recipients = recipients
    envelopeDefinition.Status = "sent"
    Return envelopeDefinition
End Function
,

尝试从第8行的JSON中删除recipientId: 1

但是我强烈建议您重新考虑架构选择。 您正在使用不太安全的旧式身份验证。

您可以使用C#SDK,它是一个Nuget程序包,并且与VB.NET兼容,可以帮助您在不使用JSON的情况下进行这些调用,也可以使用更安全的现代OAuth。