Back

VibeFox IntaSend for WooCommerce — Help

Requirements

WordPress: 6.2 or later.

WooCommerce: 8.0 or later, installed and active. The plugin refuses to activate without it.

PHP: 8.0 or later.

HTTPS: IntaSend requires HTTPS for live payments and webhooks. The settings page warns you when live mode is on and the store address is not HTTPS.

IntaSend account: you need the publishable key (ISPubKey_...) and the secret key (ISSecretKey_...) of your IntaSend account, for the sandbox, for live or both, and a webhook with a challenge phrase in the IntaSend dashboard (see Configuration). The publishable key creates the checkout. The secret key is used only on your server to ask IntaSend for the payment status.

Store currency: KES, USD, EUR, GBP, UGX, TZS, NGN, GHS, XAF or XOF. For other currencies the payment method is hidden.

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_intasend_pay folder to /wp-content/plugins/ by FTP.

2. Click Activate.

3. Open the settings: WooCommerce > Settings > Payments > IntaSend > 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. Paste your IntaSend sandbox and/or live keys, add the webhook in the IntaSend dashboard and enter the same challenge in the plugin (see Configuration).

6. Turn on Enable/Disable. Test a payment with Test mode on, then untick Test mode to accept real payments.

Configuration

All settings are on one page: WooCommerce > Settings > Payments > IntaSend. Above the fields a status box shows Test mode: IntaSend sandbox, no real money is charged. or Live mode: real payments are accepted. It also warns you when the keys of the current mode are missing or wrong (the payment method is then hidden at checkout), when the store currency is not supported, when no webhook challenge is set and when live mode is used without HTTPS. In the list of payment methods, IntaSend is marked as needing setup until the keys of the current mode are correct. Pasted keys are trimmed when you save.

General

Enable/Disable: Enable IntaSend turns the payment method on or off. Default: off.

Title: the payment method name customers see at checkout. Default: IntaSend (M-Pesa, card).

Description: the text shown under the payment method at checkout. Default: You will be redirected to IntaSend to pay securely with M-Pesa, card or another available method.

API keys

Get the keys in the IntaSend dashboard under Settings > API Keys, separately in the sandbox dashboard and in the live dashboard. Test mode uses the sandbox keys and the sandbox API, live mode uses the live keys and the live API. The plugin checks that the publishable key starts with ISPubKey_, the secret key with ISSecretKey_, and that the keys belong to the current mode: sandbox keys contain _test, live keys contain _live. If not, the payment method is hidden and the status box explains why.

Test mode: Use the IntaSend sandbox (no real money is charged). Default: on. Untick it to accept real payments with the live keys. While test mode is on, the checkout shows TEST MODE - IntaSend sandbox, no real money is charged. under the payment method.

Sandbox publishable key: starts with ISPubKey_test. It identifies your business when a checkout is created.

Sandbox secret key: starts with ISSecretKey_test. Used only on your server to confirm payments with the Payment Status API.

Live publishable key: starts with ISPubKey_live.

Live secret key: starts with ISSecretKey_live. Used only on your server to confirm payments.

Webhook

The webhook tells your store that a payment has been made, even when the customer does not come back to the store (closed browser, M-Pesa confirmed later). In the IntaSend dashboard, in the sandbox and in live, open Webhooks and add the URL shown in this section of the settings. It looks like https://your-site/wc-api/intasend_pay/. Enter a challenge phrase there and the same phrase in the plugin. Use one challenge for the sandbox and live.

Webhook challenge: the same challenge as in the IntaSend dashboard. Webhooks with another challenge are rejected. While this field is empty, webhooks are not processed and payments are confirmed only when the customer returns to the store. Such webhooks are answered as ignored, not as an error, so IntaSend does not disable the webhook before you enter the challenge.

The plugin reacts to these payment states reported by IntaSend. Each time it asks the Payment Status API for the real state before changing the order:

COMPLETE: the payment was made. The order is marked paid after the amount and currency check.
FAILED or CANCELED: the payment failed. The order becomes Failed if it still waits for this payment attempt.
PARTIAL: the invoice was paid partially. The order is put on hold.
PENDING, PROCESSING or RETRY: the payment is still in progress. The order is not changed until the final state arrives.

Notifications that are not checkout payments of this store, for example payment links or send-money events of the same IntaSend account, are answered with OK and ignored, so IntaSend does not disable the webhook.

Advanced

Debug log: Log checkout, return and webhook events in WooCommerce > Status > Logs, source wcp_intasend_pay. Errors are always logged. API keys and customer data are never logged. Default: off.

Delete data on uninstall: Delete the gateway settings and logs when the plugin is deleted. IntaSend references saved on orders are payment history and are always kept. Deactivating the plugin never deletes anything. Default: off.

