PureBasic
PureBasic
DocuSign Add Documents to a Draft Envelope
See more DocuSign Examples
Demonstrates how to add one or more additional documents to a DocuSign draft envelope.Chilkat PureBasic Downloads
IncludeFile "CkBinData.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkHttpResponse.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Load a previously obtained OAuth2 access token.
jsonToken.i = CkJsonObject::ckCreate()
If jsonToken.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkJsonObject::ckLoadFile(jsonToken,"qa_data/tokens/docusign.json")
If success = 0
Debug CkJsonObject::ckLastErrorText(jsonToken)
CkHttp::ckDispose(http)
CkJsonObject::ckDispose(jsonToken)
ProcedureReturn
EndIf
; Adds the "Authorization: Bearer eyJ0eXAi.....UE8Kl_V8KroQ" header.
CkHttp::setCkAuthToken(http, CkJsonObject::ckStringOf(jsonToken,"access_token"))
; Send the following request.
; Make sure to use your own account ID (obtained from Get Docusign User Account Information)
; PUT https://demo.docusign.net/restapi/v2.1/accounts/<account ID>/envelopes/<envelope ID>/documents HTTP/1.1
; Expect: 100-continue
; Accept: application/json
; Cache-Control: no-cache
; Authorization: Bearer eyJ0eX...
; Content-Length: ...
; Content-Type: application/json
;
; {
; "documents": [
; {
; "documentId": "1",
; "name": "hello.pdf",
; "pages": "1",
; "documentBase64": "<insert base64 content here>"
; },
; {
; "documentId": "2",
; "name": "hello2.pdf",
; "pages": "1",
; "documentBase64": "<insert base64 content here>"
; }
; ]
; }
bd1.i = CkBinData::ckCreate()
If bd1.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkBinData::ckLoadFile(bd1,"qa_data/pdf/hello.pdf")
bd2.i = CkBinData::ckCreate()
If bd2.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkBinData::ckLoadFile(bd2,"qa_data/pdf/hello2.pdf")
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
i.i = 0
CkJsonObject::setCkI(json, i)
CkJsonObject::ckUpdateString(json,"documents[i].documentId","1")
CkJsonObject::ckUpdateString(json,"documents[i].name","hello.pdf")
CkJsonObject::ckUpdateString(json,"documents[i].pages","1")
CkJsonObject::ckUpdateString(json,"documents[i].documentBase64",CkBinData::ckGetEncoded(bd1,"base64"))
i = i + 1
CkJsonObject::setCkI(json, i)
CkJsonObject::ckUpdateString(json,"documents[i].documentId","2")
CkJsonObject::ckUpdateString(json,"documents[i].name","hello2.pdf")
CkJsonObject::ckUpdateString(json,"documents[i].pages","1")
CkJsonObject::ckUpdateString(json,"documents[i].documentBase64",CkBinData::ckGetEncoded(bd2,"base64"))
sbJson.i = CkStringBuilder::ckCreate()
If sbJson.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::setCkEmitCompact(json, 0)
CkJsonObject::ckEmitSb(json,sbJson)
CkHttp::ckSetRequestHeader(http,"Expect","100-continue")
CkHttp::ckSetRequestHeader(http,"Cache-Control","no-cache")
CkHttp::ckSetRequestHeader(http,"Accept","application/json")
; Use your own account ID here.
CkHttp::ckSetUrlVar(http,"accountId","7f3f65ed-5e87-418d-94c1-92499ddc8252")
; Use the envelope ID returned by DocuSign when creating the draft envelope).
CkHttp::ckSetUrlVar(http,"envelopeId","e01f2043-3850-4fcb-afd1-b1726216e099")
url.s = "https://demo.docusign.net/restapi/v2.1/accounts/{$accountId}/envelopes/{$envelopeId}/documents"
resp.i = CkHttpResponse::ckCreate()
If resp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkHttp::ckHttpSb(http,"PUT",url,sbJson,"utf-8","application/json",resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkHttp::ckDispose(http)
CkJsonObject::ckDispose(jsonToken)
CkBinData::ckDispose(bd1)
CkBinData::ckDispose(bd2)
CkJsonObject::ckDispose(json)
CkStringBuilder::ckDispose(sbJson)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
jResp.i = CkJsonObject::ckCreate()
If jResp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckLoad(jResp,CkHttpResponse::ckBodyStr(resp))
CkJsonObject::setCkEmitCompact(jResp, 0)
Debug "Response Body:"
Debug CkJsonObject::ckEmit(jResp)
; If you get a 401 response status code, it's likely you need to refresh the DocuSign OAuth2 token).
respStatusCode.i = CkHttpResponse::ckStatusCode(resp)
Debug "Response Status Code = " + Str(respStatusCode)
If respStatusCode >= 400
Debug "Response Header:"
Debug CkHttpResponse::ckHeader(resp)
Debug "Failed."
CkHttp::ckDispose(http)
CkJsonObject::ckDispose(jsonToken)
CkBinData::ckDispose(bd1)
CkBinData::ckDispose(bd2)
CkJsonObject::ckDispose(json)
CkStringBuilder::ckDispose(sbJson)
CkHttpResponse::ckDispose(resp)
CkJsonObject::ckDispose(jResp)
ProcedureReturn
EndIf
; Sample JSON response:
; (Sample code for parsing the JSON response is shown below)
; {
; "envelopeId": "da9fb811-e6a4-48c0-a9fb-81ed18b989af",
; "envelopeDocuments": [
; {
; "documentId": "1",
; "documentIdGuid": "38e919fc-0a77-4b0c-9da0-e3530f4e6fc7",
; "name": "hello.pdf",
; "type": "content",
; "uri": "/envelopes/da9fb811-e6a4-48c0-a9fb-81ed18b989af/documents/1",
; "order": "3",
; "containsPdfFormFields": "false",
; "templateRequired": "false",
; "authoritativeCopy": "false"
; },
; {
; "documentId": "2",
; "documentIdGuid": "2cbd0fcc-c1ca-4a3a-b8b5-fe252dd89731",
; "name": "hello2.pdf",
; "type": "content",
; "uri": "/envelopes/da9fb811-e6a4-48c0-a9fb-81ed18b989af/documents/2",
; "order": "4",
; "containsPdfFormFields": "false",
; "templateRequired": "false",
; "authoritativeCopy": "false"
; }
; ]
; }
; Sample code for parsing the JSON response...
; Use the following online tool to generate parsing code from sample JSON:
; Generate Parsing Code from JSON
documentId.s
documentIdGuid.s
name.s
v_type.s
uri.s
order.s
containsPdfFormFields.s
templateRequired.s
authoritativeCopy.s
envelopeId.s = CkJsonObject::ckStringOf(jResp,"envelopeId")
i = 0
count_i.i = CkJsonObject::ckSizeOfArray(jResp,"envelopeDocuments")
While i < count_i
CkJsonObject::setCkI(jResp, i)
documentId = CkJsonObject::ckStringOf(jResp,"envelopeDocuments[i].documentId")
documentIdGuid = CkJsonObject::ckStringOf(jResp,"envelopeDocuments[i].documentIdGuid")
name = CkJsonObject::ckStringOf(jResp,"envelopeDocuments[i].name")
v_type = CkJsonObject::ckStringOf(jResp,"envelopeDocuments[i].type")
uri = CkJsonObject::ckStringOf(jResp,"envelopeDocuments[i].uri")
order = CkJsonObject::ckStringOf(jResp,"envelopeDocuments[i].order")
containsPdfFormFields = CkJsonObject::ckStringOf(jResp,"envelopeDocuments[i].containsPdfFormFields")
templateRequired = CkJsonObject::ckStringOf(jResp,"envelopeDocuments[i].templateRequired")
authoritativeCopy = CkJsonObject::ckStringOf(jResp,"envelopeDocuments[i].authoritativeCopy")
i = i + 1
Wend
CkHttp::ckDispose(http)
CkJsonObject::ckDispose(jsonToken)
CkBinData::ckDispose(bd1)
CkBinData::ckDispose(bd2)
CkJsonObject::ckDispose(json)
CkStringBuilder::ckDispose(sbJson)
CkHttpResponse::ckDispose(resp)
CkJsonObject::ckDispose(jResp)
ProcedureReturn
EndProcedure