Sample code for 30+ languages & platforms
Java

ZATCA Onboarding Get Compliance CSID

See more ZATCA Examples

Demonstrates sending a POST to get a compliance CSID, which is two parts: A binary security token, and a secret.

Chilkat Java Downloads

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

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.

        // It is assumed you've already generated a CSR.
        // Also, you'll need an OTP code, valid for 1 hour, which is generated online in the Fatoora portal.  See
        // https://zatca.gov.sa/ar/E-Invoicing/Introduction/Guidelines/Documents/E-invoicing%20Detailed%20Technical%20Guidelines.pdf

        // Manually replace this with the OTP code you interactively obtained in a browser session from the Fatoora portal.
        // The OTP code is valid for 1 hour.
        String otp = "123434";

        // You should already have a CSR in a file containing something that looks like this:

        // -----BEGIN CERTIFICATE REQUEST-----
        // MIIB5DCCAYsCAQAwTDELMAkGA1UEBhMCU0ExFTATBgNVBAsMDFJpeWFkIEJyYW5j
        // aDEQMA4GA1UECgwHQ29udG9zbzEUMBIGA1UEAwwLRUExMjM0NTY3ODkwVjAQBgcq
        // hkjOPQIBBgUrgQQACgNCAAQI6op+6GQ4Gmn9oy0DpGxX0lFtUIvj+4Jtnp0VyEsH
        // +ZO7lpgksbRC484R3fAsO0v+Ly24ZIUIOYEIAeJ1f6AooIHfMIHcBgkqhkiG9w0B
        // CQ4xgc4wgcswIQYJKwYBBAGCNxQCBBQTElpBVENBLUNvZGUtU2lnbmluZzCBpQYD
        // VR0RBIGdMIGapIGXMIGUMTswOQYDVQQEDDIxLVRTVHwyLVRTVHwzLWVkMjJmMWQ4
        // LWU2YTItMTExOC05YjU4LWQ5YThmMTFlNDQ1ZjEfMB0GCgmSJomT8ixkAQEMDzMx
        // MDEyMjM5MzUwMDAwMzENMAsGA1UEDAwEMTEwMDESMBAGA1UEGgwJTXlBZGRyZXNz
        // MREwDwYDVQQPDAhJbmR1c3RyeTAKBggqhkjOPQQDAgNHADBEAiBurm6KdAeHfXzt
        // h/jk8xSMBP4TAkkFrg+hWDhfI0/SuAIgJi8ectM7YwBIBCmf0tdFcVTU7GBbvjnK
        // xValZCAO39M=
        // -----END CERTIFICATE REQUEST-----

        Pem pem = new Pem();
        try {
            pem.loadPemFile("c:/aaworkarea/zatca/onboarding/taxpayer.csr", "");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Get the base64 from the CSR in a single line.
        StringBuilder sbCsrBase64 = new StringBuilder();
        sbCsrBase64.append(pem.getEncodedItem("csr", "", "base64", 0));
        int numReplaced = sbCsrBase64.replace("\r", "");
        numReplaced = sbCsrBase64.replace("\n", "");
        String csrBase64 = sbCsrBase64.getAsString();
        System.out.println(csrBase64);

        JsonObject json = new JsonObject();
        json.setEmitCompact(false);
        json.updateSb("csr", sbCsrBase64);

        Http http = new Http();
        http.setAccept("application/json");
        http.setRequestHeader("OTP", otp);
        http.setRequestHeader("Accept-Version", "V2");
        HttpResponse resp = new HttpResponse();
        try {
            http.httpJson("POST", "https://gw-apic-gov.gazt.gov.sa/e-invoicing/core/compliance", json, "application/json", resp);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        if (resp.getStatusCode() != 200) {
            System.out.println(resp.getBodyStr());
            System.out.println("response status code = " + resp.getStatusCode());
            System.out.println("Failed");
            return;
        }

        JsonObject jsonResp = new JsonObject();
        resp.getBodyJson(jsonResp);

        jsonResp.setEmitCompact(false);
        System.out.println("JSON response:");
        System.out.println(jsonResp.emit());
    }
}