Tcl
Tcl
MyInvois Malaysia Submit Document
See more Malaysia MyInvois Examples
Demonstrates how to submit a document to MyInvois.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]
# The following JSON is sent in the request body.
# {
# "documents": [
# {
# "format": "XML",
# "documentHash": "<SHA256_hash_of_document>",
# "codeNumber": "INV12345",
# "document": "<Document_encoded_in_Base64>"
# }
# ]
# }
# Load the document to be sent.
set sbXmlDoc [new_CkStringBuilder]
set success [CkStringBuilder_LoadFile $sbXmlDoc "c:/invoices/invoice1.xml" "utf-8"]
# The MyInvois online documentation neglects to tell us the encoding of the documentHash.
# Should it be base64? Or hex? We can only guess. MyInvois provides no samples,
# and omits these crucial details which are needed for actual implementation.
#
# *** Note: It was confirmed that "hex" is the encoding that is needed.
set sha256 [CkStringBuilder_getHash $sbXmlDoc "sha256" "hex" "utf-8"]
set sbEncoded [new_CkStringBuilder]
CkStringBuilder_AppendSb $sbEncoded $sbXmlDoc
CkStringBuilder_Encode $sbEncoded "base64" "utf-8"
set json [new_CkJsonObject]
CkJsonObject_UpdateString $json "documents[0].format" "XML"
CkJsonObject_UpdateString $json "documents[0].documentHash" $sha256
CkJsonObject_UpdateString $json "documents[0].codeNumber" "INV12345"
CkJsonObject_UpdateSb $json "documents[0].document" $sbEncoded
# Adds the "Authorization: Bearer <access_token>" header.
CkHttp_put_AuthToken $http "<access_token>"
set resp [new_CkHttpResponse]
set success [CkHttp_HttpJson $http "POST" "https://preprod-api.myinvois.hasil.gov.my/api/v1.0/documentsubmissions" $json "application/json" $resp]
if {$success == 0} then {
puts [CkHttp_lastErrorText $http]
delete_CkHttp $http
delete_CkStringBuilder $sbXmlDoc
delete_CkStringBuilder $sbEncoded
delete_CkJsonObject $json
delete_CkHttpResponse $resp
exit
}
puts "response status code = [CkHttpResponse_get_StatusCode $resp]"
puts [CkHttpResponse_bodyStr $resp]
delete_CkHttp $http
delete_CkStringBuilder $sbXmlDoc
delete_CkStringBuilder $sbEncoded
delete_CkJsonObject $json
delete_CkHttpResponse $resp