WooCommerce plugin
The Sarvex UCP WooCommerce plugin integrates your WooCommerce store with Sarvex's Google UCP checkout platform. It handles:
Generated from plugin/woocommerce/README.md in the Sarvex repository — edit the source there, not this page.
The Sarvex UCP WooCommerce plugin integrates your WooCommerce store with Sarvex’s Google UCP checkout platform. It handles:
- Signal Sending — Notifies Sarvex when products, prices, or inventory change
- Profile Proxy — Serves the UCP profile and proxies checkout requests
- Pairing — Securely pairs your store with Sarvex
Installation
Step 1: Download and Upload
- Download the plugin directory from the Sarvex repository
- Extract it to your WordPress
wp-content/plugins/directory - The plugin should appear in your WordPress Admin dashboard under Plugins
Step 2: Activate the Plugin
- Go to Plugins in the WordPress Admin
- Find Sarvex UCP Gateway
- Click Activate
Upon activation, the plugin will create the required configuration entries in your WordPress database.
Configuration
After activation, navigate to Sarvex UCP in the WordPress Admin menu to configure your store.
Required Settings
Sarvex Endpoint URL
- What it is: The URL of your Sarvex backend server
- Format:
https://sarvex.example.com(no trailing slash) - Example:
https://api.sarvex.example.com - Required: Yes
Pairing Code
- What it is: A unique code generated by the plugin for pairing with Sarvex
- How to use: Provide this code to Sarvex during the pairing process
- Status: Read-only (displayed automatically)
- Expires: This code is valid until you pair with Sarvex
How to Pair Your Store
-
Get your Pairing Code
- Navigate to Sarvex UCP settings in WordPress Admin
- Copy the Pairing Code displayed
-
Complete Pairing with Sarvex
- Provide the pairing code to your Sarvex account manager or use the Sarvex console
- Submit your store URL:
https://yourstore.example.com
-
Verify Configuration
- After pairing, the Merchant ID and HMAC Secret fields will populate automatically
- Both fields will display as read-only (hidden for security)
-
Start Sending Signals
- Once paired, any product, price, or inventory changes will automatically signal to Sarvex
- Check the plugin logs to verify signals are being sent
How It Works
Product and Inventory Signals
Whenever you:
- Add or update a product — A product signal is sent
- Update stock quantity — An inventory signal is sent
- Change stock status (In Stock → Out of Stock) — An inventory signal is sent
The plugin automatically sends a lean signal to Sarvex ({"sku": "...", "entity_kind": "product"}). Sarvex pulls the full product details from your store, so the signal contains only the SKU and entity type.
Profile Serving and Proxying
/.well-known/ucp (Profile Endpoint)
- Returns your store’s UCP profile configuration
- Cached for 1 hour for resilience
- If Sarvex is unreachable, serves the last-known-good profile
- Never requires authentication
/ucp/v1/* (Checkout Requests)
- Proxies checkout operations live to Sarvex
- Not cached (always fresh)
- Returns Sarvex’s response as-is to the agent
Troubleshooting
Signals Not Being Sent
Check pairing status:
- Verify Sarvex Endpoint URL is set
- Verify Merchant ID and HMAC Secret are populated (they appear after successful pairing)
Check network connectivity:
- Verify your server can reach the Sarvex endpoint URL
- Check firewall and proxy settings
Review logs:
- Log location:
/wp-content/uploads/sarvex-ucp.log - Check for errors like “Failed to send signal” or network timeouts
Pairing Code Not Accepted
- Verify the code is correct — Copy it exactly from the WordPress Admin
- Ensure it hasn’t expired — If pairing takes a long time, generate a new code by deactivating and reactivating the plugin
- Check Sarvex backend — Confirm the pairing request reached your Sarvex server
Profile Not Loading
If profile is unavailable:
- Check network connectivity to Sarvex endpoint
- Verify
X-Sarvex-*headers are being sent correctly - Review logs for
Failed to fetch profile from Sarvex
If profile is cached:
- The plugin will serve the last-known-good profile if Sarvex is temporarily unreachable
- This is intentional (graceful degradation)
- Check logs for
Serving cached profile due to Sarvex unreachable
Checkout Requests Failing
Check request proxying:
- Verify
/ucp/v1/*requests are reaching Sarvex - Check response status codes in logs
- Confirm HMAC headers are valid
Check Sarvex endpoint:
- Verify the endpoint URL is correct
- Confirm Sarvex is running and reachable
Security Considerations
HMAC Signing
- All requests to Sarvex are signed with HMAC-SHA256
- The HMAC Secret is stored securely in the WordPress database
- Never share or expose your HMAC Secret
Credential Storage
- Merchant ID and HMAC Secret are stored in WordPress
wp_options - Ensure your WordPress database is backed up and access is restricted
- Regularly rotate your HMAC Secret through Sarvex
Data in Signals
- Product signals contain only the SKU and entity type
- No payment credentials, PII, or sensitive data is sent in signals
- All data is encrypted in transit (HTTPS)
Logging
The plugin logs all signals, profile fetches, and errors to:
/wp-content/uploads/sarvex-ucp.log
Log format:
[2026-06-15 14:30:45] [INFO] Signal sent {"signal":{"sku":"ABC123","entity_kind":"product"},"sequence":5}
[2026-06-15 14:31:00] [WARN] Failed to fetch profile from Sarvex {"error":"Connection timeout"}
Development
Running Tests
cd plugin/woocommerce
phpunit tests/
Plugin Structure
plugin/woocommerce/
├── sarvex-ucp-gateway.php # Main plugin file
├── src/
│ ├── Autoloader.php # PSR-4 autoloader
│ ├── Plugin.php # Main orchestrator
│ ├── Logger.php # Logging utility
│ ├── HMAC.php # HMAC signing
│ ├── SignalSender.php # Product/inventory signals
│ ├── PairingManager.php # Pairing handshake
│ └── ProfileProxy.php # Profile serving and request proxying
├── tests/
│ ├── HMACTest.php
│ ├── PairingManagerTest.php
│ └── ProfileProxyTest.php
└── README.md # This file
Support
For issues or questions:
- Check the logs —
/wp-content/uploads/sarvex-ucp.log - Verify configuration — Ensure all required fields are populated
- Contact Sarvex support — Provide logs and configuration details (sanitize HMAC secret)
License
This plugin is part of Sarvex and is licensed under the Apache License 2.0.
Note: the WordPress.org plugin directory requires GPL-compatible licensing, so this plugin is distributed from this repository rather than that directory.