This happens for a few reasons:
- The payment extension has a bug (usually)
- The payment callback function was not called by the payment gateway because you haven't configured it on your account page on the payment gateway's site
- The payment callback function was not able to be reached by the payment gateway because you are on a localhost or due to port blocking or other access issues
It is however possible that your webserver isn't allowing the callback function to be accessed. This is often due to:
- Testing on a localhost. Payment gateways can't reach http://localhost from their end so that will never work
- Webserver has blocked ports that the gateway needs to communicate through. This can usually be resolved by the hosting company tech support to open those ports. Most gateways do not need this.
If using Paypal, it might be that you need to enable your IPN notifications in your Profile. Google "Enable Paypal IPN" for more info on this. For the IPN url, they require that you enter "something" but it doesn't have to be anything special because the code overrides it with the correct url. You can simply use your main website url (http://www.mysite.com). You can enable debug mode to ensure you are getting the IPN callbacks. Also be sure you can reach the callback url manually in a browser:
http://mysite.com/index.php?route=payme ... d/callback
It should likely show a blank page but as long as you don't see an error that is fine.
Also be sure you have "Auto Return" enabled so that when customers pay, they are automatically returned back to your success page without needing to click a button. It doesn't affect the IPN from working, but ensures that the customer's cart will clear.