fatoora
tags :
Summary #
ReadMe file to follow fatoorah-command-readme.pdf Downloaded from here https://sandbox.zatca.gov.sa/downloadSDK This Java SDK toolkit was by ZATCA to test the generated invoices compliance
ZATCA complaint e-invoicing system
Installation #
It was straight forward, one issue I encountered as about the paths: having spaces in the folder or directory names break the installation paths.
Creating CSR with fatoora SDK #
cd ~/Code/work/apps/invoicing-apis/crts
# fatoora -csr -csrConfig fileName -privateKey fileName -generatedCsr fileName -pem
fatoora -csr -csrConfig ./csr-configs-azmx-EN.properties
fatoora -pem -csr -csrConfig ~/Code/work/apps/invoicing-apis/crts/csr-config-azmx-EN.properties

Notes: #
- If the user does not provide [-privateKey] argument then the private key file will be generated in the path of a running command prompt with file convention name pattern generated-private-key-yyyyMMddhhmmss.key
- If the user does not provide [-generatedCsr] argument then the csr file will be generated in the path of a running command prompt with file convention name pattern generated-csr-yyyyMMddhhmmss.csr
- If the user does not provide [-pem] argument then the csr file will be generated encoded base64 and private key file will be generated without header “—–BEGIN EC PRIVATE KEY—–” and footer “—–END EC PRIVATE KEY—–”
Creating CSR with openssl #
https://learn.microsoft.com/en-us/dynamics365/finance/localizations/e-invoicing-sa-onboarding https://www.youtube.com/watch?v=-yDJKKqh6m4&ab_channel=MohamedAbdelgawad
Commands mentioned in file:~/Dropbox/emacs/documents/AzmX/Project X/ZATCA/User_Manual_Developer_Portal_Manual_Version_3.pdf
# generating private key using ec algorithm
openssl ecparam -name secp256k1 -genkey -noout -out azmx-privatekey.pem
# public key from the generated private key
openssl ec -in azmx-privatekey.pem -pubout -conv_form compressed -out azmx-public.pem
# decoding base64 of public key format
openssl base64 -d -in azmx-public.pem -out azmx-public.bin
# verifification of the signature, done with private key, using public key
openssl dgst -verify azmx-public.pem -signature azmx-public.bin TaxInvoice\(15-07-2023\).xml
# create CSR
openssl req -new -sha256 -key azmx-privatekey.pem -config csr-config.cnf -out azmx-csr.csr
Requesting Compliance Cryptographic Stamp Identifier (CCSID/Certificate) (CSID) with #
the response will public key certificate in X509 format sandbox api
curl -X 'POST' \
'https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/compliance' \
-H 'accept: application/json' \
-H 'OTP: 123345' \
-H 'Accept-Version: V2' \
-H 'Content-Type: application/json' \
-d '
"csr": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQjVqQ0NBWXNDQVFBd1RERUxNQWtHQTFVRUJoTUNVMEV4RlRBVEJnTlZCQXNNREZKcGVXRmtJRUp5WVc1agphREVRTUE0R0ExVUVDZ3dIUTI5dWRHOXpiekVVTUJJR0ExVUVBd3dMUlVFeE1qTTBOVFkzT0Rrd1ZqQVFCZ2NxCmhrak9QUUlCQmdVcmdRUUFDZ05DQUFTNW80VWM1U3ZWTEFzMFh1VTRrY3F6WXFxMEFUZm05VXFROFpSNXBsdWsKZXAycnlOYlYwcWZCbXNLTlExSDNWMmhVUThHZ0cwem04STYrWnduQ3ZyK21vSUhmTUlIY0Jna3Foa2lHOXcwQgpDUTR4Z2M0d2djc3dJUVlKS3dZQkJBR0NOeFFDQkJRVEVscEJWRU5CTFVOdlpHVXRVMmxuYm1sdVp6Q0JwUVlEClZSMFJCSUdkTUlHYXBJR1hNSUdVTVRzd09RWURWUVFFRERJeExWUlRWSHd5TFZSVFZId3pMV1ZrTWpKbU1XUTQKTFdVMllUSXRNVEV4T0MwNVlqVTRMV1E1WVRobU1URmxORFExWmpFZk1CMEdDZ21TSm9tVDhpeGtBUUVNRHpNeApNREV5TWpNNU16VXdNREF3TXpFTk1Bc0dBMVVFREF3RU1URXdNREVTTUJBR0ExVUVHZ3dKVFhsQlpHUnlaWE56Ck1SRXdEd1lEVlFRUERBaEpibVIxYzNSeWVUQUtCZ2dxaGtqT1BRUURBZ05KQURCR0FpRUF5cHZhTEhURncvSW0KQTU5cVZhcXptOEUwYzRiMlNvU2Vka3Y1Ry8zQy9lc0NJUUNzRlJ4OXZ5VVJuZlNlWG5ucnhZa1lZQ1VzSnFocwplK1pYdHFnbDZFQnI1QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo="
'
"requestID": 1234567890123,
"dispositionMessage": "ISSUED",
"binarySecurityToken": "TUlJQ0REQ0NBYktnQXdJQkFnSUdBWWxlOElOeE1Bb0dDQ3FHU000OUJBTUNNQlV4RXpBUkJnTlZCQU1NQ21WSmJuWnZhV05wYm1jd0hoY05Nak13TnpFMk1UTTBNalF5V2hjTk1qZ3dOekUxTWpFd01EQXdXakJNTVFzd0NRWURWUVFHRXdKVFFURVZNQk1HQTFVRUN3d01VbWw1WVdRZ1FuSmhibU5vTVJBd0RnWURWUVFLREFkRGIyNTBiM052TVJRd0VnWURWUVFEREF0RlFURXlNelExTmpjNE9UQldNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQUtBMElBQkxtamhSemxLOVVzQ3pSZTVUaVJ5ck5pcXJRQk4rYjFTcER4bEhtbVc2UjZuYXZJMXRYU3A4R2F3bzFEVWZkWGFGUkR3YUFiVE9id2pyNW5DY0srdjZhamdia3dnYll3REFZRFZSMFRBUUgvQkFJd0FEQ0JwUVlEVlIwUkJJR2RNSUdhcElHWE1JR1VNVHN3T1FZRFZRUUVEREl4TFZSVFZId3lMVlJUVkh3ekxXVmtNakptTVdRNExXVTJZVEl0TVRFeE9DMDVZalU0TFdRNVlUaG1NVEZsTkRRMVpqRWZNQjBHQ2dtU0pvbVQ4aXhrQVFFTUR6TXhNREV5TWpNNU16VXdNREF3TXpFTk1Bc0dBMVVFREF3RU1URXdNREVTTUJBR0ExVUVHZ3dKVFhsQlpHUnlaWE56TVJFd0R3WURWUVFQREFoSmJtUjFjM1J5ZVRBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlBejJXcmU3ZmxlTG9NZW9YdThtUmxldUZZeEdQM0ErRDRMV2dnZ0JFaU80UUloQUpJNHcveWZOQ1hJYzRNQ2k3N2pKalRLVDhQU2x4QTR5QjE3OGZjYm9DT0M=",
"secret": "0CigoGQhgfmliP2RditycgiQe35eVIzgEdZtV0So1JE=",
"errors": null
OCR of Images #
2023-07-23_13-51-01_screenshot.png #

No. ArgumentisJOption's) Description 1 [-csr] A flag used to generate csr and private key. 2 -csrConfig <filename>] This is a mandatory argument to provide location and name of the csr configuration file. 3 I-privateKey] <filename> This is an optionalargument to providelocation and name of generated private key output file 4 I-generatedCsr] <filename> This is an optionalargument to providelocation and name of generated csr output file 5 [-pem] This is an optional argument used to generate csr and private key in pem format