Tcl
Tcl
DocuSign: Requesting a Signature via Email (Remote Signing)
See more DocuSign Examples
This code example demonstrates the simplest and quickest workflow for requesting a signature for a document via email. The email will contain a signing link the recipient can use to electronically sign a document from their mobile or desktop computer.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set http [new_CkHttp]
# Implements the following CURL command:
# curl --request POST https://demo.docusign.net/restapi/v2.1/accounts/${accountId}/envelopes \
# --header "Authorization: Bearer ${accessToken}" \
# --header "Content-Type: application/json" \
# --data '{
# "emailSubject": "Please sign this document",
# "documents": [
# {
# "documentBase64": "JVBERi0xLjMKMyAwIG9iag ... dGFydHhyZWYKNjk5CiUlRU9GCg==",
# "name": "Lorem Ipsum",
# "fileExtension": "pdf",
# "documentId": "1"
# }
# ],
# "recipients": {
# "signers": [
# {
# "email": "joe_sample@example.com",
# "name": "Joe Sample",
# "recipientId": "1",
# "routingOrder": "1",
# "tabs": {
# "signHereTabs": [
# {
# "documentId": "1", "pageNumber": "1",
# "recipientId": "1", "tabLabel": "SignHereTab",
# "xPosition": "195", "yPosition": "147"
# }
# ]
# }
# }
# ]
# },
# "status": "sent"
# }'
# Use this online tool to generate code from sample JSON:
# Generate Code to Create JSON
# The following JSON is sent in the request body.
# {
# "emailSubject": "Please sign this document",
# "documents": [
# {
# "documentBase64": "JVBERi0xLjMKMyAwIG9iag ... dGFydHhyZWYKNjk5CiUlRU9GCg==",
# "name": "Lorem Ipsum",
# "fileExtension": "pdf",
# "documentId": "1"
# }
# ],
# "recipients": {
# "signers": [
# {
# "email": "joe_sample@example.com",
# "name": "Joe Sample",
# "recipientId": "1",
# "routingOrder": "1",
# "tabs": {
# "signHereTabs": [
# {
# "documentId": "1",
# "pageNumber": "1",
# "recipientId": "1",
# "tabLabel": "SignHereTab",
# "xPosition": "195",
# "yPosition": "147"
# }
# ]
# }
# }
# ]
# },
# "status": "sent"
# }
# Load a PDF to be signed.
set pdfData [new_CkBinData]
set success [CkBinData_LoadFile $pdfData "qa_data/pdf/helloWorld.pdf"]
if {$success == 0} then {
puts "Failed to load local PDF file."
delete_CkHttp $http
delete_CkBinData $pdfData
exit
}
set json [new_CkJsonObject]
CkJsonObject_UpdateString $json "emailSubject" "Please sign this document"
CkJsonObject_UpdateString $json "documents[0].documentBase64" [CkBinData_getEncoded $pdfData "base64"]
CkJsonObject_UpdateString $json "documents[0].name" "Lorem Ipsum"
CkJsonObject_UpdateString $json "documents[0].fileExtension" "pdf"
CkJsonObject_UpdateString $json "documents[0].documentId" "1"
CkJsonObject_UpdateString $json "recipients.signers[0].email" "joe_sample@example.com"
CkJsonObject_UpdateString $json "recipients.signers[0].name" "Joe Sample"
CkJsonObject_UpdateString $json "recipients.signers[0].recipientId" "1"
CkJsonObject_UpdateString $json "recipients.signers[0].routingOrder" "1"
CkJsonObject_UpdateString $json "recipients.signers[0].tabs.signHereTabs[0].documentId" "1"
CkJsonObject_UpdateString $json "recipients.signers[0].tabs.signHereTabs[0].pageNumber" "1"
CkJsonObject_UpdateString $json "recipients.signers[0].tabs.signHereTabs[0].recipientId" "1"
CkJsonObject_UpdateString $json "recipients.signers[0].tabs.signHereTabs[0].tabLabel" "SignHereTab"
CkJsonObject_UpdateString $json "recipients.signers[0].tabs.signHereTabs[0].xPosition" "195"
CkJsonObject_UpdateString $json "recipients.signers[0].tabs.signHereTabs[0].yPosition" "147"
CkJsonObject_UpdateString $json "status" "sent"
# Get our previously obtained OAuth2 access token, which should contain JSON like this:
# {
# "access_token": "eyJ0eXA....YQyig",
# "token_type": "Bearer",
# "refresh_token": "eyJ0eXA....auE3eHKg",
# "expires_in": 28800
# }
set jsonToken [new_CkJsonObject]
set success [CkJsonObject_LoadFile $jsonToken "qa_data/tokens/docusign.json"]
set sbAuth [new_CkStringBuilder]
CkStringBuilder_Append $sbAuth "Bearer "
CkStringBuilder_Append $sbAuth [CkJsonObject_stringOf $jsonToken "access_token"]
CkHttp_SetRequestHeader $http "Authorization" [CkStringBuilder_getAsString $sbAuth]
CkHttp_SetRequestHeader $http "Content-Type" "application/json"
# Don't forget to modify this line to use your account ID
set resp [new_CkHttpResponse]
set success [CkHttp_HttpJson $http "POST" "https://demo.docusign.net/restapi/v2.1/accounts/${accountId}/envelopes" $json "application/json" $resp]
if {$success == 0} then {
puts [CkHttp_lastErrorText $http]
delete_CkHttp $http
delete_CkBinData $pdfData
delete_CkJsonObject $json
delete_CkJsonObject $jsonToken
delete_CkStringBuilder $sbAuth
delete_CkHttpResponse $resp
exit
}
set sbResponseBody [new_CkStringBuilder]
CkHttpResponse_GetBodySb $resp $sbResponseBody
set jResp [new_CkJsonObject]
CkJsonObject_LoadSb $jResp $sbResponseBody
CkJsonObject_put_EmitCompact $jResp 0
puts "Response Body:"
puts [CkJsonObject_emit $jResp]
set respStatusCode [CkHttpResponse_get_StatusCode $resp]
puts "Response Status Code = $respStatusCode"
if {$respStatusCode >= 400} then {
puts "Response Header:"
puts [CkHttpResponse_header $resp]
puts "Failed."
delete_CkHttp $http
delete_CkBinData $pdfData
delete_CkJsonObject $json
delete_CkJsonObject $jsonToken
delete_CkStringBuilder $sbAuth
delete_CkHttpResponse $resp
delete_CkStringBuilder $sbResponseBody
delete_CkJsonObject $jResp
exit
}
# Sample JSON response:
# (Sample code for parsing the JSON response is shown below)
# {
# "envelopeId": "d51cfdab-22ed-4832-bf68-446c44077ffc",
# "uri": "/envelopes/d51cfdab-22ed-4832-bf68-446c44077ffc",
# "statusDateTime": "2018-04-17T16:31:51.8830000Z",
# "status": "sent"
# }
# Sample code for parsing the JSON response...
# Use the following online tool to generate parsing code from sample JSON:
# Generate Parsing Code from JSON
set envelopeId [CkJsonObject_stringOf $jResp "envelopeId"]
set uri [CkJsonObject_stringOf $jResp "uri"]
set statusDateTime [CkJsonObject_stringOf $jResp "statusDateTime"]
set status [CkJsonObject_stringOf $jResp "status"]
delete_CkHttp $http
delete_CkBinData $pdfData
delete_CkJsonObject $json
delete_CkJsonObject $jsonToken
delete_CkStringBuilder $sbAuth
delete_CkHttpResponse $resp
delete_CkStringBuilder $sbResponseBody
delete_CkJsonObject $jResp