Skip to content

Setting up a payment provider

Where
Settings → Payment Gateways
Plan
All plans
Permission
Payments → Gateway Config

Nothing in the Payments menu can collect money until a provider is configured here. Confusingly, this screen is not in the Payments menu — it lives in Settings.

Three providers are supported: Paystack, Hubtel and PaySwitch (the theTeller API).

Have your provider’s dashboard open. You will be copying keys out of it.

  • Paystack — your secret key, from Settings → API Keys & Webhooks. It begins sk_live_ or sk_test_.
  • Hubtel — your API client ID and client secret, and your merchant account number.
  • PaySwitch — your API user and API key, and your merchant ID.
  1. Go to Settings, choose Payment Gateways, then click the Payment Gateways row inside it. (Yes — twice.)
  2. Click New gateway.
  3. Choose the Gateway — Paystack, Hubtel or PaySwitch. This can never be changed afterwards.
  4. Type a Display name, any label that helps you recognise it.
  5. Leave Purpose on Merchant collection. Also permanent — and see the warning about Billing below.
  6. Leave Enabled on Yes.
  7. Set Priority only if you configure more than one provider: the enabled one with the lowest number is your default (see Priority decides the default provider below).
  8. Under Credentials, fill in the boxes for your provider:
    • Paystack — Secret key, and optionally Public key.
    • Hubtel — Username, Password, Merchant ID.
    • PaySwitch — Username, Password, Merchant ID, and optionally Network (a fallback only — see below).
  9. Enter a Webhook secret if your provider issues one. Read the section below first — it does less than it sounds like.
  10. Leave Raw config (advanced) empty.
  11. Click save. You get “Gateway saved”.

The heading warns you correctly: “Your provider keys are encrypted at rest and never shown again after saving.”

Your provider needs to be told where to notify SaleSprint when a payment changes.

Each gateway entry shows a read-only Webhook URL. It has this shape:

https://<SaleSprint API address>/api/v1/webhooks/payments/<provider>

where <provider> is exactly paystack, hubtel or payswitch. Copy it into your provider’s dashboard: Paystack under Settings → API Keys & Webhooks, and the equivalent callback or webhook setting for Hubtel and PaySwitch.

  • No workspace ID is needed. SaleSprint works out which workspace and which payment a notification belongs to from the payment reference itself. Older instructions that ended the URL with ?tenant=… still work, but the extra part is no longer needed.
  • One URL per provider is enough. The same address serves every payment.

SaleSprint never marks a payment as paid just because a notification says so. Every notification makes SaleSprint ask the provider directly about that payment, and only the provider’s own answer counts. A fake or replayed notification cannot invent money.

The amount and currency the provider reports must also match the request exactly. If they do not — for example the customer paid less — the request is not marked paid and nothing reaches your balance. It is set to Under review instead, with the reason recorded on its transaction.

Payments are not lost. SaleSprint checks every open payment with the provider on its own: a few minutes after the payment is started, then every few minutes for up to a week. A customer who returns to the payment page after paying also triggers a check, so the page usually turns to paid within seconds. A notification that arrived while the payment was still pending is re-checked automatically afterwards.

Payments that are never completed are cancelled once they expire (after SaleSprint has confirmed with the provider that nothing was paid).

What it does depends on which provider you chose.

Provider What the Webhook secret does
Paystack Nothing. Paystack signs every notification with your secret key, and SaleSprint checks that signature. Leave the box blank.
Hubtel The signing key. Notifications must carry a matching HMAC-SHA256 signature of their content.
PaySwitch Same as Hubtel.

A banner above the table tells you one of:

  • “Your own Paystack configuration is currently active.”
  • “Currently using the platform default gateway (Paystack).”

The second means you have not set anything up and SaleSprint is falling back to a provider your operator configured.

Columns are Display name, Gateway, Purpose, Priority, Enabled and Credentials. Row actions are Edit and Delete.

Deleting warns you: “This removes your override and reverts to the platform default.” If there is no platform default, collection stops working instead — nothing says so.

Gateway and Purpose cannot be changed at all. A mistake in either means deleting the entry and creating it again.