Sample code for 30+ languages & platforms
PowerBuilder

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 PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
string ls_Otp
oleobject loo_Pem
oleobject loo_SbCsrBase64
integer li_NumReplaced
string ls_CsrBase64
oleobject loo_Json
oleobject loo_Http
oleobject loo_Resp
oleobject loo_JsonResp

li_Success = 0

// 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.
ls_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-----

loo_Pem = create oleobject
li_rc = loo_Pem.ConnectToNewObject("Chilkat.Pem")
if li_rc < 0 then
    destroy loo_Pem
    MessageBox("Error","Connecting to COM object failed")
    return
end if
li_Success = loo_Pem.LoadPemFile("c:/aaworkarea/zatca/onboarding/taxpayer.csr","")
if li_Success = 0 then
    Write-Debug loo_Pem.LastErrorText
    destroy loo_Pem
    return
end if

// Get the base64 from the CSR in a single line.
loo_SbCsrBase64 = create oleobject
li_rc = loo_SbCsrBase64.ConnectToNewObject("Chilkat.StringBuilder")

loo_SbCsrBase64.Append(loo_Pem.GetEncodedItem("csr","","base64",0))
li_NumReplaced = loo_SbCsrBase64.Replace("~r","")
li_NumReplaced = loo_SbCsrBase64.Replace("~n","")
ls_CsrBase64 = loo_SbCsrBase64.GetAsString()
Write-Debug ls_CsrBase64

loo_Json = create oleobject
li_rc = loo_Json.ConnectToNewObject("Chilkat.JsonObject")

loo_Json.EmitCompact = 0
loo_Json.UpdateSb("csr",loo_SbCsrBase64)

loo_Http = create oleobject
li_rc = loo_Http.ConnectToNewObject("Chilkat.Http")

loo_Http.Accept = "application/json"
loo_Http.SetRequestHeader("OTP",ls_Otp)
loo_Http.SetRequestHeader("Accept-Version","V2")
loo_Resp = create oleobject
li_rc = loo_Resp.ConnectToNewObject("Chilkat.HttpResponse")

li_Success = loo_Http.HttpJson("POST","https://gw-apic-gov.gazt.gov.sa/e-invoicing/core/compliance",loo_Json,"application/json",loo_Resp)
if li_Success = 0 then
    Write-Debug loo_Http.LastErrorText
    destroy loo_Pem
    destroy loo_SbCsrBase64
    destroy loo_Json
    destroy loo_Http
    destroy loo_Resp
    return
end if

if loo_Resp.StatusCode <> 200 then
    Write-Debug loo_Resp.BodyStr
    Write-Debug "response status code = " + string(loo_Resp.StatusCode)
    Write-Debug "Failed"
    destroy loo_Pem
    destroy loo_SbCsrBase64
    destroy loo_Json
    destroy loo_Http
    destroy loo_Resp
    return
end if

loo_JsonResp = create oleobject
li_rc = loo_JsonResp.ConnectToNewObject("Chilkat.JsonObject")

loo_Resp.GetBodyJson(loo_JsonResp)

loo_JsonResp.EmitCompact = 0
Write-Debug "JSON response:"
Write-Debug loo_JsonResp.Emit()


destroy loo_Pem
destroy loo_SbCsrBase64
destroy loo_Json
destroy loo_Http
destroy loo_Resp
destroy loo_JsonResp