Getting Error wrong signature Value #3
Replies: 5 comments 7 replies
-
Test XML only work with Invoice that signed using Certificate from eInvoice
SDK Package.
You should test it on Sumulation Environment, and see what server response.
…On Sun, Feb 16, 2025, 16:02 tomforjerry23 ***@***.***> wrote:
When I save xml after assign signature and submit to
https://sandbox.zatca.gov.sa/TestXML <http://url> I am getting this
error. Can you tell me why I get this error.
Errors
category : SIGNATURE_ERROR
code :signatureValue
message : wrong signature Value
certificateInfo.json
{
"environmentType": "NonProduction",
"csr":
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ0JUQ0NBYXNDQVFBd2JqRUxNQWtHQTFVRUJoTUNVMEV4RHpBTkJnTlZCQXNNQmxKcGVXRmthREVtTUNRRwpBMVVFQ2d3ZFRXRjRhVzExYlNCVGNHVmxaQ0JVWldOb0lGTjFjSEJzZVNCTVZFUXhKakFrQmdOVkJBTU1IVlJUClZDMDRPRFkwTXpFeE5EVXRNems1T1RrNU9UazVPVEF3TURBek1GWXdFQVlIS29aSXpqMENBUVlGSzRFRUFBb0QKUWdBRUJpSlFpaFdLMEhzL3R6bm9PNjRXakxvaFdUa1lqd0NkSjBRWFVyQ0dDa3ZkRUJ2WjhiRWw3UHZOZjNkOQp4Y05SZUpJRThLc0ltY21nQkVPaUtZd085S0NCM1RDQjJnWUpLb1pJaHZjTkFRa09NWUhNTUlISk1DUUdDU3NHCkFRUUJnamNVQWdRWEV4VlVVMVJhUVZSRFFTMURiMlJsTFZOcFoyNXBibWN3Z2FBR0ExVWRFUVNCbURDQmxhU0IKa2pDQmp6RXVNQ3dHQTFVRUJBd2xNUzFVVTFSOE1pMVVVMVI4TXkwMk4ySXdaalZrWTJJMk9HSXdNUzQzTnpNegpOVFl3T0RFZk1CMEdDZ21TSm9tVDhpeGtBUUVNRHpNNU9UazVPVGs1T1Rrd01EQXdNekVOTUFzR0ExVUVEQXdFCk1URXdNREVSTUE4R0ExVUVHZ3dJVWxKU1JESTVNamt4R2pBWUJnTlZCQThNRVZOMWNIQnNlU0JoWTNScGRtbDAKYVdWek1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lDRUhUZ28ycHN5eTJEcnZtUmMvOWt3TER0aGsvSDY4b1J3LwpycWdrL2ZKQkFpRUFqdmVseUxJRllXTWl5WjRsdzZzdXJhMlpoY3NZTzFDdkpYOXdsMlhCTklJPQotLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0K",
"privateKey":
"MHQCAQEEIKQjFCbJVz2qpO+BqSfA1S3VVAtD7LiOfMTbvPLhJ0CyoAcGBSuBBAAKoUQDQgAEBiJQihWK0Hs/tznoO64WjLohWTkYjwCdJ0QXUrCGCkvdEBvZ8bEl7PvNf3d9xcNReJIE8KsImcmgBEOiKYwO9A==",
"OTP": "123456",
"ccsid_requestID": 1234567890123,
"ccsid_binarySecurityToken":
"TUlJQ0tqQ0NBYytnQXdJQkFnSUdBWlVMUUc1Qk1Bb0dDQ3FHU000OUJBTUNNQlV4RXpBUkJnTlZCQU1NQ21WSmJuWnZhV05wYm1jd0hoY05NalV3TWpFMU1qQXhOVEl4V2hjTk16QXdNakUwTWpFd01EQXdXakJ1TVFzd0NRWURWUVFHRXdKVFFURVBNQTBHQTFVRUN3d0dVbWw1WVdSb01TWXdKQVlEVlFRS0RCMU5ZWGhwYlhWdElGTndaV1ZrSUZSbFkyZ2dVM1Z3Y0d4NUlFeFVSREVtTUNRR0ExVUVBd3dkVkZOVUxUZzROalF6TVRFME5TMHpPVGs1T1RrNU9UazVNREF3TURNd1ZqQVFCZ2NxaGtqT1BRSUJCZ1VyZ1FRQUNnTkNBQVFHSWxDS0ZZclFleiszT2VnN3JoYU11aUZaT1JpUEFKMG5SQmRTc0lZS1M5MFFHOW54c1NYcys4MS9kMzNGdzFGNGtnVHdxd2laeWFBRVE2SXBqQTcwbzRHME1JR3hNQXdHQTFVZEV3RUIvd1FDTUFBd2dhQUdBMVVkRVFTQm1EQ0JsYVNCa2pDQmp6RXVNQ3dHQTFVRUJBd2xNUzFVVTFSOE1pMVVVMVI4TXkwMk4ySXdaalZrWTJJMk9HSXdNUzQzTnpNek5UWXdPREVmTUIwR0NnbVNKb21UOGl4a0FRRU1Eek01T1RrNU9UazVPVGt3TURBd016RU5NQXNHQTFVRURBd0VNVEV3TURFUk1BOEdBMVVFR2d3SVVsSlNSREk1TWpreEdqQVlCZ05WQkE4TUVWTjFjSEJzZVNCaFkzUnBkbWwwYVdWek1Bb0dDQ3FHU000OUJBTUNBMGtBTUVZQ0lRREFMNWN5bytkVUhSSXFvb3VITTFSWGpQcngxUDdES2JmNWI5VGJSNzFRYkFJaEFJOVVWZnhDMFNUK3I3VmpZLzBsM003Y2dKNTc3N3g3d0sycE05bDZaQlhZ",
"ccsid_secret": "cYT+7mt4iCjkKjkg6Wt5kT9RE9Zx3dtqJHHbHPi4B+k=",
"pcsid_requestID": 30368,
"pcsid_binarySecurityToken":
"TUlJRDNqQ0NBNFNnQXdJQkFnSVRFUUFBT0FQRjkwQWpzL3hjWHdBQkFBQTRBekFLQmdncWhrak9QUVFEQWpCaU1SVXdFd1lLQ1pJbWlaUHlMR1FCR1JZRmJHOWpZV3d4RXpBUkJnb0praWFKay9Jc1pBRVpGZ05uYjNZeEZ6QVZCZ29Ka2lhSmsvSXNaQUVaRmdkbGVIUm5ZWHAwTVJzd0dRWURWUVFERXhKUVVscEZTVTVXVDBsRFJWTkRRVFF0UTBFd0hoY05NalF3TVRFeE1Ea3hPVE13V2hjTk1qa3dNVEE1TURreE9UTXdXakIxTVFzd0NRWURWUVFHRXdKVFFURW1NQ1FHQTFVRUNoTWRUV0Y0YVcxMWJTQlRjR1ZsWkNCVVpXTm9JRk4xY0hCc2VTQk1WRVF4RmpBVUJnTlZCQXNURFZKcGVXRmthQ0JDY21GdVkyZ3hKakFrQmdOVkJBTVRIVlJUVkMwNE9EWTBNekV4TkRVdE16azVPVGs1T1RrNU9UQXdNREF6TUZZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUFvRFFnQUVvV0NLYTBTYTlGSUVyVE92MHVBa0MxVklLWHhVOW5QcHgydmxmNHloTWVqeThjMDJYSmJsRHE3dFB5ZG84bXEwYWhPTW1Obzhnd25pN1h0MUtUOVVlS09DQWdjd2dnSURNSUd0QmdOVkhSRUVnYVV3Z2FLa2daOHdnWnd4T3pBNUJnTlZCQVFNTWpFdFZGTlVmREl0VkZOVWZETXRaV1F5TW1ZeFpEZ3RaVFpoTWkweE1URTRMVGxpTlRndFpEbGhPR1l4TVdVME5EVm1NUjh3SFFZS0NaSW1pWlB5TEdRQkFRd1BNems1T1RrNU9UazVPVEF3TURBek1RMHdDd1lEVlFRTURBUXhNVEF3TVJFd0R3WURWUVFhREFoU1VsSkVNamt5T1RFYU1CZ0dBMVVFRHd3UlUzVndjR3g1SUdGamRHbDJhWFJwWlhNd0hRWURWUjBPQkJZRUZFWCtZdm1tdG5Zb0RmOUJHYktvN29jVEtZSzFNQjhHQTFVZEl3UVlNQmFBRkp2S3FxTHRtcXdza0lGelZ2cFAyUHhUKzlObk1Ic0dDQ3NHQVFVRkJ3RUJCRzh3YlRCckJnZ3JCZ0VGQlFjd0FvWmZhSFIwY0RvdkwyRnBZVFF1ZW1GMFkyRXVaMjkyTG5OaEwwTmxjblJGYm5KdmJHd3ZVRkphUlVsdWRtOXBZMlZUUTBFMExtVjRkR2RoZW5RdVoyOTJMbXh2WTJGc1gxQlNXa1ZKVGxaUFNVTkZVME5CTkMxRFFTZ3hLUzVqY25Rd0RnWURWUjBQQVFIL0JBUURBZ2VBTUR3R0NTc0dBUVFCZ2pjVkJ3UXZNQzBHSlNzR0FRUUJnamNWQ0lHR3FCMkUwUHNTaHUyZEpJZk8reG5Ud0ZWbWgvcWxaWVhaaEQ0Q0FXUUNBUkl3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdNR0NDc0dBUVVGQndNQ01DY0dDU3NHQVFRQmdqY1ZDZ1FhTUJnd0NnWUlLd1lCQlFVSEF3TXdDZ1lJS3dZQkJRVUhBd0l3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQUxFL2ljaG1uV1hDVUtVYmNhM3ljaThvcXdhTHZGZEhWalFydmVJOXVxQWJBaUE5aEM0TThqZ01CQURQU3ptZDJ1aVBKQTZnS1IzTEUwM1U3NWVxYkMvclhBPT0=",
"pcsid_secret": "CkYsEXfV8c1gFHAtFWoZv73pGMvh/Qyo4LzKM2h/8Hg=",
"lastICV": "0",
"lastInvoiceHash":
"NWZlY2ViNjZmZmM4NmYzOGQ5NTI3ODZjNmQ2OTZjNzljMmRiYzIzOWRkNGU5MWI0NjcyOWQ3M2EyN2ZiNTdlOQ==",
"complianceCsidUrl": "
https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/compliance",
"complianceChecksUrl": "
https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/compliance/invoices
",
"productionCsidUrl": "
https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/production/csids
",
"reportingUrl": "
https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/invoices/reporting/single
",
"clearanceUrl": "
https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/invoices/clearance/single
"
}
—
Reply to this email directly, view it on GitHub
<#3>, or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ALRZEWQ53J2XLEA7BM53IKL2QBH2XAVCNFSM6AAAAABXHL4HOGVHI2DSMVQWIX3LMV43ERDJONRXK43TNFXW4OZXHE3TCMRSGU>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
You need real vat number and OTP for Simulation Environment test
…On Sun, Feb 16, 2025, 18:17 tomforjerry23 ***@***.***> wrote:
Sumulation Environment
Same error
Errors
category : SIGNATURE_ERROR
code :signatureValue
message : wrong signature Value
`public function generateCsr()
{
require_once (INVOICE_ZATCA_PATH) . 'Helpers/CsrGenerator.php';
require_once (INVOICE_ZATCA_PATH) . 'Helpers/ApiHelper.php';
require_once (INVOICE_ZATCA_PATH) . 'Helpers/InvoiceHelper.php';
require_once (INVOICE_ZATCA_PATH) . 'Signer/EInvoiceSigner.php';
$vat_number = '399999999900003';
$city = 'Riyadh';
$address = 'RRRD2929';
$company_name = 'Maximum Speed Tech Supply LTD';
$environment = "TST";
$uuid = uniqid('', true); // Unique identifier for the serial number
$commonName = $environment . "-886431145-" . $vat_number;
$serialNumber = "1-" . $environment . "|2-" . $environment . "|3-" . $uuid;
$config = [
"csr.common.name" => $commonName,
"csr.serial.number" => $serialNumber,
"csr.organization.identifier" => $vat_number,
"csr.organization.unit.name" => $city,
"csr.organization.name" => $company_name,
"csr.country.name" => "SA",
"csr.invoice.type" => "1100",
"csr.location.address" => $address,
"csr.industry.business.category" => "Supply activities"
];
$environmentType = "NonProduction";
$OTP = '123456';
$apipath = 'Simulation'; // Default value
switch ($environmentType) {
case 'NonProduction':
$apipath = 'developer-portal';
break;
case 'Simulation':
$apipath = 'simulation';
break;
case 'Production':
$apipath = 'production';
break;
}
if ($environmentType === "NonProduction") { $config["csr.organization.identifier"] = $vat_number;}
$certInfo = [
"environmentType" => $environmentType,
"csr" => "",
"privateKey" => "",
"OTP" => $OTP,
"ccsid_requestID" => "",
"ccsid_binarySecurityToken" => "",
"ccsid_secret" => "",
"pcsid_requestID" => "",
"pcsid_binarySecurityToken" => "",
"pcsid_secret" => "",
"lastICV" => "0",
"lastInvoiceHash" => "NWZlY2ViNjZmZmM4NmYzOGQ5NTI3ODZjNmQ2OTZjNzljMmRiYzIzOWRkNGU5MWI0NjcyOWQ3M2EyN2ZiNTdlOQ==",
"complianceCsidUrl" => "https://gw-fatoora.zatca.gov.sa/e-invoicing/" . $apipath . "/compliance",
"complianceChecksUrl" => "https://gw-fatoora.zatca.gov.sa/e-invoicing/" . $apipath . "/compliance/invoices",
"productionCsidUrl" => "https://gw-fatoora.zatca.gov.sa/e-invoicing/" . $apipath . "/production/csids",
"reportingUrl" => "https://gw-fatoora.zatca.gov.sa/e-invoicing/" . $apipath . "/invoices/reporting/single",
"clearanceUrl" => "https://gw-fatoora.zatca.gov.sa/e-invoicing/" . $apipath . "/invoices/clearance/single",
];
$csrGen = new CsrGenerator($config, $environmentType);
list($privateKeyContent, $csrBase64) = $csrGen->generateCsr();
$certInfo["privateKey"] = $privateKeyContent;
$certInfo["csr"] = $csrBase64;
$csrGen->saveToFiles($privateKeyContent, $csrBase64);
ApiHelper::saveJsonToFile(INVOICE_ZATCA_PATH. "certificate/certificateInfo.json", $certInfo);
$response = ApiHelper::complianceCSID($certInfo);
$requestType = "Compliance CSID";
$apiUrl = $certInfo["complianceCsidUrl"];
$cleanResponse = ApiHelper::cleanUpJson($response, $requestType, $apiUrl);
if ($jsonDecodedResponse = json_decode($response, true)) {
$certInfo["ccsid_requestID"] = $jsonDecodedResponse["requestID"];
$certInfo["ccsid_binarySecurityToken"] = $jsonDecodedResponse["binarySecurityToken"];
$certInfo["ccsid_secret"] = $jsonDecodedResponse["secret"];
ApiHelper::saveJsonToFile(INVOICE_ZATCA_PATH . "certificate/certificateInfo.json", $certInfo);
echo "\nCompliance CSID Server Response: \n" . $cleanResponse;
} else {
echo "\nCompliance CSID Server Response: \n" . $cleanResponse;
}
$response = ApiHelper::productionCSID($certInfo);
$requestType = "Production CSID";
$apiUrl = $certInfo["productionCsidUrl"];
$cleanResponse = ApiHelper::cleanUpJson($response, $requestType, $apiUrl);
if ($jsonDecodedResponse = json_decode($response, true)) {
$certInfo["pcsid_requestID"] = $jsonDecodedResponse["requestID"];
$certInfo["pcsid_binarySecurityToken"] = $jsonDecodedResponse["binarySecurityToken"];
$certInfo["pcsid_secret"] = $jsonDecodedResponse["secret"];
ApiHelper::saveJsonToFile(INVOICE_ZATCA_PATH . "certificate/certificateInfo.json", $certInfo);
echo "\n\nPproduction CSID Server Response: \n" . $cleanResponse;
} else {
echo "\n\nProduction CSID Server Response: \n" . $cleanResponse;
}
}
public function get_invoice_data_ajax($id)
{
$this->generateCsr();
$invoice = $this->invoices_model->get($id);
include_once(__DIR__.'/../libraries/phpqrcode/qrlib.php');
include(__DIR__.'/../libraries/phpqrcode/config.php');
require_once module_dir_path(INVOICE_MODULE_NAME) . '/third_party/Zatca.php';
require_once module_dir_path(INVOICE_MODULE_NAME) . '/third_party/Zatca/Helpers/ApiHelper.php';
require_once module_dir_path(INVOICE_MODULE_NAME) . '/third_party/Zatca/Helpers/InvoiceHelper.php';
require_once module_dir_path(INVOICE_MODULE_NAME) . '/third_party/Zatca/Signer/EInvoiceSigner.php';
$zatca = new Zatca();
$now = new DateTime();
$invoice_data = [
'invoice_number' => 'SME00023' . time(),
'issue_date_time' => $now->format('Y-m-d\TH:i:s\Z'),
'issue_date' => $now->format('Y-m-d'),
'issue_time' => $now->format('H:i:s'),
'delivery_date' => '2025-02-03',
'payment_means_code' => '10',
'tax_amount' => 0.60,
'taxable_amount' => 4.00,
'vat_percent' => 15.00,
'line_total' => 4.00,
'tax_exclusive' => 4.00,
'tax_inclusive' => 4.60,
'allowance_total' => 0.00,
'prepaid' => 0.00,
'payable' => 4.60,
'seller' => [
'crn' => '1010010000',
'street' => 'RRRD2929',
'building' => '2322',
'city_sub' => 'RRRD2929',
'city' => 'RRRD2929',
'country_code' => 'SA',
'postal' => '12853',
'vat' => '399999999900003',
'legal_name' => 'Maximum Speed Tech Supply LTD'
],
'buyer' => [
'legal_name' => 'Buyer Legal Name',
'street' => 'Buyer Street, Al Murabba',
'city' => 'Jeddah',
'city_sub' => 'المربع | Al-Murabba',
'postal' => '12345',
'building' => '2322',
'country_code' => 'SA',
],
'items' => [
['id' => 1, 'name' => 'قلم رصاص', 'quantity' => 2, 'price' => 2.00, 'vat_percent' => 15]
]
];
$certInfo = ApiHelper::loadJsonFromFile(INVOICE_ZATCA_PATH . "certificate/certificateInfo.json");
$privateKey = $certInfo["privateKey"];
$x509CertificateContent = base64_decode($certInfo["pcsid_binarySecurityToken"]);
$prefix = 'SIMSI';
$typeCode = '388';
$isSimplified = strpos($prefix, "SIM") === 0;
$invoicePath = INVOICE_XML_PATH . 'uploads/invoices/';
// Generate invoice XML
$baseDocument = $this->load->view('Resources/Invoice', $invoice_data, TRUE);
//$signed_xml = $zatca->signed_xml($baseDocument);
$doc = new DOMDocument();
$doc->loadXML($baseDocument);
$doc->preserveWhiteSpace = true;
$doc->formatOutput = true;
file_put_contents($invoicePath . 'invoice0.xml', $doc->saveXML());
// Process API request
$jsonPayload = EInvoiceSigner::GetRequestApiFromFile($invoicePath . 'invoice0.xml', $invoice_data, $x509CertificateContent, $privateKey);
$d = json_decode($jsonPayload);
$xmlString = base64_decode($d->invoice);
// Save final XML
$doc->loadXML($xmlString);
file_put_contents($invoicePath . 'invoice10.xml', $doc->saveXML());
$response = ApiHelper::invoiceReporting($certInfo, $jsonPayload);
print_r($response);
die;
}
`
{"validationResults":{"infoMessages":[{"type":"INFO","code":"XSD_ZATCA_VALID","category":"XSD
validation","message":"Complied with UBL 2.1 standards in line with ZATCA
specifications","status":"PASS"}],"warningMessages":[],"errorMessages":[],"status":"PASS"},"reportingStatus":"REPORTED"}
Private key and CSR have been saved to certificates/PrivateKey.pem and
certificates/taxpayer.csr, respectively. Compliance CSID Server Response: {
"requestType": "Compliance CSID", "apiUrl": "
https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/compliance",
"requestID": 1234567890123, "dispositionMessage": "ISSUED",
"binarySecurityToken":
"TUlJQ0tEQ0NBYytnQXdJQkFnSUdBWlVPZG1LdE1Bb0dDQ3FHU000OUJBTUNNQlV4RXpBUkJnTlZCQU1NQ21WSmJuWnZhV05wYm1jd0hoY05NalV3TWpFMk1URXhNekE1V2hjTk16QXdNakUxTWpFd01EQXdXakJ1TVFzd0NRWURWUVFHRXdKVFFURVBNQTBHQTFVRUN3d0dVbWw1WVdSb01TWXdKQVlEVlFRS0RCMU5ZWGhwYlhWdElGTndaV1ZrSUZSbFkyZ2dVM1Z3Y0d4NUlFeFVSREVtTUNRR0ExVUVBd3dkVkZOVUxUZzROalF6TVRFME5TMHpPVGs1T1RrNU9UazVNREF3TURNd1ZqQVFCZ2NxaGtqT1BRSUJCZ1VyZ1FRQUNnTkNBQVFjTTlONk1YTmNGcUNYb0NPTlhJaW8wK3FHRkxFQVMyQlpYUFZHY01YS2NUUTExMkRHaFdEeGVTK1AwU0cralU4cGlZbDlCVUkvNFNQVzdIcmFDWHRabzRHME1JR3hNQXdHQTFVZEV3RUIvd1FDTUFBd2dhQUdBMVVkRVFTQm1EQ0JsYVNCa2pDQmp6RXVNQ3dHQTFVRUJBd2xNUzFVVTFSOE1pMVVVMVI4TXkwMk4ySXhZemcwT0RVNU16WXhNaTQxTVRNNE16VTROekVmTUIwR0NnbVNKb21UOGl4a0FRRU1Eek01T1RrNU9UazVPVGt3TURBd016RU5NQXNHQTFVRURBd0VNVEV3TURFUk1BOEdBMVVFR2d3SVVsSlNSREk1TWpreEdqQVlCZ05WQkE4TUVWTjFjSEJzZVNCaFkzUnBkbWwwYVdWek1Bb0dDQ3FHU000OUJBTUNBMGNBTUVRQ0lISUsvMXRKV3Bwenk5VzNjWmx6dDNUZHJoTWIvWmhkT3grVjA0aVpiNGtSQWlBbzE1RC9XZURSdkJEdlNXZldqeU9aQ0I5MGNGT2ZVbHdWL3JENS9CakFrdz09",
"secret": "oK8/Wnw1gxBIWo5kSBPwR7zgrhcIxkP2FESkHIw9eO8=" } Pproduction CSID
Server Response: { "requestType": "Production CSID", "apiUrl": "
https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/production/csids",
"requestID": 30368, "tokenType": "
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3",
"dispositionMessage": "ISSUED", "binarySecurityToken":
"TUlJRDNqQ0NBNFNnQXdJQkFnSVRFUUFBT0FQRjkwQWpzL3hjWHdBQkFBQTRBekFLQmdncWhrak9QUVFEQWpCaU1SVXdFd1lLQ1pJbWlaUHlMR1FCR1JZRmJHOWpZV3d4RXpBUkJnb0praWFKay9Jc1pBRVpGZ05uYjNZeEZ6QVZCZ29Ka2lhSmsvSXNaQUVaRmdkbGVIUm5ZWHAwTVJzd0dRWURWUVFERXhKUVVscEZTVTVXVDBsRFJWTkRRVFF0UTBFd0hoY05NalF3TVRFeE1Ea3hPVE13V2hjTk1qa3dNVEE1TURreE9UTXdXakIxTVFzd0NRWURWUVFHRXdKVFFURW1NQ1FHQTFVRUNoTWRUV0Y0YVcxMWJTQlRjR1ZsWkNCVVpXTm9JRk4xY0hCc2VTQk1WRVF4RmpBVUJnTlZCQXNURFZKcGVXRmthQ0JDY21GdVkyZ3hKakFrQmdOVkJBTVRIVlJUVkMwNE9EWTBNekV4TkRVdE16azVPVGs1T1RrNU9UQXdNREF6TUZZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUFvRFFnQUVvV0NLYTBTYTlGSUVyVE92MHVBa0MxVklLWHhVOW5QcHgydmxmNHloTWVqeThjMDJYSmJsRHE3dFB5ZG84bXEwYWhPTW1Obzhnd25pN1h0MUtUOVVlS09DQWdjd2dnSURNSUd0QmdOVkhSRUVnYVV3Z2FLa2daOHdnWnd4T3pBNUJnTlZCQVFNTWpFdFZGTlVmREl0VkZOVWZETXRaV1F5TW1ZeFpEZ3RaVFpoTWkweE1URTRMVGxpTlRndFpEbGhPR1l4TVdVME5EVm1NUjh3SFFZS0NaSW1pWlB5TEdRQkFRd1BNems1T1RrNU9UazVPVEF3TURBek1RMHdDd1lEVlFRTURBUXhNVEF3TVJFd0R3WURWUVFhREFoU1VsSkVNamt5T1RFYU1CZ0dBMVVFRHd3UlUzVndjR3g1SUdGamRHbDJhWFJwWlhNd0hRWURWUjBPQkJZRUZFWCtZdm1tdG5Zb0RmOUJHYktvN29jVEtZSzFNQjhHQTFVZEl3UVlNQmFBRkp2S3FxTHRtcXdza0lGelZ2cFAyUHhUKzlObk1Ic0dDQ3NHQVFVRkJ3RUJCRzh3YlRCckJnZ3JCZ0VGQlFjd0FvWmZhSFIwY0RvdkwyRnBZVFF1ZW1GMFkyRXVaMjkyTG5OaEwwTmxjblJGYm5KdmJHd3ZVRkphUlVsdWRtOXBZMlZUUTBFMExtVjRkR2RoZW5RdVoyOTJMbXh2WTJGc1gxQlNXa1ZKVGxaUFNVTkZVME5CTkMxRFFTZ3hLUzVqY25Rd0RnWURWUjBQQVFIL0JBUURBZ2VBTUR3R0NTc0dBUVFCZ2pjVkJ3UXZNQzBHSlNzR0FRUUJnamNWQ0lHR3FCMkUwUHNTaHUyZEpJZk8reG5Ud0ZWbWgvcWxaWVhaaEQ0Q0FXUUNBUkl3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdNR0NDc0dBUVVGQndNQ01DY0dDU3NHQVFRQmdqY1ZDZ1FhTUJnd0NnWUlLd1lCQlFVSEF3TXdDZ1lJS3dZQkJRVUhBd0l3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQUxFL2ljaG1uV1hDVUtVYmNhM3ljaThvcXdhTHZGZEhWalFydmVJOXVxQWJBaUE5aEM0TThqZ01CQURQU3ptZDJ1aVBKQTZnS1IzTEUwM1U3NWVxYkMvclhBPT0=",
"secret": "CkYsEXfV8c1gFHAtFWoZv73pGMvh/Qyo4LzKM2h/8Hg=" }
—
Reply to this email directly, view it on GitHub
<#3 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ALRZEWVXGMEDENHRVTCDQL32QBXUJAVCNFSM6AAAAABXHL4HOGVHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTEMRRGQ3DKOA>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
When I trying with Developer Mode or Simition Mode its working Fine, but when i use with production mode its showing me the error This is error My Code Is:
|
Beta Was this translation helpful? Give feedback.
-
From error message, that clear, you are missing some step for onboarding.
…On Wed, May 21, 2025, 21:22 tomforjerry23 ***@***.***> wrote:
When I trying with Developer Mode or Simition Mode its working Fine, but
when i use with production mode its showing me the error
This is error
Message: HTTP error after 3 retries: 400 -
{"code":"Missing-ComplianceSteps","message":"The compliance certificate is
not done with the following compliance steps yet
[standard-compliant,standard-credit-note-compliant,standard-debit-note-compliant,simplified-credit-note-compliant,simplified-debit-note-compliant]"}
My Code Is:
`$uuid = uniqid('', true); // Unique identifier for the serial number
$commonName = $environment . "-886431145-" . $vat_number;
$serialNumber = "1-" . $environment . "|2-" . $environment . "|3-" . $uuid;
$config = [
"csr.common.name" => $commonName,
"csr.serial.number" => $serialNumber,
"csr.organization.identifier" => $vat_number,
"csr.organization.unit.name" => $city,
"csr.organization.name" => $company_name,
"csr.country.name" => "SA",
"csr.invoice.type" => "1100",
"csr.location.address" => $address,
"csr.industry.business.category" => "Supply activities"
];
$environmentType = "Production";
$OTP = "076723";
switch ($environmentType) {
case 'NonProduction':
$apipath = 'developer-portal';
break;
case 'Simulation':
$apipath = 'simulation';
break;
case 'Production':
$apipath = 'core';
//$apipath = 'production';
break;
}
$config["csr.organization.identifier"] = $vat_number;
$certInfo = [
"environmentType" => $environmentType,
"csr" => "",
"privateKey" => "",
"OTP" => $OTP,
"ccsid_requestID" => "",
"ccsid_binarySecurityToken" => "",
"ccsid_secret" => "",
"pcsid_requestID" => "",
"pcsid_binarySecurityToken" => "",
"pcsid_secret" => "",
"lastICV" => "0",
"lastInvoiceHash" => "NWZlY2ViNjZmZmM4NmYzOGQ5NTI3ODZjNmQ2OTZjNzljMmRiYzIzOWRkNGU5MWI0NjcyOWQ3M2EyN2ZiNTdlOQ==",
"complianceCsidUrl" => "https://gw-fatoora.zatca.gov.sa/e-invoicing/" . $apipath . "/compliance",
"complianceChecksUrl" => "https://gw-fatoora.zatca.gov.sa/e-invoicing/" . $apipath . "/compliance/invoices",
"productionCsidUrl" => "https://gw-fatoora.zatca.gov.sa/e-invoicing/" . $apipath . "/production/csids",
"reportingUrl" => "https://gw-fatoora.zatca.gov.sa/e-invoicing/" . $apipath . "/invoices/reporting/single",
"clearanceUrl" => "https://gw-fatoora.zatca.gov.sa/e-invoicing/" . $apipath . "/invoices/clearance/single",
];
$xmlTemplatePath = INVOICE_ZATCA_PATH ."Resources/Invoice.xml";
InvoiceHelper::updateCompanyIDInXmlTemplate($xmlTemplatePath, $config["csr.organization.identifier"]);
$csrGen = new CsrGenerator($config, $environmentType);
list($privateKeyContent, $csrBase64) = $csrGen->generateCsr();
$certInfo["privateKey"] = $privateKeyContent;
$certInfo["csr"] = $csrBase64;
$csrGen->saveToFiles($privateKeyContent, $csrBase64);
ApiHelper::saveJsonToFile(INVOICE_ZATCA_PATH. "certificate/certificateInfo.json", $certInfo);
$response = ApiHelper::complianceCSID($certInfo);
$requestType = "Compliance CSID";
$apiUrl = $certInfo["complianceCsidUrl"];
$cleanResponse = ApiHelper::cleanUpJson($response, $requestType, $apiUrl);
if ($jsonDecodedResponse = json_decode($response, true)) {
$certInfo["ccsid_requestID"] = $jsonDecodedResponse["requestID"];
$certInfo["ccsid_binarySecurityToken"] = $jsonDecodedResponse["binarySecurityToken"];
$certInfo["ccsid_secret"] = $jsonDecodedResponse["secret"];
ApiHelper::saveJsonToFile(INVOICE_ZATCA_PATH . "certificate/certificateInfo.json", $certInfo);
//echo "\nCompliance CSID Server Response: \n" . $cleanResponse;
} else {
//echo "\nCompliance CSID Server Response: \n" . $cleanResponse;
}
$certInfo = ApiHelper::loadJsonFromFile(INVOICE_ZATCA_PATH ."certificate/certificateInfo.json");
$privateKey = $certInfo["privateKey"];
$x509CertificateContent = base64_decode($certInfo["ccsid_binarySecurityToken"]);
$baseDocument = new DOMDocument();
$baseDocument->preserveWhiteSpace = true;
$baseDocument->load($xmlTemplatePath);
$documentTypes = [
["STDSI", "388", "Standard Invoice",""],
["STDCN", "383", "Standard CreditNote","InstructionNotes for Standard CreditNote"],
["STDDN", "381", "Standard DebitNote" , "InstructionNotes for Standard DebitNote"],
["SIMSI", "388", "Simplified Invoice",""],
["SIMCN", "383", "Simplified CreditNote", "InstructionNotes for Simplified CreditNote"],
["SIMDN", "381", "Simplified DebitNote", "InstructionNotes for Simplified DebitNote"]
];
$icv = 0;
$pih = "NWZlY2ViNjZmZmM4NmYzOGQ5NTI3ODZjNmQ2OTZjNzljMmRiYzIzOWRkNGU5MWI0NjcyOWQ3M2EyN2ZiNTdlOQ==";
foreach ($documentTypes as $docType) {
if(!empty($docType[2]) && $docType[2] == 'Simplified Invoice'){
list($prefix, $typeCode, $description, $instructionNote) = $docType;
$icv++;
$isSimplified = strpos($prefix, "SIM") === 0;
$newDoc = InvoiceHelper::ModifyXml($baseDocument, "{$prefix}-0001", $isSimplified ? "0200000" : "0100000", $typeCode, $icv, $pih, $instructionNote);
$jsonPayload = EInvoiceSigner::GetRequestApi($newDoc, $x509CertificateContent, $privateKey, true);
$response = ApiHelper::complianceChecks($certInfo, $jsonPayload);
$requestType = "Compliance Checks";
$apiUrl = $certInfo["complianceChecksUrl"];
$cleanResponse = ApiHelper::cleanUpJson($response, $requestType, $apiUrl);
$jsonDecodedResponse = json_decode($response, true);
if ($jsonDecodedResponse) {
echo "\ncomplianceChecks Server Response: \n" . $cleanResponse;
} else {
echo "\nInvalid JSON Response: \n" . $response;
return false;
}
if ($response === null) {
echo "Failed to process {$description}: serverResult is null.\n";
return false;
}
$status = $isSimplified ? $jsonDecodedResponse["reportingStatus"] : $jsonDecodedResponse["clearanceStatus"];
if (strpos($status, "REPORTED") !== false || strpos($status, "CLEARED") !== false) {
$jsonPayload = json_decode($jsonPayload, true);
$pih = $jsonPayload["invoiceHash"];
echo "\n{$description} processed successfully\n\n";
} else {
echo "Failed to process {$description}: status is {$status}\n";
return false;
}
}
}
$response = ApiHelper::productionCSID($certInfo);
$requestType = "Production CSID";
$apiUrl = $certInfo["productionCsidUrl"];
$cleanResponse = ApiHelper::cleanUpJson($response, $requestType, $apiUrl);
if ($jsonDecodedResponse = json_decode($response, true)) {
$certInfo["pcsid_requestID"] = $jsonDecodedResponse["requestID"];
$certInfo["pcsid_binarySecurityToken"] = $jsonDecodedResponse["binarySecurityToken"];
$certInfo["pcsid_secret"] = $jsonDecodedResponse["secret"];
ApiHelper::saveJsonToFile(INVOICE_ZATCA_PATH . "certificate/certificateInfo.json", $certInfo);
//echo "\n\nPproduction CSID Server Response: \n" . $cleanResponse;
} else {
//echo "\n\nProduction CSID Server Response: \n" . $cleanResponse;
}`
—
Reply to this email directly, view it on GitHub
<#3 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ALRZEWXLDKVY4T7VFV4RN2L27SD3FAVCNFSM6AAAAABXHL4HOGVHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTGMRSGEYDQNA>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
working on produciton mode all is working when I save final xml file and test upload to sandbox zatca i am getting this error.
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
When I save xml after assign signature and submit to https://sandbox.zatca.gov.sa/TestXML I am getting this error. Can you tell me why I get this error.
Errors
category : SIGNATURE_ERROR
code :signatureValue
message : wrong signature Value
certificateInfo.json
{
"environmentType": "NonProduction",
"csr": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ0JUQ0NBYXNDQVFBd2JqRUxNQWtHQTFVRUJoTUNVMEV4RHpBTkJnTlZCQXNNQmxKcGVXRmthREVtTUNRRwpBMVVFQ2d3ZFRXRjRhVzExYlNCVGNHVmxaQ0JVWldOb0lGTjFjSEJzZVNCTVZFUXhKakFrQmdOVkJBTU1IVlJUClZDMDRPRFkwTXpFeE5EVXRNems1T1RrNU9UazVPVEF3TURBek1GWXdFQVlIS29aSXpqMENBUVlGSzRFRUFBb0QKUWdBRUJpSlFpaFdLMEhzL3R6bm9PNjRXakxvaFdUa1lqd0NkSjBRWFVyQ0dDa3ZkRUJ2WjhiRWw3UHZOZjNkOQp4Y05SZUpJRThLc0ltY21nQkVPaUtZd085S0NCM1RDQjJnWUpLb1pJaHZjTkFRa09NWUhNTUlISk1DUUdDU3NHCkFRUUJnamNVQWdRWEV4VlVVMVJhUVZSRFFTMURiMlJsTFZOcFoyNXBibWN3Z2FBR0ExVWRFUVNCbURDQmxhU0IKa2pDQmp6RXVNQ3dHQTFVRUJBd2xNUzFVVTFSOE1pMVVVMVI4TXkwMk4ySXdaalZrWTJJMk9HSXdNUzQzTnpNegpOVFl3T0RFZk1CMEdDZ21TSm9tVDhpeGtBUUVNRHpNNU9UazVPVGs1T1Rrd01EQXdNekVOTUFzR0ExVUVEQXdFCk1URXdNREVSTUE4R0ExVUVHZ3dJVWxKU1JESTVNamt4R2pBWUJnTlZCQThNRVZOMWNIQnNlU0JoWTNScGRtbDAKYVdWek1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lDRUhUZ28ycHN5eTJEcnZtUmMvOWt3TER0aGsvSDY4b1J3LwpycWdrL2ZKQkFpRUFqdmVseUxJRllXTWl5WjRsdzZzdXJhMlpoY3NZTzFDdkpYOXdsMlhCTklJPQotLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0K",
"privateKey": "MHQCAQEEIKQjFCbJVz2qpO+BqSfA1S3VVAtD7LiOfMTbvPLhJ0CyoAcGBSuBBAAKoUQDQgAEBiJQihWK0Hs/tznoO64WjLohWTkYjwCdJ0QXUrCGCkvdEBvZ8bEl7PvNf3d9xcNReJIE8KsImcmgBEOiKYwO9A==",
"OTP": "123456",
"ccsid_requestID": 1234567890123,
"ccsid_binarySecurityToken": "TUlJQ0tqQ0NBYytnQXdJQkFnSUdBWlVMUUc1Qk1Bb0dDQ3FHU000OUJBTUNNQlV4RXpBUkJnTlZCQU1NQ21WSmJuWnZhV05wYm1jd0hoY05NalV3TWpFMU1qQXhOVEl4V2hjTk16QXdNakUwTWpFd01EQXdXakJ1TVFzd0NRWURWUVFHRXdKVFFURVBNQTBHQTFVRUN3d0dVbWw1WVdSb01TWXdKQVlEVlFRS0RCMU5ZWGhwYlhWdElGTndaV1ZrSUZSbFkyZ2dVM1Z3Y0d4NUlFeFVSREVtTUNRR0ExVUVBd3dkVkZOVUxUZzROalF6TVRFME5TMHpPVGs1T1RrNU9UazVNREF3TURNd1ZqQVFCZ2NxaGtqT1BRSUJCZ1VyZ1FRQUNnTkNBQVFHSWxDS0ZZclFleiszT2VnN3JoYU11aUZaT1JpUEFKMG5SQmRTc0lZS1M5MFFHOW54c1NYcys4MS9kMzNGdzFGNGtnVHdxd2laeWFBRVE2SXBqQTcwbzRHME1JR3hNQXdHQTFVZEV3RUIvd1FDTUFBd2dhQUdBMVVkRVFTQm1EQ0JsYVNCa2pDQmp6RXVNQ3dHQTFVRUJBd2xNUzFVVTFSOE1pMVVVMVI4TXkwMk4ySXdaalZrWTJJMk9HSXdNUzQzTnpNek5UWXdPREVmTUIwR0NnbVNKb21UOGl4a0FRRU1Eek01T1RrNU9UazVPVGt3TURBd016RU5NQXNHQTFVRURBd0VNVEV3TURFUk1BOEdBMVVFR2d3SVVsSlNSREk1TWpreEdqQVlCZ05WQkE4TUVWTjFjSEJzZVNCaFkzUnBkbWwwYVdWek1Bb0dDQ3FHU000OUJBTUNBMGtBTUVZQ0lRREFMNWN5bytkVUhSSXFvb3VITTFSWGpQcngxUDdES2JmNWI5VGJSNzFRYkFJaEFJOVVWZnhDMFNUK3I3VmpZLzBsM003Y2dKNTc3N3g3d0sycE05bDZaQlhZ",
"ccsid_secret": "cYT+7mt4iCjkKjkg6Wt5kT9RE9Zx3dtqJHHbHPi4B+k=",
"pcsid_requestID": 30368,
"pcsid_binarySecurityToken": "TUlJRDNqQ0NBNFNnQXdJQkFnSVRFUUFBT0FQRjkwQWpzL3hjWHdBQkFBQTRBekFLQmdncWhrak9QUVFEQWpCaU1SVXdFd1lLQ1pJbWlaUHlMR1FCR1JZRmJHOWpZV3d4RXpBUkJnb0praWFKay9Jc1pBRVpGZ05uYjNZeEZ6QVZCZ29Ka2lhSmsvSXNaQUVaRmdkbGVIUm5ZWHAwTVJzd0dRWURWUVFERXhKUVVscEZTVTVXVDBsRFJWTkRRVFF0UTBFd0hoY05NalF3TVRFeE1Ea3hPVE13V2hjTk1qa3dNVEE1TURreE9UTXdXakIxTVFzd0NRWURWUVFHRXdKVFFURW1NQ1FHQTFVRUNoTWRUV0Y0YVcxMWJTQlRjR1ZsWkNCVVpXTm9JRk4xY0hCc2VTQk1WRVF4RmpBVUJnTlZCQXNURFZKcGVXRmthQ0JDY21GdVkyZ3hKakFrQmdOVkJBTVRIVlJUVkMwNE9EWTBNekV4TkRVdE16azVPVGs1T1RrNU9UQXdNREF6TUZZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUFvRFFnQUVvV0NLYTBTYTlGSUVyVE92MHVBa0MxVklLWHhVOW5QcHgydmxmNHloTWVqeThjMDJYSmJsRHE3dFB5ZG84bXEwYWhPTW1Obzhnd25pN1h0MUtUOVVlS09DQWdjd2dnSURNSUd0QmdOVkhSRUVnYVV3Z2FLa2daOHdnWnd4T3pBNUJnTlZCQVFNTWpFdFZGTlVmREl0VkZOVWZETXRaV1F5TW1ZeFpEZ3RaVFpoTWkweE1URTRMVGxpTlRndFpEbGhPR1l4TVdVME5EVm1NUjh3SFFZS0NaSW1pWlB5TEdRQkFRd1BNems1T1RrNU9UazVPVEF3TURBek1RMHdDd1lEVlFRTURBUXhNVEF3TVJFd0R3WURWUVFhREFoU1VsSkVNamt5T1RFYU1CZ0dBMVVFRHd3UlUzVndjR3g1SUdGamRHbDJhWFJwWlhNd0hRWURWUjBPQkJZRUZFWCtZdm1tdG5Zb0RmOUJHYktvN29jVEtZSzFNQjhHQTFVZEl3UVlNQmFBRkp2S3FxTHRtcXdza0lGelZ2cFAyUHhUKzlObk1Ic0dDQ3NHQVFVRkJ3RUJCRzh3YlRCckJnZ3JCZ0VGQlFjd0FvWmZhSFIwY0RvdkwyRnBZVFF1ZW1GMFkyRXVaMjkyTG5OaEwwTmxjblJGYm5KdmJHd3ZVRkphUlVsdWRtOXBZMlZUUTBFMExtVjRkR2RoZW5RdVoyOTJMbXh2WTJGc1gxQlNXa1ZKVGxaUFNVTkZVME5CTkMxRFFTZ3hLUzVqY25Rd0RnWURWUjBQQVFIL0JBUURBZ2VBTUR3R0NTc0dBUVFCZ2pjVkJ3UXZNQzBHSlNzR0FRUUJnamNWQ0lHR3FCMkUwUHNTaHUyZEpJZk8reG5Ud0ZWbWgvcWxaWVhaaEQ0Q0FXUUNBUkl3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdNR0NDc0dBUVVGQndNQ01DY0dDU3NHQVFRQmdqY1ZDZ1FhTUJnd0NnWUlLd1lCQlFVSEF3TXdDZ1lJS3dZQkJRVUhBd0l3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQUxFL2ljaG1uV1hDVUtVYmNhM3ljaThvcXdhTHZGZEhWalFydmVJOXVxQWJBaUE5aEM0TThqZ01CQURQU3ptZDJ1aVBKQTZnS1IzTEUwM1U3NWVxYkMvclhBPT0=",
"pcsid_secret": "CkYsEXfV8c1gFHAtFWoZv73pGMvh/Qyo4LzKM2h/8Hg=",
"lastICV": "0",
"lastInvoiceHash": "NWZlY2ViNjZmZmM4NmYzOGQ5NTI3ODZjNmQ2OTZjNzljMmRiYzIzOWRkNGU5MWI0NjcyOWQ3M2EyN2ZiNTdlOQ==",
"complianceCsidUrl": "https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/compliance",
"complianceChecksUrl": "https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/compliance/invoices",
"productionCsidUrl": "https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/production/csids",
"reportingUrl": "https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/invoices/reporting/single",
"clearanceUrl": "https://gw-fatoora.zatca.gov.sa/e-invoicing/developer-portal/invoices/clearance/single"
}
Beta Was this translation helpful? Give feedback.
All reactions