Sample code for 30+ languages & platforms
Dart

MyInvois Malaysia Submit Document

See more Malaysia MyInvois Examples

Demonstrates how to submit a document to MyInvois.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

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

  final http = 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.
  final sbXmlDoc = CkStringBuilder();
  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.
  final sha256 = sbXmlDoc.getHash('sha256', 'hex', 'utf-8');

  final sbEncoded = CkStringBuilder();
  sbEncoded.appendSb(sbXmlDoc);
  sbEncoded.encode('base64', 'utf-8');

  final json = CkJsonObject();
  json.updateString('documents[0].format', 'XML');
  json.updateString('documents[0].documentHash', sha256);
  json.updateString('documents[0].codeNumber', 'INV12345');
  json.updateSb('documents[0].document', sbEncoded);

  // Adds the "Authorization: Bearer <access_token>" header.
  http.authToken = '<access_token>';

  final resp = CkHttpResponse();
  try {
    http.httpJson('POST', 'https://preprod-api.myinvois.hasil.gov.my/api/v1.0/documentsubmissions', json, 'application/json', resp);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print('response status code = ${resp.statusCode}');
  print(resp.bodyStr);
}