Payment Gateways
ChargePanda supports several payment gateways. Enable and configure them under Admin Dashboard > Settings > Payments. Each gateway has its own tab.
Paystack
Paystack lets you accept card and local payments across Nigeria, Ghana, South Africa, Kenya and other supported regions. At checkout, customers are taken to Paystack's secure hosted payment page to pay, then redirected straight back to your store to complete their order. This redirect approach works reliably in every browser (including Firefox and Safari).
Supported currencies
ChargePanda will send a Paystack payment when your store currency is one of:
| Code | Currency |
|---|---|
| NGN | Nigerian Naira |
| GHS | Ghanaian Cedi |
| ZAR | South African Rand |
| KES | Kenyan Shilling |
| USD | US Dollar |
| EGP | Egyptian Pound |
| XOF | West African CFA Franc |
| RWF | Rwandan Franc |
Important: this is the list ChargePanda allows. It is not the same as the currencies your Paystack account can actually accept. Paystack enables currencies per account based on the country you registered in — for example, a Nigerian account is usually NGN only, and accepting USD or other currencies often needs to be activated separately by Paystack.
A payment can only go through when your store currency is in both lists — the table above and the set your own Paystack account is enabled for. If you are unsure, the safest choice is the home currency of the country your Paystack account is registered in (e.g. NGN for a Nigerian account). You can check the currencies enabled on your account in your Paystack Dashboard under Settings.
Set your store currency under Settings > General before enabling Paystack. If you pick a currency your account does not support, checkout will fail with a message telling you the currency is not supported.
Setup
- Go to Settings > Payments and open the Paystack tab.
- Set Enable Paystack to Yes.
- Choose the Default Order Status applied after a successful payment (Processing or Completed).
- Optionally set the Payment Title and Payment Description shown at checkout.
- From your Paystack Dashboard > Settings > API Keys & Webhooks, copy your Public Key (
pk_test_…/pk_live_…) and Secret Key (sk_test_…/sk_live_…) and paste them into the matching fields. - Save your changes.
Use your test keys while trying things out, then switch to your live keys when you are ready to take real payments. Paystack's test card 4084 0840 8408 4081 (any future expiry, any CVV) can be used to simulate a successful payment.
Webhook (recommended)
A webhook lets Paystack confirm a payment reliably even if the customer closes their browser before returning to your store.
- In the Paystack settings tab, copy the Webhook URL shown.
- Paste it into the Webhook URL field in your Paystack Dashboard (under the matching Test/Live section) and save.
Paystack will then notify your store of completed payments automatically.
Troubleshooting
If checkout shows "Unable to initialise the Paystack transaction":
- Keys in the wrong fields. The Public Key starts with
pk_and the Secret Key withsk_. If you accidentally paste them into the wrong boxes, your store now detects this and uses each key correctly, and saving the Payments settings once will move them into the right fields automatically — so this no longer breaks checkout. - Keys still rejected ("Invalid key"). If the message persists, the keys themselves are wrong. Copy a fresh Public and Secret key from your Paystack Dashboard and paste them in again.
- Currency not supported. If the message mentions the currency, set your store currency (under Settings > General) to one your Paystack account is enabled to settle.
Xendit
Xendit is a payment platform for Southeast Asia, serving Indonesia, the Philippines, Malaysia, Thailand, Vietnam and more. At checkout, customers are taken to Xendit's secure hosted payment page to pay, then redirected straight back to your store to complete their order.
Supported currencies
ChargePanda will send a Xendit payment when your store currency is one of:
| Code | Currency |
|---|---|
| IDR | Indonesian Rupiah |
| PHP | Philippine Peso |
| USD | US Dollar |
| THB | Thai Baht |
| MYR | Malaysian Ringgit |
| VND | Vietnamese Dong |
Important: this is the list ChargePanda allows. It is not the same as the currencies your Xendit account can actually accept. Xendit enables currencies per account based on the country you registered in — for example, an Indonesian account is typically IDR only, and accepting other currencies may need to be activated separately.
A payment can only go through when your store currency is in both lists — the table above and the set your own Xendit account is enabled for. Check which currencies are active on your account in your Xendit Dashboard under Settings.
Amounts are always rounded to the nearest whole number. Xendit does not use decimal subunits (no cents or pence). If your store price is $10.99 USD, Xendit will charge $11. Set your prices accordingly.
Set your store currency under Settings > General before enabling Xendit.
Setup
- Go to Settings > Payments and open the Xendit tab.
- Set Enable Xendit to Yes.
- Choose the Default Order Status applied after a successful payment (Processing or Completed).
- Optionally set the Payment Title and Payment Description shown at checkout.
- In your Xendit Dashboard → Settings → API Keys:
- Open the API key you want to use (or create a new one).
- Under Permissions, enable Money-in products (this grants permission to create Invoices). Without this, every payment attempt will fail with a permissions error.
- Save the key.
- Copy the Secret Key — it starts with
xnd_development_for test mode orxnd_production_for live mode.
- Paste the Secret Key into the Secret API Key field in ChargePanda.
- Configure the webhook (see below) and save.
Use your test (xnd_development_) key while trying things out, then switch to your live (xnd_production_) key when you are ready to take real payments.
Webhook (required)
The webhook is essential for Xendit — it confirms payment reliably even if the customer closes their browser before returning to your store.
- In the Xendit settings tab in ChargePanda, copy the Webhook URL shown.
- In your Xendit Dashboard → Settings → Callbacks:
- Find the Invoice Paid callback field.
- Paste the webhook URL.
- Save. Xendit will generate a Verification Token.
- Copy the Verification Token.
- Paste the Verification Token into the Webhook Verification Token field in ChargePanda.
- Save your ChargePanda settings.
Both test and live modes have separate callback settings. Make sure you configure the webhook in the mode that matches your API key (test callbacks for test keys, live callbacks for live keys).
Troubleshooting
Payment fails immediately / order goes to "Failed". The most common cause is that the API key does not have Money-in products permission. Go to Xendit Dashboard → Settings → API Keys, open your key, enable Money-in products, save, then re-copy and re-paste the Secret Key.
Currency error at checkout. Your store currency (under Settings > General) is not in Xendit's supported list (IDR, PHP, USD, THB, MYR, VND), or it is not enabled on your Xendit account. Change the store currency or contact Xendit to enable the currency on your account.
Payment completed on Xendit but order stays Pending. The webhook is not configured or the Verification Token is wrong. Follow the webhook setup steps above. Make sure the token in ChargePanda exactly matches the one shown in your Xendit Dashboard Callbacks settings for the same mode (test vs live).
Amounts look wrong (rounded). This is expected — Xendit only accepts whole-number amounts. A $9.99 product will be charged as $10. Adjust your pricing to avoid unexpected rounding.
Cryptomus
Cryptomus lets you accept cryptocurrency payments. Customers pay in USDT, choosing whichever blockchain network they prefer (TRC20, ERC20, BEP20, and others) on Cryptomus's secure hosted payment page, then are redirected straight back to your store once payment is complete.
Supported currencies
ChargePanda will send a Cryptomus payment when your store currency is one of:
| Code | Currency |
|---|---|
| USD | US Dollar |
| EUR | Euro |
| GBP | British Pound |
Important: your store currency is only used to price the invoice — customers always pay in USDT. Cryptomus converts your store currency amount to USDT automatically at checkout.
Set your store currency under Settings > General before enabling Cryptomus.
Subscriptions renew manually. Like all cryptocurrency payments, Cryptomus cannot automatically charge a customer again when a subscription renews. As with Xendit, a renewal creates a new invoice that the customer pays themselves each billing cycle.
Setup
- Go to Settings > Payments and open the Cryptomus tab.
- Set Enable Cryptomus to Yes.
- Choose the Default Order Status applied after a successful payment (Processing or Completed).
- Optionally set the Payment Title and Payment Description shown at checkout.
- In your Cryptomus merchant dashboard, go to Settings > API and copy your Merchant ID and API Key.
- Paste them into the matching fields in ChargePanda.
- Configure the webhook (see below) and save.
Webhook (required)
The webhook is essential for Cryptomus — it confirms payment reliably even if the customer closes their browser before returning to your store.
- In the Cryptomus settings tab in ChargePanda, copy the Webhook URL shown.
- In your Cryptomus merchant dashboard, go to Settings > API and paste the URL into the payment callback field.
- Save.
Troubleshooting
Currency error at checkout. Your store currency (under Settings > General) is not in Cryptomus's supported list (USD, EUR, GBP). Change your store currency to one of these.
Payment completed on Cryptomus but order stays Pending. The webhook is not configured, or the callback URL in your Cryptomus dashboard does not match the one shown in ChargePanda. Follow the webhook setup steps above.
Order marked Failed after payment. The customer likely sent less than the invoiced amount (Cryptomus reports this as an underpayment). Ask the customer to complete the remaining balance, or contact them to arrange payment again for the full amount.