VibeFox PayU India for WooCommerce — Help
Requirements
WordPress: 5.8 or later.
WooCommerce: 6.0 or later, installed and active. The plugin refuses to activate without it; if WooCommerce is turned off later, the plugin does nothing and shows a notice in the admin area.
PHP: 8.0 or later.
Store currency: Indian Rupee (INR). PayU India charges in rupees only. For other currencies the payment method is hidden at checkout.
Phone number: PayU requires a phone number for every payment. Make the phone field required, or at least visible, in your checkout.
PayU India account: you need the Merchant Key and Merchant Salt (v1) from PayU Dashboard > Payment Gateway > Key Salt Details. Switch the dashboard to Test Mode to see the test pair. Use Salt v1, not Salt v2.
Internet access to your site: needed for the optional webhook. Without it, orders are confirmed when the customer returns from PayU.
VibeFox license key: bought on vibefox.net. One key works on one domain.
Installation
1. In WordPress go to Plugins > Add New > Upload Plugin, choose the plugin ZIP file and click Install Now. You can also upload the wcp_payu_india_payment folder to /wp-content/plugins/ by FTP.
2. Click Activate.
3. Open the settings: WooCommerce > Settings > Payments > PayU India > Manage, or click Settings under the plugin name on the Plugins page.
4. Enter your VibeFox license key in the license block at the top of the page and click Activate.
5. Enter the Test Merchant Key and Salt and the Live Merchant Key and Salt (see Configuration).
6. Recommended: in PayU Dashboard > Webhooks, add the webhook URL shown on the settings page for successful and failed payments.
7. Choose the Mode and turn on Enable/Disable. Test a payment in Test mode, then switch to Live.
Configuration
All settings are on one page: WooCommerce > Settings > Payments > PayU India. Above the fields the page warns you when the key or salt of the current mode is missing, shows Test mode is active: payments go to test.payu.in and no real money is charged. in Test mode, and warns you when the store currency is not INR (the gateway is then hidden at checkout).
When you save, spaces and line breaks are removed from keys and salts, because a salt with a pasted space would make every PayU response fail the check.
General
Enable/Disable: Enable PayU India Payment Gateway turns the payment method on or off. Default: off.
Title: the payment method title the customer sees during checkout. Default: PayU India.
Description: the payment method description the customer sees during checkout. Default: Pay securely via Credit/Debit Card, NetBanking, UPI, or Wallets through PayU.
API credentials
Copy the Merchant Key and Merchant Salt (v1) from PayU Dashboard > Payment Gateway > Key Salt Details. Switch the dashboard to Test Mode for the test pair.
Mode: which PayU environment new payments use.
Refunds always go to the mode the payment was made in.
Live Merchant Key: your live PayU Merchant Key.
Live Merchant Salt (v1): your live PayU Merchant Salt (v1). It signs requests and verifies PayU responses. Keep it secret.
Test Merchant Key: your PayU test Merchant Key, used in Test mode only.
Test Merchant Salt (v1): your PayU test Merchant Salt (v1), used in Test mode only.
Return and webhook URLs
Return URL: looks like https://your-site/wc-api/payu_p_callback/. It is sent to PayU automatically with every payment; nothing has to be configured.
Webhook URL: looks like https://your-site/wc-api/payu_p_webhook/. Optional, but recommended: it confirms payments even if the customer closes the browser before returning. Add it in PayU Dashboard > Webhooks for successful and failed payments. Copy the URL exactly as the settings page shows it.
Advanced
Verify Payment: Double-check every successful payment with the PayU verify_payment API. Recommended. If the check cannot be completed, the order is put on hold instead of being marked paid. Default: on.
Enable Logging: Log gateway events for troubleshooting. Written to WooCommerce > Status > Logs, source wcp_payu_india_payment. Errors and warnings are always logged; this option adds the other events. Keys, salts and customer personal data are never logged. Default: off.
Delete data on uninstall: Delete the plugin settings and logs when the plugin is deleted (orders are never deleted). Default: off.
Checkout
The customer chooses the payment method (by default PayU India) and places the order. If the order has no billing phone (or shipping phone), the customer sees PayU India requires a phone number. Please enter your phone number and try again. Otherwise the customer goes to a short page Thank you for your order. You will be redirected to PayU to complete your payment., which sends a signed payment request to the PayU hosted checkout. There the customer pays by card, NetBanking, UPI or wallet.
Every payment page gets its own PayU transaction ID, stored on the order with its amount and mode. A payment made in an older open payment page of the same order is still accepted. A paid, on-hold or cancelled order never gets a new payment form, so the browser Back button cannot start a second payment.
PayU sends the result back with the customer and, if configured, by webhook. A result is accepted only with a valid PayU hash made with the key and salt of the mode in which the payment was started, and only for a transaction ID issued for that order. With Verify Payment on, a successful result is also checked with the PayU verify_payment API. The paid amount must equal the order total to the paisa, in INR. The order is marked paid only after PayU confirms it this way. The plugin handles these PayU results:
After a successful or pending payment the customer sees the order received page. After an unsuccessful payment the customer comes back to the checkout with a message: Payment was not completed. Please try again or choose a different payment method., Payment was cancelled. You may try again. or, when the result could not be checked, We could not confirm the payment result. If your account was charged, please contact us before paying again. The messages work on the classic checkout and on the Checkout block.
The payment method works on the classic checkout, on the Checkout block and on the Pay for order page. It is compatible with WooCommerce High-Performance Order Storage (HPOS).
The plugin charges in INR only and has no multi-currency processing (MCP). It has no saved cards or tokenization, no WooCommerce Subscriptions, no on-site (seamless) card form, no EMI or offer management and no PayU one-click checkout.
Orders and refunds
Order statuses
Pending payment: the customer was sent to PayU and has not paid yet.
Processing: the payment was confirmed. The order note shows the PayU transaction ID (mihpayid), the payment mode and the bank code. The transaction ID of the order is the PayU mihpayid. Orders with only virtual downloadable products become Completed, as WooCommerce does by default.
On hold: the payment is still pending at PayU (UPI or NetBanking), the paid amount or currency differs from the order, the verify_payment API could not be reached or did not confirm the payment yet, or a payment arrived for an order that had been cancelled. The order note tells the reason. Check the transaction in the PayU Dashboard and complete or refund it. When the verification failed, the order is confirmed automatically on the next delivery of the result.
Failed: the payment was declined or cancelled. The customer can pay again.
If PayU reports another successful payment for an order that is already paid, a note asks you to refund the duplicate in the PayU Dashboard.
Refunds
Open the order, click Refund, enter the amount and click Refund via PayU India (the button shows your Title). Full and partial refunds are supported; the amount must be greater than zero. The refund is sent through the PayU refund API with the key and salt of the mode the payment was made in, so those credentials must be set. If PayU rejects the refund, WooCommerce shows PayU's message and no refund is recorded.
PayU queues refunds and completes them asynchronously; the customer usually receives the money in 5–7 working days. The order note shows the amount, the PayU request ID and the reason. The plugin does not check the refund status later.
License key
The plugin works with a VibeFox license key from vibefox.net. The license block is at the top of WooCommerce > Settings > Payments > PayU India. Paste the key into License key and click Activate. The block shows the status, for example the date the license is active until and your domain. Use Check now to check the status again, Change key to enter another key and Remove key to remove it from this site. The link Manage licenses and domains in your account opens your vibefox.net account.
One key works on one domain. Removing the key from a site does not free its domain slot. Free the slot in your vibefox.net account.
Without an active key, PayU India is not shown to customers at checkout. If a payment is started anyway, the customer sees This payment method is not available. Please choose another one. Logged-in store managers still see the payment method, marked (unlicensed — visible to admins only), so you can set up and test the plugin before you buy a key. A reminder appears on the Plugins page and on WooCommerce pages. Existing orders are not affected: payments already started are still confirmed, and refunds work.
When a license expires, the plugin keeps working, but updates and support need a renewal. The status is checked again automatically in the background.
Troubleshooting
PayU India does not appear at checkout: check that the license is active, Enable/Disable is on and the key and salt of the selected Mode are filled in. Check that the store currency (or the order currency on the Pay for order page) is INR. The settings page shows a warning for each of these problems.
The payment went through, but the order stays Pending payment: the customer did not come back to the store, and no webhook arrived. Add the webhook URL from the settings in PayU Dashboard > Webhooks for successful and failed payments, and make sure it is reachable from the internet.
Webhook answers invalid_signature: the PayU hash did not match. Check that the key and salt of the payment's mode are correct and that Salt v1 is used, not Salt v2. The order is not changed.
Webhook answers not_configured: the key or salt of the mode in which the payment was started is missing. Enter them; PayU retries the webhook.
Webhook answers verify_unavailable: the verify_payment API could not confirm the payment yet. The order is on hold, and the next delivery verifies again.
The customer sees PayU India requires a phone number: make the phone field required or visible in the checkout. The billing phone is used, or the shipping phone when only that one is filled.
The order is On hold: read the order note. The reason is a pending UPI or NetBanking payment, an amount or currency mismatch, a failed or pending verification, or a payment for a cancelled order.
Refund fails: PayU transaction ID not found for this order. means the order has no PayU payment. A message that the Merchant Key/Salt of the payment's mode are not set means you must enter the credentials of that mode first.
Too little in the log: errors and warnings are always written; turn on Enable Logging to see every PayU request and result as well.
Developer hooks: the payu_p_request_fields filter changes the payment request fields before they are signed; the payu_p_icon filter changes the checkout icon.
The license block shows an error: follow the message in the block. For example, if the key is already used on another domain, free a slot in your vibefox.net account and click Check now. If the site address changed, click Check now to activate the key for the new domain. If the license server cannot be reached, the plugin keeps working on the last known status.
Uninstall
Deactivating the plugin keeps all data. To remove it, deactivate and delete it on the Plugins page. The license key and license status of this plugin are always removed. The gateway settings and the logs of this plugin (log files and rows of the WooCommerce database log) are removed only if Delete data on uninstall was on. Otherwise they stay for a later re-install. Existing orders keep their payment notes, PayU transaction IDs and refund request IDs.
PayU is a trademark of its respective owner. This plugin is not affiliated with or endorsed by PayU.
