VibeFox IntaSend for PrestaShop — Help
Requirements
PrestaShop: 8.0 to 9.x.
PHP: 8.0 or later with the cURL extension. The module refuses to install on older PHP versions or without cURL.
HTTPS: IntaSend requires HTTPS for live payments and webhooks. The settings page warns you when live mode is on and the shop does not use 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.
Shop 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 the back office go to Modules > Module Manager and click Upload a module. Choose the module ZIP file.
2. When the upload finishes, click Configure, or find VibeFox IntaSend Pay Gateway in the module list later and click Configure.
3. Paste your VibeFox license key into License key in the license block at the top of the Configure page and click Activate (see License key).
4. Paste your IntaSend sandbox and/or live keys, add the webhook in the IntaSend dashboard and enter the same challenge in the module (see Configuration).
5. Turn on Enable/Disable and click Save. Test a payment with Test mode on, then turn Test mode off to accept real payments.
On install the module creates the order status IntaSend payment on hold. PrestaShop offers a new payment module for all currencies, countries and customer groups. You can limit them in Payment > Preferences.
Configuration
All settings are on the module page: Modules > Module Manager > VibeFox IntaSend Pay Gateway > Configure. Each section has its own Save button, which saves the whole page. 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 shop's default currency is not supported, when no webhook challenge is set and when live mode is used without HTTPS. Pasted keys are trimmed when you save.
IntaSend
Enable/Disable: Enable IntaSend turns the payment method on or off. Default: off.
Title: the payment method name customers see at checkout. It is also the payment method name stored in the order. Default: IntaSend (M-Pesa, card). Required.
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 (the section has links to both). Test mode uses the sandbox keys and the sandbox API, live mode uses the live keys and the live API. The module 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: uses the IntaSend sandbox, no real money is charged. Default: on. Turn it off 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.
Saved secret keys and the webhook challenge are never shown again. The field stays empty and shows Saved — leave empty to keep it. Type a new value only to change it.
Webhook
The webhook tells your shop that a payment has been made, even when the customer does not come back to the shop (closed browser, M-Pesa confirmed later). In the IntaSend dashboard, in the sandbox and in live, open Webhooks and add the URL shown in Webhook URL in this section. With friendly URLs it looks like https://your-shop/module/wcp_intasend_pay/webhook, possibly with a language code such as /en/. Copy the URL exactly as the settings show it. Enter a challenge phrase there and the same phrase in the module. 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 shop. Such webhooks are answered as ignored, not as an error, so IntaSend does not disable the webhook before you enter the challenge.
Clear saved secrets: tick Sandbox secret key, Live secret key or Webhook challenge and click Save to remove it. An empty field keeps the saved value.
The module reacts to these payment states reported by IntaSend. Each time it asks the Payment Status API for the real state before changing anything:
Notifications that are not checkout payments of this shop, for example payment links or send-money events of the same IntaSend account, are answered with Ignored, so IntaSend does not disable the webhook.
Advanced
Debug log: logs checkout, return and webhook events to logs/intasend_p_debug.log.php in the module folder. The file cannot be opened from the web. Errors and warnings are always logged. API keys and customer data are never logged. Default: off.
Log: shows the size and the latest entries of the log. Click Clear log to empty it.
Delete data on uninstall: when on, uninstalling the module removes the gateway settings and the log. IntaSend references saved for orders are payment history and are always kept. Default: off.
Checkout
At the payment step the customer chooses the payment method (by default IntaSend (M-Pesa, card)) and confirms. The module creates an IntaSend checkout for the cart total in the cart 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 customer's e-mail and the name, address, phone and country of the invoice address are passed to IntaSend when they match the IntaSend field rules. Empty or unsuitable fields are left out. No order exists yet at this point.
After paying, the customer returns to your shop. The order is marked paid only after IntaSend confirms it: the module asks the Payment Status API when the customer returns and when the webhook arrives. The order is then created and the customer sees the standard order confirmation page. If the order was put on hold, the page shows Your payment was received and your order is being reviewed. We will contact you if anything is needed. If the payment is not confirmed yet, or IntaSend cannot be reached at that moment, a Payment confirmation 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. with the buttons Check again and Back to checkout. The webhook creates the order as soon as IntaSend confirms the payment.
If the payment failed, the customer is back at checkout with The payment was not successful. Please try again or choose another payment method. (with the IntaSend reason, if given). If the customer came back without paying, the message is The payment was not completed. Please try again or choose another payment method. The cart is kept and the customer can pay again. Each attempt gets its own IntaSend reference.
If IntaSend cannot start the payment, the customer stays at checkout with IntaSend could not start the payment: and 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. A cart total of zero cannot be paid with IntaSend.
The webhook works while the shop is in maintenance mode and is not blocked by the country restriction of your shop. When friendly URLs are off, the customer returns through the shop's home page, because IntaSend does not accept some characters in the return address.
The module takes one-time payments only. Refunds are not sent to IntaSend from the shop, and it has no saved cards, subscriptions or inline (popup) payment form. Older checkout links of the same cart cannot be cancelled at IntaSend.
Orders
Order statuses
No order yet: the customer was sent to IntaSend and has not paid, or IntaSend has not confirmed the payment yet. Only the cart exists.
Payment accepted: the payment was confirmed. The payment is recorded with the IntaSend invoice ID as the transaction ID, and a note shows the invoice, the payment method at IntaSend, the amount, the mode (sandbox or live) and how it was confirmed (webhook or customer return).
IntaSend payment on hold: IntaSend reported a different amount or currency than the cart total, a partial payment, or a payment that arrived after the order had been cancelled. The note explains it, and the amount IntaSend took is recorded as a payment when it is in the order currency. Check the payment in the IntaSend dashboard and fulfil the order or refund the payment. If the correct payment arrives later, the order moves to Payment accepted.
If a second payment arrives for an order that is already paid, the order is not changed. 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.
IntaSend payment block
The order page shows an IntaSend payment block with every checkout attempt of the order's cart (date, reference, IntaSend checkout, environment, amount, invoice and result, with the failure reason) and the Invoices processed (invoice, IntaSend state, amount and result). The block is read only.
Refunds
Refunds are not sent to IntaSend from the shop. Refund the payment in the IntaSend dashboard and record the refund in PrestaShop manually.
License key
The module works with a VibeFox license key from vibefox.net. The license block License — VibeFox IntaSend Pay Gateway is the first block on Modules > Module Manager > VibeFox IntaSend Pay Gateway > Configure, above the settings. Paste the key into License key and click Activate. After that the block shows the key masked, the status (for example the date the license is active until and your domain) and the buttons Check now to check the status again, Change key to enter another key and Remove key to remove the key from this shop. Below them are the line Product: presta-payment-intasend and the link Manage licenses and domains in your account, which opens your vibefox.net account. Only employees with the Configure permission for the module can change the key. The texts of the block follow the back office language (English and Russian are included).
If the key is not accepted, the block says why, for example Key not found, This key belongs to another product, Domain limit reached or License expired on a date. After the shop address changes, or after you free a domain slot in your account, click Check now. If the license server cannot be reached, the module keeps working on the last known status.
One key works on one domain: the domain of the main shop, also in a multistore setup. Removing the key from the shop 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. The PrestaShop storefront does not know that you are logged in to the back office, so the payment method is hidden for you too: you can set up the module before you buy a key, but not test it at checkout. A reminder appears in Modules > Module Manager on the Alerts tab. Existing orders are not affected: payments already started are still confirmed.
When a license expires, the module keeps working, but updates and support need a renewal. The status is checked again automatically while you work in the back office: once a day for the first 14 days after the key is entered, then once a week. No cron job is needed. Uninstalling or resetting the module always removes the license key and license status.
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 cart currency must be supported. The status box at the top of the settings page shows what is wrong. In Payment > Preferences check that the module is allowed for the cart currency, the customer's country and the customer's group.
The payment went through, but no order was created: M-Pesa confirmations can take a moment. The webhook creates 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 Webhook URL and that the challenge there is the same as Webhook challenge. The order is also created when the customer returns to the shop or clicks Check again.
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 module differ, or the webhook has no challenge.
Webhook answers Verification unavailable, retry later or Busy, retry later: IntaSend could not be reached at that moment, the cart was being confirmed by another request, or the order could not be created (for example, the module is disabled). IntaSend retries the webhook. The reason is in the log.
Webhook answers Invoice not verified or Invoice does not match the reference: IntaSend did not confirm that this invoice belongs to the cart. Nothing is changed.
The webhook URL shows Method not allowed in the browser: this is normal. The URL accepts only requests from IntaSend.
Order is IntaSend payment on hold: read the order notes. The paid amount or currency differed from the cart, 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 choosing IntaSend: look at the Log field on the module page (turn on Debug log for more detail). If the keys of the current mode are wrong, the customer sees IntaSend is not available at the moment. Please choose another payment method or contact the store. If the log says that the return URL contains characters IntaSend does not accept, the shop address is the cause.
The customer sees We could not match this payment to an order: the return link was changed or belongs to another cart. If the customer paid, the webhook still creates the order.
Uninstall
Go to Modules > Module Manager, open the menu next to VibeFox IntaSend Pay Gateway and choose Uninstall. The license key and license status of this module are always removed. If Delete data on uninstall is on, the gateway settings and the log are removed. If it is off, all settings are kept for a later re-install. The IntaSend checkout attempts and invoices of orders and the order status IntaSend payment on hold are always kept. Existing orders keep their payment notes and transaction IDs.
IntaSend is a trademark of its respective owner. This module is not affiliated with or endorsed by IntaSend.
