Sample code for 30+ languages & platforms
Rust

MyInvois Malaysia Submit Document

See more Malaysia MyInvois Examples

Demonstrates how to submit a document to MyInvois.

Chilkat Rust Downloads

Rust

// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

let http = chilkat::Http::new();

// 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.
let sb_xml_doc = chilkat::StringBuilder::new();
let _ = sb_xml_doc.load_file("c:/invoices/invoice1.xml", "utf-8").is_ok();

// 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.
let sha256 = sb_xml_doc.get_hash("sha256", "hex", "utf-8").unwrap_or_default();

let sb_encoded = chilkat::StringBuilder::new();
let _ = sb_encoded.append_sb(&sb_xml_doc);
let _ = sb_encoded.encode("base64", "utf-8");

let json = chilkat::JsonObject::new();
let _ = json.update_string("documents[0].format", "XML");
let _ = json.update_string("documents[0].documentHash", &sha256);
let _ = json.update_string("documents[0].codeNumber", "INV12345");
let _ = json.update_sb("documents[0].document", &sb_encoded);

// Adds the "Authorization: Bearer <access_token>" header.
http.set_auth_token("<access_token>");

let resp = chilkat::HttpResponse::new();
if http.http_json("POST", "https://preprod-api.myinvois.hasil.gov.my/api/v1.0/documentsubmissions", &json, "application/json", &resp).is_err() {
    println!("{}", http.last_error_text());
    return;
}

println!("response status code = {}", resp.status_code());
println!("{}", resp.body_str());