PayPal
Collect payments with PayPal
PAYPAL sends the payer to PayPal’s approval page, then captures the
approved order. Nothing is credited until the capture succeeds.
PayPal is the fallback gateway for any country without its own catalog entry, so it is available almost everywhere: Kenya, Rwanda, Ghana, Côte d’Ivoire, South Africa, Egypt, Tanzania, Zambia, Malawi, Benin, Burkina Faso, Cameroon, DR Congo, Republic of the Congo, Senegal, Sierra Leone, Zimbabwe, Nigeria, and Pakistan among them.
Before you start
- Create an app in the PayPal Developer dashboard under a business account owned by the ISP, and collect its client ID and client secret.
- Decide the settlement currency — see the warning below, because it changes more than PayPal.
- Plan the walled garden: the payer’s browser must reach PayPal, so a Hotspot subscriber who is not yet online cannot pay unless PayPal is reachable pre-authentication.
Configure the gateway
Open Settings → Payments → PayPal
Select PayPal from the payment marketplace.
Enter the client ID and client secret
Both are required. The secret is stored as a secret and is not echoed back into the form after saving.
Choose the settlement currency
Settlement currency (required) is searchable by name or code.
Run a controlled test payment
Pay a small amount from the captive portal on an unauthenticated device. Confirm the approval page loads, the payment is captured, and the amount in the ledger matches what PayPal captured.
Credentials
| Field | Required | Notes |
|---|---|---|
| Client ID | Yes | From the PayPal Developer dashboard. |
| Client secret | Yes | Secret. |
| Settlement currency | Yes | Three-letter code, chosen from the current currency list. Also drives dashboard display. |
All three gate the switch.
Callback URLs
None to register. PayPal returns the payer to a return URL generated per order, and a cancel URL for an abandoned checkout. PayPal webhooks are accepted and de-duplicated, but the capture is what credits a payment.
What the payer must provide
A PayPal account or a card, on PayPal’s own page. The amount is fixed before the payer arrives, and must be greater than zero.
How a payment completes
Create order
Centipid Billing authenticates against PayPal and creates an order in the settlement currency, with return and cancel URLs.
Approval
The payer approves the order on PayPal’s page and is returned.
Capture
The order is captured. Only a completed capture records a payment and applies the package — an approved but uncaptured order is not money.
A repeated capture of an order already recorded is rejected as a duplicate rather than credited twice.
Troubleshooting
| Symptom | What it means | What to do |
|---|---|---|
| “Payment initiation failed: PayPal credentials are not configured.” | The client ID or secret is missing. | Enter both in Settings → Payments. |
| “Payment initiation failed: Unable to authenticate with PayPal.” | PayPal rejected the credentials. | Re-copy them. Confirm the app is live, not sandbox. |
| “Payment initiation failed: Invalid currency code.” | The settlement currency is not a three-letter code. | Re-select it from the list. |
| “Payment initiation failed: Payment amount must be greater than zero.” | The checkout amount was zero. | Check the package price. |
| “PayPal did not return an approval link.” | PayPal accepted the order but returned no approval URL. | Retry, then raise the order id with PayPal. |
| “Order has not been approved by the customer yet.” | Capture ran before the payer approved. | Have the payer complete the approval, then retry the capture. |
| “Order is in … state and cannot be captured.” | The order expired or was voided. | Start a fresh checkout. |
| “Payment not completed.” | The capture did not complete. | Check the order on PayPal before recording anything by hand. |
| The approval page never loads on a Hotspot device | The walled garden does not allow PayPal. | Allow PayPal’s domain pre-authentication — see Captive device cannot reach checkout. |
For every gateway’s fields in one place, see the credential reference.
