Zig Requires Chilkat v11.0.0+
Zig
Send DocuSign XML Request
See more HTTP Misc Examples
Demonstrates how to send a DocuSign XML request.Chilkat Zig Downloads
const std = @import("std");
const chilkat = @import("chilkat");
pub fn main(init: std.process.Init) !void {
const alloc = init.arena.allocator();
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
const req = try chilkat.HttpRequest.init();
defer req.deinit();
req.setHttpVerb("POST");
// Replace "12999999" with your own account number. (12999999 is a ficticious account number)
req.setPath("/restapi/v2/accounts/12999999/envelopes");
req.addHeader("Accept", "application/xml");
// Don't worry about the boundary string. Chilkat will automatically generate one and include it.
req.setContentType("multipart/form-data");
const xml_cred = try chilkat.Xml.init();
defer xml_cred.deinit();
xml_cred.setTag("DocuSignCredentials");
xml_cred.updateChildContent("Username", "YOUR_DOCUSIGN_USERNAME");
xml_cred.updateChildContent("Password", "YOUR_DOCUSIGN_PASSWORD");
xml_cred.updateChildContent("IntegratorKey", "ABCD-12345678-1234-AAAA-BBBB-abcdabcdabcd");
xml_cred.setEmitXmlDecl(false);
xml_cred.setEmitCompact(true);
req.addHeader("X-DocuSign-Authentication", try xml_cred.getXml(alloc));
// Don't worry about Host or Content-Length headers, Chilkat automatically adds them...
// Build the XML for the 1st body part..
const xml = try chilkat.Xml.init();
defer xml.deinit();
xml.setTag("envelopeDefinition");
xml.addAttribute("xmlns", "http://www.docusign.com/restapi") catch {};
xml.updateChildContent("emailSubject", "Signature Request: Test Test:001019:033611");
xml.updateChildContent("status", "sent");
xml.updateChildContent("documents|document|documentId", "1");
xml.updateChildContent("documents|document|name", "001019_TestTest_RetailDeals_163357");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|hostEmail", "admin@chilkatsoft.com");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|hostName", "Chilkat Admin");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|signerName", "Test Test");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|recipientId", "1");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|routingOrder", "1");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|signerEmail", "test@tyest.com");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|anchorIgnoreIfNotPresent", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|anchorString", "\\SDP");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere|optional", "False");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|anchorIgnoreIfNotPresent", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|anchorString", "\\OSDP");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[1]|optional", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|anchorIgnoreIfNotPresent", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|anchorString", "\\OPSSDP");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|optional", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[2]|scaleValue", "0.7");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|anchorIgnoreIfNotPresent", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|anchorString", "\\PSSDP");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|optional", "False");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|signHereTabs|signHere[3]|scaleValue", "0.7");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|anchorIgnoreIfNotPresent", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|anchorString", "\\IDP");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere|optional", "False");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|anchorIgnoreIfNotPresent", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|anchorString", "\\OIDP");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[1]|optional", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|anchorIgnoreIfNotPresent", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|anchorString", "\\OPSIDP");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|optional", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[2]|scaleValue", "0.5");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|anchorIgnoreIfNotPresent", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|anchorString", "\\PSIDP");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|optional", "False");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner|tabs|initialHereTabs|initialHere[3]|scaleValue", "0.5");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|hostEmail", "admin@chilkatsoft.com");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|hostName", "Chilkat Admin");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|signerName", "Dealer Representative");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|recipientId", "2");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|routingOrder", "2");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|anchorIgnoreIfNotPresent", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|anchorString", "\\DSDP");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere|optional", "False");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|anchorIgnoreIfNotPresent", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|anchorString", "\\DOSDP");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|tabs|signHereTabs|signHere[1]|optional", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|anchorIgnoreIfNotPresent", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|anchorString", "\\DIDP");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere|optional", "False");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|anchorIgnoreIfNotPresent", "True");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|anchorString", "\\DOIDP");
xml.updateChildContent("recipients|inPersonSigners|inPersonSigner[1]|tabs|initialHereTabs|initialHere[1]|optional", "True");
xml.setEmitXmlDecl(false);
std.debug.print("{s}\n", .{try xml.getXml(alloc)});
xml.setEmitCompact(true);
req.addStringForUpload2("", "", try xml.getXml(alloc), "utf-8", "application/xml") catch {};
req.addFileForUpload2("", "qa_data/pdf/signatureForm.pdf", "application/pdf") catch {};
req.addSubHeader(1, "Content-Disposition", "file; filename=\"signatureForm.pdf\";documentid=1") catch {};
const http = try chilkat.Http.init();
defer http.deinit();
http.setSessionLogFilename("qa_output/log.txt");
const resp = try chilkat.HttpResponse.init();
defer resp.deinit();
http.httpSReq("na2.docusign.net", 443, true, req, resp) catch {
std.debug.print("{s}\n", .{try http.getLastErrorText(alloc)});
return;
};
if (resp.getStatusCode() != 201) {
std.debug.print("{s}\n", .{try resp.getBodyStr(alloc)});
std.debug.print("Response status code: {d}\n", .{resp.getStatusCode()});
std.debug.print("Failed.\n", .{});
return;
}
// Examine the response..
xml.loadXml(try resp.getBodyStr(alloc)) catch {};
const envelope_id = try xml.getChildContent(alloc, "envelopeId");
std.debug.print("envelopeId = {s}\n", .{envelope_id});
const status = try xml.getChildContent(alloc, "status");
std.debug.print("status = {s}\n", .{status});
const status_date_time = try xml.getChildContent(alloc, "statusDateTime");
std.debug.print("statusDateTime = {s}\n", .{status_date_time});
const uri = try xml.getChildContent(alloc, "uri");
std.debug.print("uri = {s}\n", .{uri});
}