Checkout

The customer chooses the payment method (by default IntaSend (M-Pesa, card)) and places the order. The plugin creates an IntaSend checkout for the order total in the order currency and sends the customer to the IntaSend hosted checkout. There the customer pays with M-Pesa, a card or another method enabled on your IntaSend account. The billing e-mail, name, address, phone and country are passed to IntaSend when they match the IntaSend field rules. Empty or unsuitable fields are left out.

After paying, the customer returns to your store. The order is marked paid only after IntaSend confirms it: the plugin asks the Payment Status API when the customer returns and when the webhook arrives. If the payment is not confirmed yet, the order received page shows Your payment is being confirmed by IntaSend (M-Pesa confirmations can take a minute). You will receive an e-mail as soon as it is confirmed. If the order was put on hold, it shows Your payment was received and your order is being reviewed. We will contact you if anything is needed.

If the payment failed or the customer came back without paying, the customer returns to the checkout (or to the Pay for order page) with the message The payment was not successful. Please try again or choose another payment method. (with the IntaSend reason, if given) or The payment was not completed. Please try again or choose another payment method. The customer can pay the order again. Each attempt gets its own IntaSend reference.

If IntaSend cannot start the payment, the customer sees IntaSend could not start the payment: with the reason from IntaSend, or IntaSend is temporarily unavailable. Please try again in a moment or choose another payment method. The details are written to the log.

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 takes one-time payments only. Refunds are not sent to IntaSend from WooCommerce, and it has no saved cards, subscriptions or inline (popup) payment form. Older checkout links of the same order cannot be cancelled at IntaSend.

Orders

Order statuses

Pending payment: the customer was sent to IntaSend and has not paid yet, or IntaSend has not confirmed the payment yet.

Processing or Completed: the payment was confirmed. WooCommerce sets the usual status for a paid order. The order note shows the IntaSend invoice, the payment method at IntaSend, the amount, the mode (sandbox or live) and how it was confirmed (webhook or customer return). The transaction ID is the IntaSend invoice ID.

On hold: IntaSend reported a different amount or currency than the order total, a partial payment, or a payment that arrived after the order had been cancelled. The order note explains it. Check the payment in the IntaSend dashboard and fulfil the order or refund the payment.

Failed: the latest payment attempt failed. The note shows the IntaSend reason. The customer can try again.

If a second payment arrives for an order that is already paid, the order is not changed again. A note asks you to refund it in the IntaSend dashboard if it is a duplicate. A payment for a refunded order adds a note and does not reopen the order.

Refunds

Refunds are not sent to IntaSend from WooCommerce. Refund the payment in the IntaSend dashboard and record the refund in WooCommerce manually.

License key

The plugin works with a VibeFox license key from vibefox.net. The license block is at the top of WooCommerce > Settings > Payments > IntaSend. 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, IntaSend 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.

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

IntaSend does not appear at checkout: check that the license is active, Enable/Disable is on and the keys of the current mode are filled in and belong to that mode: sandbox keys (with _test) in test mode, live keys (with _live) in live mode. The store currency must be supported. The status box at the top of the settings page shows what is wrong.

The payment went through, but the order stays Pending payment: M-Pesa confirmations can take a moment. The webhook confirms the order when IntaSend reports the final state. Check that the webhook URL in the IntaSend dashboard (sandbox or live, the mode you use) is exactly the one shown in the settings and that the challenge there is the same as Webhook challenge.

Webhook answers Ignored: webhook challenge not configured: Webhook challenge is empty. Enter the challenge from the IntaSend dashboard.

Webhook answers Invalid challenge: the challenge in IntaSend and in the plugin differ.

Webhook answers Verification unavailable, retry later or Busy, retry later: IntaSend could not be reached at that moment, or the order was being confirmed by another request. IntaSend retries the webhook.

Webhook answers Invoice not verified or Invoice does not match the reference: IntaSend did not confirm that this invoice belongs to the order. The order is not changed.

Order is On hold: read the order note. The paid amount or currency differed from the order, the payment was partial, or it came after the order was cancelled. Check the payment in the IntaSend dashboard.

The customer sees an error when placing the order: turn on Debug log and look at WooCommerce > Status > Logs, source wcp_intasend_pay. The order total must be greater than zero. If the log says that the return URL contains characters IntaSend does not accept, the store address or a language parameter in it is the cause.

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 are removed only if Delete data on uninstall was on. Otherwise they stay for a later re-install. Existing orders keep their payment notes and transaction IDs.

IntaSend is a trademark of its respective owner. This plugin is not affiliated with or endorsed by IntaSend.