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