Xbase++
Xbase++
MyInvois Malaysia Submit Document
See more Malaysia MyInvois Examples
Demonstrates how to submit a document to MyInvois.Chilkat Xbase++ Downloads
LOCAL nSuccess
LOCAL oHttp
LOCAL oSbXmlDoc
LOCAL cSha256
LOCAL oSbEncoded
LOCAL oJson
LOCAL oResp
nSuccess := 0
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
oHttp := CreateObject("Chilkat.Http")
// 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.
oSbXmlDoc := CreateObject("Chilkat.StringBuilder")
nSuccess := oSbXmlDoc:LoadFile("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.
cSha256 := oSbXmlDoc:GetHash("sha256", "hex", "utf-8")
oSbEncoded := CreateObject("Chilkat.StringBuilder")
oSbEncoded:AppendSb(oSbXmlDoc)
oSbEncoded:Encode("base64", "utf-8")
oJson := CreateObject("Chilkat.JsonObject")
oJson:UpdateString("documents[0].format", "XML")
oJson:UpdateString("documents[0].documentHash", cSha256)
oJson:UpdateString("documents[0].codeNumber", "INV12345")
oJson:UpdateSb("documents[0].document", oSbEncoded)
// Adds the "Authorization: Bearer <access_token>" header.
oHttp:AuthToken := "<access_token>"
oResp := CreateObject("Chilkat.HttpResponse")
nSuccess := oHttp:HttpJson("POST", "https://preprod-api.myinvois.hasil.gov.my/api/v1.0/documentsubmissions", oJson, "application/json", oResp)
IF (nSuccess == 0)
? oHttp:LastErrorText
oHttp:destroy()
oSbXmlDoc:destroy()
oSbEncoded:destroy()
oJson:destroy()
oResp:destroy()
RETURN
ENDIF
? "response status code = " + Str(oResp:StatusCode)
? oResp:BodyStr
oHttp:destroy()
oSbXmlDoc:destroy()
oSbEncoded:destroy()
oJson:destroy()
oResp:destroy()