General Questions
What is ZIGI?
What is ZIGI?
ZIGI is a mobile payment application used in Guatemala that allows users to make payments by scanning QR codes. It’s backed by Banco Industrial and provides a secure way to transfer money digitally.The Paga con ZIGI plugin enables your WooCommerce store to accept payments through ZIGI’s QR code system. Customers scan your QR code with the ZIGI app, complete the payment, and upload a receipt to confirm the transaction.Key features:
- QR code-based payments
- No complex API integration required
- Low transaction fees
- Popular in Guatemala
- Backed by Banco Industrial
ZIGI is specifically designed for the Guatemalan market. This payment method is most suitable for stores serving customers in Guatemala.
How does the payment process work?
How does the payment process work?
The Paga con ZIGI plugin functions similarly to a bank transfer payment method. Here’s the complete workflow:1. Customer selects payment method
- At checkout, customer chooses “Paga con ZIGI”
- Clicks “Place Order” button
- A popup modal appears showing your ZIGI QR code
- The total amount to pay is displayed
- Optional: Your affiliated phone number is shown
- Customer opens ZIGI app on their phone
- Scans the QR code from the popup
- Completes payment in the ZIGI app
- Takes a screenshot of the payment receipt
- Customer clicks “Continuar” (Continue) in the popup
- Uploads the payment receipt screenshot
- Can drag and drop or select file
- Only image files (JPG, PNG, GIF) are accepted
- Order is created with “On Hold” status
- Receipt is attached to the order
- Customer receives order confirmation
- Cart is emptied
- Store admin reviews the receipt in order details
- Verifies payment was received in ZIGI account
- Manually updates order status to “Processing” or “Completed”
What are the system requirements?
What are the system requirements?
WordPress Requirements:
- WordPress 5.2 or higher
- Tested up to WordPress 6.6
- WooCommerce plugin must be installed and active
- Tested up to WooCommerce 9.3
- Compatible with WooCommerce High-Performance Order Storage (HPOS)
- PHP 7.4 or higher
- Required PHP extensions:
fileinfo(for file type validation)gdorimagick(for image handling)
- File upload support enabled
- Writable
wp-content/uploads/directory - No strict file upload restrictions
- Standard WordPress filesystem access
- Modern browser with JavaScript enabled
- Support for HTML5 drag and drop (for receipt upload)
- Cookies enabled
- Active ZIGI account in Guatemala
- QR code for receiving payments
- Phone number affiliated with ZIGI (optional but recommended)
Does it work with the latest WordPress and WooCommerce versions?
Does it work with the latest WordPress and WooCommerce versions?
Current Compatibility:The plugin version 2.0.0 has been tested with:Future Updates:While the plugin is tested up to WordPress 6.6 and WooCommerce 9.3, it should continue working with newer versions as it uses stable, well-documented APIs.
- WordPress: Up to version 6.6
- WooCommerce: Up to version 9.3
- PHP: 7.4 and higher
wp_handle_upload()for file uploadswp_enqueue_script()/wp_enqueue_style()for assetsadd_action()/add_filter()for hooks- WordPress Filesystem API
WC_Payment_Gateway, which is a stable API. Key compatibility features:- Declares WooCommerce as required plugin dependency
- Compatible with both traditional and HPOS order storage
- Uses WooCommerce order meta API
- Follows WooCommerce payment gateway standards
If you’re using a newer version of WordPress or WooCommerce than tested, the plugin should still work. However, always test on a staging environment first before updating production sites.
Is the plugin compatible with HPOS (High-Performance Order Storage)?
Is the plugin compatible with HPOS (High-Performance Order Storage)?
Yes, the plugin is fully compatible with WooCommerce’s High-Performance Order Storage (HPOS).What is HPOS?HPOS is WooCommerce’s modern order storage system that uses custom database tables instead of WordPress posts. It provides:2. Uses WooCommerce order meta APIReceipt data is stored using HPOS-compatible methods:3. Meta box registrationThe receipt display works with both systems (The plugin will work seamlessly with:
- Better performance for stores with many orders
- Faster order queries
- Improved scalability
- Available in WooCommerce 7.0+
paga-con-zigi.php:39-46), the plugin explicitly declares HPOS support:functions.php:207-211):- Traditional orders:
shop_orderpost type - HPOS orders:
woocommerce_page_wc-ordersscreen
- Traditional post-based orders
- HPOS custom table orders
- Mixed environments during migration
What file types are accepted for payment receipts?
What file types are accepted for payment receipts?
Accepted File Types:The plugin accepts image files only:Typical receipt screenshots are:This prevents:
- JPG / JPEG - Recommended for photos
- PNG - Best for screenshots
- GIF - Supported but not recommended
woopro-front.js:52)- Checks MIME type matches
image/* - Validates before upload starts
- Provides immediate feedback to user
functions.php:161-166)- Uses
wp_check_filetype_and_ext()for secure validation - Checks actual file content, not just extension
- Only allows:
jpg,jpeg,png,gif - Returns error if invalid type
- Prevents upload of executable files (.php, .exe, etc.)
- Customers typically screenshot their ZIGI app
- Images can be previewed directly in admin
- Reduces security risks
- Size: 50KB - 2MB
- Dimensions: 1080x1920 (phone screenshot)
functions.php:180-182):- File name conflicts
- Security issues from special characters
- Overwrites of existing files
How and where are payment receipts stored?
How and where are payment receipts stored?
Storage Location:Receipts are stored in a custom directory:Directory Creation:The directory is automatically created when the first receipt is uploaded (2. Hidden checkout field:Temporarily stored in
functions.php:102-126):- Created using WordPress Filesystem API
- Permissions set to
755(readable but not writable by public) - Includes
index.htmlfile to prevent directory listing
- Has a unique filename:
original-name-timestamp.jpg - Timestamp prevents overwrites:
1234567890 - Stored directly in the custom directory (no subdirectories)
#zigi-payment-qrcode input during checkout, then saved to order.Access Control:Receipts are accessible via:- Admin: Meta box on order edit page
- Customer: Not directly accessible after order placement
- Public: URL is obscure but technically accessible if known
- Directory index disabled:
index.htmlprevents listing all receipts
- Nonce verification:
- Upload requires valid WordPress nonce
- Prevents unauthorized uploads
- File type validation:
- Only images allowed
- MIME type verified server-side
- WordPress filesystem API:
- Proper permissions handling
- Secure file operations
wp-content/uploads/is included- Both files and database are backed up
- Order meta data is preserved
- Orders are deleted
- Plugin is deactivated
- Plugin is uninstalled
Receipt files are not attached to WordPress Media Library. They exist as standalone files referenced by order meta data.
Is this plugin secure?
Is this plugin secure?
Yes, the plugin follows WordPress security best practices.Security Features:1. Nonce VerificationAll AJAX requests require valid WordPress nonces (Prevents:4. Output EscapingAll outputs are escaped:Prevents:Prevents direct file access.What the plugin does NOT do:❌ No sensitive data in URLs or GET parameters
❌ No eval() or similar dangerous functions
❌ No external API calls that could leak data
❌ No database credentials or API keys required
❌ No user passwords or payment card data storedPrivacy Considerations:
functions.php:132-135):- Cross-Site Request Forgery (CSRF)
- Unauthorized file uploads
- Replay attacks
- Client-side: JavaScript MIME type check
- Server-side:
wp_check_filetype_and_ext() - Whitelist: Only
jpg,jpeg,png,gifallowed
- Upload of executable files (.php, .exe)
- MIME type spoofing
- Malicious file uploads
functions.php:149-155):- Cross-Site Scripting (XSS)
- HTML injection
- JavaScript injection
- Uses
wp_handle_upload()- WordPress standard function - Validates actual file content, not just extension
- Checks
is_uploaded_file()to prevent file inclusion attacks - Custom upload directory prevents overwriting system files
- Uses WooCommerce order meta API (prepared statements)
- No raw SQL queries
- WordPress escaping and sanitization
index.htmlin upload directory prevents listing- No directory traversal vulnerabilities
- Proper file permissions (755 for directories, 644 for files)
- Receipt images may contain personal information
- Stored on your server (not sent to external services)
- Access controlled via WordPress permissions
- Consider GDPR compliance when storing customer data
- Use HTTPS to encrypt data in transit
- Limit file upload sizes in PHP configuration
- Regular WordPress updates for security patches
- Strong admin passwords to protect order data
- Regular backups including receipts directory
Can I customize the messages and text shown to customers?
Can I customize the messages and text shown to customers?
Yes, all customer-facing messages are fully customizable through the plugin settings.Customizable Settings:1. Payment Method TitleTranslation Support:The plugin is translation-ready:Static Text (not customizable via settings):Some interface text is hardcoded but translatable:
- Setting: “Título”
- Default: “Paga con ZIGI”
- Where shown: Checkout payment method selection
- Example: Change to “Pago con QR ZIGI” or “Transferencia ZIGI”
- Setting: “Descripción”
- Default: “Método de pago vía QR ZIGI. Al realizar el pago, debes adjuntar el comprobante con la orden de compra.”
- Where shown: Below payment method at checkout
- Purpose: Brief explanation before customer selects method
- Setting: “Descripción del Popup”
- Default: “Debes escanear el código QR, hacer clic en continuar para adjuntar la captura (es el único comprobante de pago) y podrás completar la compra.”
- Where shown: Inside QR code popup modal
- Purpose: Step-by-step instructions for customer
- Setting: “Mensaje de Monto Límite”
- Default: “Este método no permite pagos mayores a 500 por día.”
- Where shown: In popup when cart total exceeds limit
- Purpose: Inform customers of transaction restrictions
- Setting: “Monto Límite”
- Default: Empty (no limit)
- Example: Set to
500to prevent payments over 500 GTQ/USD - Behavior: If cart total exceeds limit, “Continue” button is hidden
- Setting: “Número de Teléfono Afiliado”
- Default: Empty
- Where shown: In popup above QR code as clickable link
- Purpose: Allow customers to add contact before paying
- Format: Displayed as: “Agregar Contacto: +502 1234 5678”
- Text Domain:
paga-con-zigi - Translation Files: Create
.po/.mofiles for your language - Location:
wp-content/languages/plugins/ - Tools: Use Loco Translate or Poedit
- “Continuar” (Continue button)
- “Completar Compra” (Complete Purchase button)
- “Arrastra y suelta el archivo” (Drag and drop file)
- “Seleccionar Archivo” (Select File button)
- Error messages
<strong>for bold<em>for italic<br>for line breaks<a>for links
wp_kses_post() for security.Does this plugin integrate with ZIGI's API?
Does this plugin integrate with ZIGI's API?
No, this plugin does not integrate with ZIGI’s API or any external service.How it works instead:The plugin provides a manual payment method similar to bank transfer:
- You provide your QR code - Upload your ZIGI QR code image to the plugin settings
- Customer scans and pays - Customer uses their ZIGI app to scan and pay
- Customer uploads receipt - Customer provides proof of payment via screenshot
- You verify manually - You check your ZIGI account and approve orders
- ✅ No API credentials needed
- ✅ Works with any ZIGI account
- ✅ No monthly fees or API costs
- ✅ Simple setup - just upload QR code
- ✅ No dependencies on external services
- ✅ Complete control over verification process
- ✅ No API rate limits or downtime
- ❌ Manual order verification required
- ❌ Orders not automatically completed
- ❌ Relies on customer to upload receipt
- ❌ No real-time payment confirmation
- ❌ More admin work for high-volume stores
- ZIGI to provide a merchant API
- API credentials and authentication
- Webhook integration for real-time updates
- Additional development and maintenance
- Low to medium volume stores
- Stores with staff to verify payments
- Situations where payment security is critical
- Merchants who want simple, no-cost integration
- High-volume stores with hundreds of daily orders
- Fully automated operations
- Stores requiring instant order fulfillment
If ZIGI releases a merchant API in the future, automatic payment verification could be added in a future plugin version. For now, the manual approach ensures maximum compatibility and security.
What happens if a customer doesn't upload a receipt?
What happens if a customer doesn't upload a receipt?
The order process will not complete.The upload is required for checkout completion.Technical Implementation:The checkout flow requires receipt upload (Without a receipt:
woopro-front.js:106-114):- Order is not submitted
- Payment is not recorded
- Customer remains on checkout page
- Alert: “Debes seleccionar un archivo.”
- Customer clicks “Place Order”
- QR popup appears
- Customer scans QR and pays
- Clicks “Continuar” button
- Must upload receipt screenshot
- Clicks “Completar Compra”
- If no file selected: Alert appears, order not placed
- If file uploaded: Order placed successfully
- Payment is made in ZIGI
- Customer closes popup without uploading
- Order is not created
- Cart remains full
- Solution: Customer must start checkout again
- Customer uploads random image
- Order is created with wrong receipt
- Status: “On Hold”
- Admin sees wrong receipt
- Solution: Admin can:
- Contact customer for correct receipt
- Cancel order if fraud suspected
- Manually verify payment in ZIGI account
- File is selected but upload fails
- Error message: “Error de red” or “Falló la carga”
- Order is not created
- Solution:
- Check troubleshooting guide
- Verify file size and type
- Try different browser
- Contact site admin
- Customer emails receipt to support
- Admin manually adds image URL to order meta
- Or mark order as paid based on email proof
- Orders without payment
- Claiming payment methods without completing
- Testing payment flows without intent to pay
- Customize popup description to emphasize screenshot requirement
- Add instructions to checkout page
- Provide example screenshots
- Train customer support to assist
Can I use this plugin with other payment gateways?
Can I use this plugin with other payment gateways?
Yes, Paga con ZIGI works alongside other WooCommerce payment gateways.Multi-Gateway Setup:Customers can choose from:Each method shows its own:
- Paga con ZIGI (QR payments)
- Credit/debit cards
- PayPal
- Bank transfer
- Cash on delivery
- Any other WooCommerce payment method
- Install and activate multiple payment plugins
- Go to
WooCommerce > Settings > Payments - Enable all payment methods you want to offer
- Arrange display order via drag-and-drop
- Configure each gateway independently
- ✅ Extends standard
WC_Payment_Gatewayclass - ✅ Uses unique gateway ID:
zigi_payment - ✅ Follows WooCommerce gateway conventions
- ✅ Doesn’t modify other payment methods
- ✅ Self-contained JavaScript and CSS
- Description
- Form fields
- Instructions
- Alongside cards - For customers who prefer mobile payments
- Instead of bank transfer - Faster than traditional transfers
- For local customers - ZIGI is Guatemala-specific
- For lower fees - May have lower transaction costs
- Set “Monto Límite” to restrict high-value orders
- Force expensive orders to use other methods
- Use plugins like “WooCommerce Payment Gateway Based Fees”
- Only show ZIGI for Guatemala
- Use conditional logic plugins
- Disable ZIGI for specific products
- Built-in amount limit feature
- Automatically hides “Continue” button if exceeded
- Go to
WooCommerce > Settings > Payments - Drag gateways to reorder
- Top gateway is default selection
- Consider customer preferences
- Enable WooCommerce test mode on other gateways
- Use real ZIGI account (no test mode available)
- Test each payment method separately
- Verify order meta data is correct
- Check admin order page shows correct payment method
- WooCommerce Stripe
- WooCommerce PayPal
- Square for WooCommerce
- Any standard WooCommerce gateway
- Custom checkout page builders
- Heavily modified checkout flows
- One-page checkout plugins (may require customization)
Additional Questions?
If your question isn’t answered here:- Check the Troubleshooting guide for technical issues
- Review the Configuration Guide for setup questions
- Contact support at [email protected]
- Visit https://neopunto.com for more resources
This plugin is developed and maintained by Neopunto. For feature requests or bug reports, please contact support with detailed information about your use case.