DataFlex
DataFlex
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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoHttp
Handle hoPdfData
Variant vJson
Handle hoJson
Variant vJson
Token Handle hoJsonToken
Handle hoSbAuth
Variant vResp
Handle hoResp
Variant vSbResponseBody
Handle hoSbResponseBody
Handle hoJResp
Integer iRespStatusCode
String sEnvelopeId
String sUri
String sStatusDateTime
String sStatus
String sTemp1
Move False To iSuccess
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatHttp)) To hoHttp
If (Not(IsComObjectCreated(hoHttp))) Begin
Send CreateComObject of hoHttp
End
// 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.
Get Create (RefClass(cComChilkatBinData)) To hoPdfData
If (Not(IsComObjectCreated(hoPdfData))) Begin
Send CreateComObject of hoPdfData
End
Get ComLoadFile Of hoPdfData "qa_data/pdf/helloWorld.pdf" To iSuccess
If (iSuccess = False) Begin
Showln "Failed to load local PDF file."
Procedure_Return
End
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Get ComUpdateString Of hoJson "emailSubject" "Please sign this document" To iSuccess
Get ComGetEncoded Of hoPdfData "base64" To sTemp1
Get ComUpdateString Of hoJson "documents[0].documentBase64" sTemp1 To iSuccess
Get ComUpdateString Of hoJson "documents[0].name" "Lorem Ipsum" To iSuccess
Get ComUpdateString Of hoJson "documents[0].fileExtension" "pdf" To iSuccess
Get ComUpdateString Of hoJson "documents[0].documentId" "1" To iSuccess
Get ComUpdateString Of hoJson "recipients.signers[0].email" "joe_sample@example.com" To iSuccess
Get ComUpdateString Of hoJson "recipients.signers[0].name" "Joe Sample" To iSuccess
Get ComUpdateString Of hoJson "recipients.signers[0].recipientId" "1" To iSuccess
Get ComUpdateString Of hoJson "recipients.signers[0].routingOrder" "1" To iSuccess
Get ComUpdateString Of hoJson "recipients.signers[0].tabs.signHereTabs[0].documentId" "1" To iSuccess
Get ComUpdateString Of hoJson "recipients.signers[0].tabs.signHereTabs[0].pageNumber" "1" To iSuccess
Get ComUpdateString Of hoJson "recipients.signers[0].tabs.signHereTabs[0].recipientId" "1" To iSuccess
Get ComUpdateString Of hoJson "recipients.signers[0].tabs.signHereTabs[0].tabLabel" "SignHereTab" To iSuccess
Get ComUpdateString Of hoJson "recipients.signers[0].tabs.signHereTabs[0].xPosition" "195" To iSuccess
Get ComUpdateString Of hoJson "recipients.signers[0].tabs.signHereTabs[0].yPosition" "147" To iSuccess
Get ComUpdateString Of hoJson "status" "sent" To iSuccess
// 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
// }
Get Create (RefClass(cComChilkatJsonObject)) To hoJsonToken
If (Not(IsComObjectCreated(hoJsonToken))) Begin
Send CreateComObject of hoJsonToken
End
Get ComLoadFile Of hoJsonToken "qa_data/tokens/docusign.json" To iSuccess
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbAuth
If (Not(IsComObjectCreated(hoSbAuth))) Begin
Send CreateComObject of hoSbAuth
End
Get ComAppend Of hoSbAuth "Bearer " To iSuccess
Get ComStringOf Of hoJsonToken "access_token" To sTemp1
Get ComAppend Of hoSbAuth sTemp1 To iSuccess
Get ComGetAsString Of hoSbAuth To sTemp1
Send ComSetRequestHeader To hoHttp "Authorization" sTemp1
Send ComSetRequestHeader To hoHttp "Content-Type" "application/json"
// Don't forget to modify this line to use your account ID
Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
If (Not(IsComObjectCreated(hoResp))) Begin
Send CreateComObject of hoResp
End
Get pvComObject of hoJson to vJson
Get pvComObject of hoResp to vResp
Get ComHttpJson Of hoHttp "POST" "https://demo.docusign.net/restapi/v2.1/accounts/${accountId}/envelopes" vJson "application/json" vResp To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoHttp To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbResponseBody
If (Not(IsComObjectCreated(hoSbResponseBody))) Begin
Send CreateComObject of hoSbResponseBody
End
Get pvComObject of hoSbResponseBody to vSbResponseBody
Get ComGetBodySb Of hoResp vSbResponseBody To iSuccess
Get Create (RefClass(cComChilkatJsonObject)) To hoJResp
If (Not(IsComObjectCreated(hoJResp))) Begin
Send CreateComObject of hoJResp
End
Get pvComObject of hoSbResponseBody to vSbResponseBody
Get ComLoadSb Of hoJResp vSbResponseBody To iSuccess
Set ComEmitCompact Of hoJResp To False
Showln "Response Body:"
Get ComEmit Of hoJResp To sTemp1
Showln sTemp1
Get ComStatusCode Of hoResp To iRespStatusCode
Showln "Response Status Code = " iRespStatusCode
If (iRespStatusCode >= 400) Begin
Showln "Response Header:"
Get ComHeader Of hoResp To sTemp1
Showln sTemp1
Showln "Failed."
Procedure_Return
End
// 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
Get ComStringOf Of hoJResp "envelopeId" To sEnvelopeId
Get ComStringOf Of hoJResp "uri" To sUri
Get ComStringOf Of hoJResp "statusDateTime" To sStatusDateTime
Get ComStringOf Of hoJResp "status" To sStatus
End_Procedure