Zig
Zig
MyInvois Malaysia Submit Document
See more Malaysia MyInvois Examples
Demonstrates how to submit a document to MyInvois.Chilkat Zig Downloads
const std = @import("std");
const chilkat = @import("chilkat");
pub fn main(init: std.process.Init) !void {
const alloc = init.arena.allocator();
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
const http = try chilkat.Http.init();
defer http.deinit();
// 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.
const sb_xml_doc = try chilkat.StringBuilder.init();
defer sb_xml_doc.deinit();
try sb_xml_doc.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.
const sha256 = try sb_xml_doc.getHash(alloc, "sha256", "hex", "utf-8");
const sb_encoded = try chilkat.StringBuilder.init();
defer sb_encoded.deinit();
sb_encoded.appendSb(sb_xml_doc) catch {};
sb_encoded.encode("base64", "utf-8") catch {};
const json = try chilkat.JsonObject.init();
defer json.deinit();
json.updateString("documents[0].format", "XML") catch {};
json.updateString("documents[0].documentHash", sha256) catch {};
json.updateString("documents[0].codeNumber", "INV12345") catch {};
json.updateSb("documents[0].document", sb_encoded) catch {};
// Adds the "Authorization: Bearer <access_token>" header.
http.setAuthToken("<access_token>");
const resp = try chilkat.HttpResponse.init();
defer resp.deinit();
http.httpJson("POST", "https://preprod-api.myinvois.hasil.gov.my/api/v1.0/documentsubmissions", json, "application/json", resp) catch {
std.debug.print("{s}\n", .{try http.getLastErrorText(alloc)});
return;
};
std.debug.print("response status code = {d}\n", .{resp.getStatusCode()});
std.debug.print("{s}\n", .{try resp.getBodyStr(alloc)});
}