Sample code for 30+ languages & platforms
Java Requires Chilkat v11.0.0+

MyInvois Malaysia Login as Intermediary System

See more Malaysia MyInvois Examples

Demonstrates how to get an OAuth2 access token with an intermediary that is representing a taxpayer (acting on behalf of a specific taxpayer). The OAuth2 access token can then be used to access MyInvois protected APIs.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Http;
import com.chilkatsoft.chilkat2.HttpRequest;
import com.chilkatsoft.chilkat2.HttpResponse;
import com.chilkatsoft.chilkat2.JsonObject;

public class ChilkatExample {

    public static void main(String[] args) {
        // This example requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        // Sends the following HTTP POST to get a MyInvois OAUth2 access token using client_credentials

        // POST /connect/token HTTP/1.1
        // Host: preprod-api.myinvois.hasil.gov.my
        // Accept: */*
        // Content-Length: <<variable>>
        // Content-Type: application/x-www-form-urlencoded
        // onbehalfof: C25845632020
        //
        // client_id={YOUR_CLIENT_ID}&client_secret={YOUR_CLIENT_SECRET}&grant_type=client_credentials&scope=InvoicingAPI

        Http http = new Http();

        HttpRequest req = new HttpRequest();

        req.addHeader("onbehalfof", "C25845632020");

        req.addParam("grant_type", "client_credentials");
        req.addParam("client_id", "YOUR_CLIENT_ID");
        req.addParam("client_secret", "YOUR_CLIENT_SECRET");
        req.addParam("scope", "InvoicingAPI");

        req.setHttpVerb("POST");
        req.setContentType("application/x-www-form-urlencoded");

        HttpResponse resp = new HttpResponse();
        try {
            http.httpReq("https://preprod-api.myinvois.hasil.gov.my/connect/token", req, resp);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Note: The returned access token is valid for a short amount of time.  Perhaps 1 hour.
        // The access token is used in the "Authorization: Bearer <access_token>" header in subsequent requests until it expires.
        // Your application would then need to get a new access token, and so on..

        System.out.println("Response Status Code: " + resp.getStatusCode());
        System.out.println("Response Body:");
        System.out.println(resp.getBodyStr());

        // Here's a sample response:

        // {
        //   "access_token": "eyJhbGciOiJSUzI1...",
        //   "expires_in": 3600,
        //   "token_type": "Bearer",
        //   "scope": "InvoicingAPI"
        // }

        JsonObject json = new JsonObject();
        json.load(resp.getBodyStr());
        String access_token = json.stringOf("access_token");
        int expires_in = json.intOf("expires_in");
        String token_type = json.stringOf("token_type");
        String scope = json.stringOf("scope");

        // To use an access token in a MyInvois API call, see Using a MyInvois Access Token in an API Request
    }
}