Sample code for 30+ languages & platforms
PureBasic

Send DocuSign XML Request

See more HTTP Misc Examples

Demonstrates how to send a DocuSign XML request.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttp.pb"
IncludeFile "CkXml.pb"
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttpRequest.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    req.i = CkHttpRequest::ckCreate()
    If req.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHttpRequest::setCkHttpVerb(req, "POST")

    ; Replace "12999999" with your own account number. (12999999 is a ficticious account number)
    CkHttpRequest::setCkPath(req, "/restapi/v2/accounts/12999999/envelopes")

    CkHttpRequest::ckAddHeader(req,"Accept","application/xml")

    ; Don't worry about the boundary string.  Chilkat will automatically generate one and include it.
    CkHttpRequest::setCkContentType(req, "multipart/form-data")

    xmlCred.i = CkXml::ckCreate()
    If xmlCred.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkXml::setCkTag(xmlCred, "DocuSignCredentials")
    CkXml::ckUpdateChildContent(xmlCred,"Username","YOUR_DOCUSIGN_USERNAME")
    CkXml::ckUpdateChildContent(xmlCred,"Password","YOUR_DOCUSIGN_PASSWORD")
    CkXml::ckUpdateChildContent(xmlCred,"IntegratorKey","ABCD-12345678-1234-AAAA-BBBB-abcdabcdabcd")
    CkXml::setCkEmitXmlDecl(xmlCred, 0)
    CkXml::setCkEmitCompact(xmlCred, 1)
    CkHttpRequest::ckAddHeader(req,"X-DocuSign-Authentication",CkXml::ckGetXml(xmlCred))

    ; Don't worry about Host or Content-Length headers, Chilkat automatically adds them...

    ; Build the XML for the 1st body part..
    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkXml::setCkTag(xml, "envelopeDefinition")
    CkXml::ckAddAttribute(xml,"xmlns","http://www.docusign.com/restapi")
    CkXml::ckUpdateChildContent(xml,"emailSubject","Signature Request: Test Test:001019:033611")
    CkXml::ckUpdateChildContent(xml,"status","sent")
    CkXml::ckUpdateChildContent(xml,"documents|document|documentId","1")
    CkXml::ckUpdateChildContent(xml,"documents|document|name","001019_TestTest_RetailDeals_163357")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|hostEmail","admin@chilkatsoft.com")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|hostName","Chilkat Admin")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|signerName","Test  Test")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|recipientId","1")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|routingOrder","1")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|signerEmail","test@tyest.com")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|anchorIgnoreIfNotPresent","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|anchorString","\SDP")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|optional","False")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|anchorIgnoreIfNotPresent","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|anchorString","\OSDP")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|optional","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|anchorIgnoreIfNotPresent","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|anchorString","\OPSSDP")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|optional","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|scaleValue","0.7")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|anchorIgnoreIfNotPresent","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|anchorString","\PSSDP")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|optional","False")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|scaleValue","0.7")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|anchorIgnoreIfNotPresent","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|anchorString","\IDP")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|optional","False")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|anchorIgnoreIfNotPresent","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|anchorString","\OIDP")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|optional","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|anchorIgnoreIfNotPresent","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|anchorString","\OPSIDP")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|optional","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|scaleValue","0.5")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|anchorIgnoreIfNotPresent","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|anchorString","\PSIDP")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|optional","False")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|scaleValue","0.5")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|hostEmail","admin@chilkatsoft.com")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|hostName","Chilkat Admin")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|signerName","Dealer Representative")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|recipientId","2")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|routingOrder","2")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|anchorIgnoreIfNotPresent","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|anchorString","\DSDP")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|optional","False")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|anchorIgnoreIfNotPresent","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|anchorString","\DOSDP")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|optional","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|anchorIgnoreIfNotPresent","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|anchorString","\DIDP")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|optional","False")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|anchorIgnoreIfNotPresent","True")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|anchorString","\DOIDP")
    CkXml::ckUpdateChildContent(xml,"recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|optional","True")
    CkXml::setCkEmitXmlDecl(xml, 0)

    Debug CkXml::ckGetXml(xml)

    CkXml::setCkEmitCompact(xml, 1)

    CkHttpRequest::ckAddStringForUpload2(req,"","",CkXml::ckGetXml(xml),"utf-8","application/xml")
    CkHttpRequest::ckAddFileForUpload2(req,"","qa_data/pdf/signatureForm.pdf","application/pdf")
    CkHttpRequest::ckAddSubHeader(req,1,"Content-Disposition","file; filename=" + Chr(34) + "signatureForm.pdf" + Chr(34) + ";documentid=1")

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHttp::setCkSessionLogFilename(http, "qa_output/log.txt")

    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpSReq(http,"na2.docusign.net",443,1,req,resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttpRequest::ckDispose(req)
        CkXml::ckDispose(xmlCred)
        CkXml::ckDispose(xml)
        CkHttp::ckDispose(http)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    If CkHttpResponse::ckStatusCode(resp) <> 201
        Debug CkHttpResponse::ckBodyStr(resp)
        Debug "Response status code: " + Str(CkHttpResponse::ckStatusCode(resp))
        Debug "Failed."
        CkHttpRequest::ckDispose(req)
        CkXml::ckDispose(xmlCred)
        CkXml::ckDispose(xml)
        CkHttp::ckDispose(http)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    ; Examine the response..
    CkXml::ckLoadXml(xml,CkHttpResponse::ckBodyStr(resp))
    envelopeId.s = CkXml::ckGetChildContent(xml,"envelopeId")
    Debug "envelopeId = " + envelopeId
    status.s = CkXml::ckGetChildContent(xml,"status")
    Debug "status = " + status
    statusDateTime.s = CkXml::ckGetChildContent(xml,"statusDateTime")
    Debug "statusDateTime = " + statusDateTime
    uri.s = CkXml::ckGetChildContent(xml,"uri")
    Debug "uri = " + uri


    CkHttpRequest::ckDispose(req)
    CkXml::ckDispose(xmlCred)
    CkXml::ckDispose(xml)
    CkHttp::ckDispose(http)
    CkHttpResponse::ckDispose(resp)


    ProcedureReturn
EndProcedure