Delphi ActiveX
Delphi ActiveX
MyInvois Malaysia Submit Document
See more Malaysia MyInvois Examples
Demonstrates how to submit a document to MyInvois.Chilkat Delphi ActiveX Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
http: TChilkatHttp;
sbXmlDoc: TChilkatStringBuilder;
sha256: WideString;
sbEncoded: TChilkatStringBuilder;
json: TChilkatJsonObject;
resp: TChilkatHttpResponse;
begin
success := 0;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
http := TChilkatHttp.Create(Self);
// 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.
sbXmlDoc := TChilkatStringBuilder.Create(Self);
success := sbXmlDoc.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.
sha256 := sbXmlDoc.GetHash('sha256','hex','utf-8');
sbEncoded := TChilkatStringBuilder.Create(Self);
sbEncoded.AppendSb(sbXmlDoc.ControlInterface);
sbEncoded.Encode('base64','utf-8');
json := TChilkatJsonObject.Create(Self);
json.UpdateString('documents[0].format','XML');
json.UpdateString('documents[0].documentHash',sha256);
json.UpdateString('documents[0].codeNumber','INV12345');
json.UpdateSb('documents[0].document',sbEncoded.ControlInterface);
// Adds the "Authorization: Bearer <access_token>" header.
http.AuthToken := '<access_token>';
resp := TChilkatHttpResponse.Create(Self);
success := http.HttpJson('POST','https://preprod-api.myinvois.hasil.gov.my/api/v1.0/documentsubmissions',json.ControlInterface,'application/json',resp.ControlInterface);
if (success = 0) then
begin
Memo1.Lines.Add(http.LastErrorText);
Exit;
end;
Memo1.Lines.Add('response status code = ' + IntToStr(resp.StatusCode));
Memo1.Lines.Add(resp.BodyStr);
end;