The clearest signs of a bad Paystack integration are: customers reporting they paid but your system does not show it, double charges, the checkout page breaking on mobile phones, no webhook verification (meaning your system trusts the redirect instead of confirming with Paystack), missing error handling so customers see blank screens instead of clear messages, and test API keys accidentally left in production. If you see any of these, get a second developer to review the integration.
A payment integration is the part of your business that handles money. When it works, you do not notice it. When it does not, you lose revenue, lose customers, and spend hours dealing with complaints.
The problem is that a bad integration does not always fail loudly. Sometimes it fails quietly. Payments succeed on Paystack's side but your system does not know. Customers get charged but never receive their product. Your settlement reports show money coming in, but your orders do not match. You patch things manually for weeks before realizing the integration itself is the problem.
If your developer rushed the work, skipped testing, or did not understand how payment systems work, these problems are almost guaranteed. Here are the warning signs to watch for.
This is the most common symptom of a broken webhook setup. Here is what should happen: when a customer pays, Paystack sends a notification to your server (called a webhook). Your server receives this notification, verifies it, and updates the order to "paid." The customer sees a success message.
In a bad integration, the developer skipped the webhook part and relied only on the redirect. The redirect is what happens when the customer is sent back to your website after paying. The problem: redirects are unreliable. The customer might close their browser. Their internet might drop. The redirect URL might not load. When any of these happen, your system never learns that the payment was successful.
How to check: log into your Paystack Dashboard and look at recent transactions. If you see successful payments that your system does not show as paid orders, your webhook is broken. This is the single most important thing to get right in a payment integration, and it is the thing bad developers most often skip.
Get weekly developer tips
Join 25,000+ developers. Practical guides, job tips, and new content — straight to your inbox.
No spam. Unsubscribe anytime.
Double charges happen when the checkout form allows the customer to click "Pay" multiple times. The customer clicks, nothing seems to happen (maybe the page is slow), so they click again. Each click creates a new transaction, and the customer gets charged twice or even three times.
A properly built integration disables the pay button after the first click, generates a unique reference for each transaction attempt, and checks whether a transaction with that reference already exists before creating a new one. If your integration does not do these things, double charges will happen regularly.
Double charges create serious problems: unhappy customers, refund requests, potential chargebacks, and damage to your business reputation. If you are processing refunds for double charges more than once, your integration needs fixing.
In most African markets, the majority of your customers are on mobile phones. If your developer only tested on a desktop computer, the checkout might look fine on a laptop but break on a phone.
Common mobile problems include: the payment popup does not open, the page layout is broken so the customer cannot see the pay button, the redirect after payment goes to a page that does not load on mobile, or the USSD payment code is cut off and the customer cannot copy it.
Test your own checkout on a phone. Not just your phone, but ask friends with different phone brands and screen sizes to try it. If the checkout is not smooth on mobile, you are losing customers every day. This is especially true for businesses in Kenya and Nigeria where smartphone payments dominate online transactions.
When a payment fails (card declined, insufficient funds, network timeout), the customer should see a clear message explaining what happened and what they should do next. "Your card was declined. Please try a different card or payment method." That is a good error message.
In a bad integration, the customer sees a blank white screen, a generic "Something went wrong" message, or gets stuck on a loading spinner that never stops. They do not know if they were charged. They do not know if their order went through. So they either leave your site (you lose the sale) or try to pay again (risking a double charge).
Good error handling is not fancy. It just means the developer planned for what happens when things go wrong, which they will. Networks time out. Cards get declined. Banks have outages. Your integration needs to handle all of these gracefully.
This one is embarrassing but it happens. The developer finishes building the integration in test mode (where no real money moves) and forgets to switch to live API keys before launching. Everything looks like it is working because test transactions go through, but no real money is being collected.
How to check: look at the Paystack Dashboard. If you only see transactions in test mode (switch the dashboard toggle between "test" and "live"), your site is still using test keys. Your customers think they paid, but no money was actually collected. This needs to be fixed immediately.
The reverse is also dangerous: using live keys during development and testing, which means real money is being charged to real cards during testing.
When a customer contacts you about a payment issue, you need to be able to look up the transaction. A well-built integration keeps a log of every payment attempt: the reference number, the amount, the customer, the time, whether it succeeded or failed, and why it failed.
If your system has no record of transactions beyond "order paid" or "order not paid," troubleshooting becomes impossible. You end up relying entirely on the Paystack Dashboard, which shows you Paystack's side of the story but not your system's side. When the two do not match, you need both sets of records to figure out what went wrong.
Ask your developer: "Where can I see a log of all payment attempts, including failed ones?" If the answer is "you cannot" or "check Paystack," the integration is missing a critical piece.
First, do not panic. A bad integration can be fixed. Here is your action plan:
For guidance on what questions to ask your developer, see what to ask a developer before they integrate Paystack. For warning signs in developer quotes before you even start, see red flags in a developer quote.
KES 2,999
The definitive guide to building payment systems with Paystack — from your first transaction to production-grade payment infrastructure across Africa. 9 modules, 47 lessons. Free preview available.
Start Paystack Course