Swift
Swift
Send DocuSign XML Request
See more HTTP Misc Examples
Demonstrates how to send a DocuSign XML request.Chilkat Swift Downloads
func chilkatTest() {
var success: Bool = false
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
let req = CkoHttpRequest()!
req.httpVerb = "POST"
// Replace "12999999" with your own account number. (12999999 is a ficticious account number)
req.path = "/restapi/v2/accounts/12999999/envelopes"
req.addHeader(name: "Accept", value: "application/xml")
// Don't worry about the boundary string. Chilkat will automatically generate one and include it.
req.contentType = "multipart/form-data"
let xmlCred = CkoXml()!
xmlCred.tag = "DocuSignCredentials"
xmlCred.updateChildContent(tagPath: "Username", value: "YOUR_DOCUSIGN_USERNAME")
xmlCred.updateChildContent(tagPath: "Password", value: "YOUR_DOCUSIGN_PASSWORD")
xmlCred.updateChildContent(tagPath: "IntegratorKey", value: "ABCD-12345678-1234-AAAA-BBBB-abcdabcdabcd")
xmlCred.emitXmlDecl = false
xmlCred.emitCompact = true
req.addHeader(name: "X-DocuSign-Authentication", value: xmlCred.getXml())
// Don't worry about Host or Content-Length headers, Chilkat automatically adds them...
// Build the XML for the 1st body part..
let xml = CkoXml()!
xml.tag = "envelopeDefinition"
xml.addAttribute(name: "xmlns", value: "http://www.docusign.com/restapi")
xml.updateChildContent(tagPath: "emailSubject", value: "Signature Request: Test Test:001019:033611")
xml.updateChildContent(tagPath: "status", value: "sent")
xml.updateChildContent(tagPath: "documents|document|documentId", value: "1")
xml.updateChildContent(tagPath: "documents|document|name", value: "001019_TestTest_RetailDeals_163357")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|hostEmail", value: "admin@chilkatsoft.com")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|hostName", value: "Chilkat Admin")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|signerName", value: "Test Test")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|recipientId", value: "1")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|routingOrder", value: "1")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|signerEmail", value: "test@tyest.com")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|anchorIgnoreIfNotPresent", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|anchorString", value: "\\SDP")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|optional", value: "False")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|anchorIgnoreIfNotPresent", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|anchorString", value: "\\OSDP")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|optional", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|anchorIgnoreIfNotPresent", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|anchorString", value: "\\OPSSDP")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|optional", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|scaleValue", value: "0.7")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|anchorIgnoreIfNotPresent", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|anchorString", value: "\\PSSDP")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|optional", value: "False")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|scaleValue", value: "0.7")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|anchorIgnoreIfNotPresent", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|anchorString", value: "\\IDP")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|optional", value: "False")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|anchorIgnoreIfNotPresent", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|anchorString", value: "\\OIDP")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|optional", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|anchorIgnoreIfNotPresent", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|anchorString", value: "\\OPSIDP")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|optional", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|scaleValue", value: "0.5")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|anchorIgnoreIfNotPresent", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|anchorString", value: "\\PSIDP")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|optional", value: "False")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|scaleValue", value: "0.5")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|hostEmail", value: "admin@chilkatsoft.com")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|hostName", value: "Chilkat Admin")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|signerName", value: "Dealer Representative")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|recipientId", value: "2")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|routingOrder", value: "2")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|anchorIgnoreIfNotPresent", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|anchorString", value: "\\DSDP")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|optional", value: "False")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|anchorIgnoreIfNotPresent", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|anchorString", value: "\\DOSDP")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|optional", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|anchorIgnoreIfNotPresent", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|anchorString", value: "\\DIDP")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|optional", value: "False")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|anchorIgnoreIfNotPresent", value: "True")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|anchorString", value: "\\DOIDP")
xml.updateChildContent(tagPath: "recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|optional", value: "True")
xml.emitXmlDecl = false
print("\(xml.getXml()!)")
xml.emitCompact = true
req.addString(forUpload2: "", filename: "", strData: xml.getXml(), charset: "utf-8", contentType: "application/xml")
req.addFile(forUpload2: "", path: "qa_data/pdf/signatureForm.pdf", contentType: "application/pdf")
req.addSubHeader(index: 1, name: "Content-Disposition", value: "file; filename=\"signatureForm.pdf\";documentid=1")
let http = CkoHttp()!
http.sessionLogFilename = "qa_output/log.txt"
let resp = CkoHttpResponse()!
success = http.httpSReq(domain: "na2.docusign.net", port: 443, ssl: true, request: req, response: resp)
if success == false {
print("\(http.lastErrorText!)")
return
}
if resp.statusCode.intValue != 201 {
print("\(resp.bodyStr!)")
print("Response status code: \(resp.statusCode.intValue)")
print("Failed.")
return
}
// Examine the response..
xml.load(xmlData: resp.bodyStr)
var envelopeId: String? = xml.getChildContent(tagPath: "envelopeId")
print("envelopeId = \(envelopeId!)")
var status: String? = xml.getChildContent(tagPath: "status")
print("status = \(status!)")
var statusDateTime: String? = xml.getChildContent(tagPath: "statusDateTime")
print("statusDateTime = \(statusDateTime!)")
var uri: String? = xml.getChildContent(tagPath: "uri")
print("uri = \(uri!)")
}