-
Integrations
- Articles coming soon
-
Marketing
-
- Advertising white-label eCommerce solution to your customer ecosystem
- Advertising compliance and brand usage guidelines for partners
- How to create high-converting advertisements for your eCommerce platform
- How to run advertising campaigns to attract online merchants and resellers
- How to measure advertising performance and generate qualified merchant leads
-
- How to promote your eCommerce platform using consistent branding
- White-Label eCommerce branding strategy for partners
- Crafting effective brand messaging for eCommerce platforms
- Positioning your eCommerce platform for different merchant segments
- Maintaining brand consistency across marketing channels
-
- Creating High-Impact eCommerce marketing assets for partners
- Designing eCommerce sales decks that convert merchants
- Creating eCommerce landing pages that convert traffic into merchants
- Creating eCommerce case studies that build trust and close deals
- Creating Email campaigns that drive eCommerce adoption
-
-
Partner Hub
-
- Articles coming soon
-
- Articles coming soon
-
-
Sales
-
- Articles coming soon
-
- Articles coming soon
-
- Articles coming soon
-
- Articles coming soon
-
- Articles coming soon
-
-
Technical and Support
-
-
- Articles coming soon
-
- Articles coming soon
-
- Articles coming soon
-
- Articles coming soon
-
- Articles coming soon
-
-
-
-
-
-
-
- Payment methods at eCommerce Store
- Setting up Stripe Payment Gateway
- Setting up Paypal in your Online Store
- Setting up CashFree Gateway
- Setting up RazorPay Gateway
- Setting up Paystack gateway
- Setting up Flutterwave Gateway
- Setting up Mercado Pago Gateway
- Setting up Mamo Pay Gateway
- Setting up Yoco Gateway
- Setting up Nets Easy Gateway
- Setting up Vipps Gateway
- Setting up Mollie Gateway
- Setting up Epoint Gateway
- Setting up Iyzico Gateway
- Setting up Payriff Gateway
- Setting up Crypto Payments through Nicky
- What is Cash on Delivery?
- Show Remaining Articles (3) Collapse Articles
-
- How to create an analytics account?
- Connecting Google Analytics to your eCommerce store
- Connecting Meta Pixel to your eCommerce store
- Connecting Tik Tok Pixel to your eCommerce store
- Connecting Google Tag Manager to your eCommerce store
- Managing product reviews & ratings in your eCommerce store
- Using marketing automation to drive urgency and social proof
- Setting up your LLMs.txt integration to boost your AI search visibility
- Automating manual order fulfilment and live tracking with Shiprocket
- Automating search engine discoverability with dynamic sitemaps
- Automate, optimise, scale: Building your Google shopping product feed
- How to sync your product catalog with meta ads to drive more sales
-
- Articles coming soon
-
- Articles coming soon
-
- Articles coming soon
-
Print
Posted
Updated
Byadmin
Every webhook request is signed so you can confirm it came from Zencommerce and was not altered. The signature is in X-Webhook-Signature.
Values you need
| Variable | Source |
| $webhookSecret | Returned once when you create (or rotate) the subscription |
| $appSecret | Your partner Webhook App Secret, issued by Zencommerce during partner onboarding |
| $shopHash | X-Shop-Hash header |
| $webhookId | X-Webhook-Id header |
| $rawBody | Raw request body bytes (do not decode and re-encode before verifying) |
Per shop secret
$shopAwareSecret = hash_hmac(
'sha512',
$shopHash . ':' . $webhookSecret,
$appSecret
);
Request signature
$expectedSignature = sha1(
$webhookId . ':' . $shopAwareSecret . ':' . $rawBody
);
Compare with hash_equals($expectedSignature, $receivedSignature).
PHP example
<?php
function verifyZencommerceWebhook(
string $rawBody,
array $headers,
string $webhookSecret,
string $appSecret
): bool {
$shopHash = $headers['X-Shop-Hash']
?? $headers['x-shop-hash']
?? '';
$webhookId = $headers['X-Webhook-Id']
?? $headers['x-webhook-id']
?? '';
$received = $headers['X-Webhook-Signature']
?? $headers['x-webhook-signature']
?? '';
if ($shopHash === '' || $webhookId === '' || $received === '') {
return false;
}
$shopAwareSecret = hash_hmac(
'sha512',
$shopHash . ':' . $webhookSecret,
$appSecret
);
$expected = sha1($webhookId . ':' . $shopAwareSecret . ':' . $rawBody);
return hash_equals($expected, $received);
}
Always use a constant-time comparison (hash_equals or equivalent), not ===.
Fallback mode
If a partner Webhook App Secret is not configured for the environment, deliveries may use:
X-Webhook-Signature = HMAC-SHA256(rawBody, webhookSecret)
Production partner integrations should use the primary (shop-aware) signing mode with a provisioned Webhook App Secret. The app secret is never included in webhook payloads.
Implementation tips
- Use the lowercase hex string returned by hash_hmac in the SHA-1 construction (not raw binary).
- Normalize header names (HTTP headers are case-insensitive).
- Look up the subscription secret from your own secure store using X-Webhook-Id, then verify.
- Verify against the unmodified raw body before parsing JSON.
- Configure one expected signing mode — do not fall back automatically after a failed primary check.
- Signature verification alone does not prevent replay; design idempotent processing.