If PayPal sends its IPN signal to your site and Give doesn’t receive it, then Give doesn’t know that the donation is complete. This article will help you understand where you can see your recent IPN signals, how they can help you identify where the problem might come from, and how to resend them to keep your donations in sync.

Understanding PayPal’s IPN Signal

IPN stands for “Instant Payment Notification”. This is a signal that PayPal sends to your website. When Give receives that signal, Give can then update the status of a donation, whether it’s “Complete”, “Failed”, or some other status. If you site is momentarily down, or you have some security measures that prevent your site from receiving that signal successfully then Give is prevented from getting the information it needs to update your donations and they will continually be in “Pending” status until Give eventually sets them to “Abandoned”.

When PayPal sends that signal, it looks for a simple response from your website that the site is live. This is a “200” HTTP response. That simply means that the site is live and it received that signal. You might be most familiar with the HTTP response “404” which means the page doesn’t exist. But a “503” or “500” error means that the site is unavailable. If PayPal gets a 500 error, it will wait and re-send the IPN again later. It will not send the signal for forever, but it will try many times until it gets a 200 response.

But even a 200 response doesn’t mean that the information PayPal sent actually is received by Give. There are many things in a typical WordPress website that might prevent the IPN from being processed properly. Here are a few of the most common ones:

  • Security plugins
  • Custom htaccess rules
  • Custom wp-config.php rules
  • Lack of an SSL Certificate on your website (meaning all your traffic is going over HTTP instead of HTTPS).

Let’s address the tools available to you to properly troubleshoot these issues.

Confirm Your IPN is Set

The first thing to do is confirm that your PayPal account has the right IPN set for your website.

To do that, go to “Profile and Settings” and select “My selling tools”. From there you’ll see a long list of options. Search for “Instant Payment Notifications” and click the “Update” link.

Now you can create and/or edit your IPN. If you already have Give installed on your site and have done some test donations, then Give most likely already set this for you. It should look something like this:

https://example.com/?give-listener=IPN

The PayPal IPN settings in your PayPal account.

The Problem of Multiple IPNs

Ideally, when you login to your PayPal account to update your IPN either Give’s is already set or you don’t see one at all. If you see one already set there to a different website or with a different listener at the end, then you’ll need to setup two IPNs. Unfortunately, the big problem with that is that PayPal does not support more than one IPN.

Currently the only method for setting up multiple IPNs is by using Zapier. They have a great tutorial on that here. Note that you do not need the Give Zapier Add-on to make that solution work for you, but it does require Zapier’s PayPal integration which is a premium service that has a monthly fee.

PayPal’s IPN Simulator

Now that we know your IPN is set in your PayPal account correctly, we can test it.

One way to test whether PayPal can communicate with your site at all is with the IPN Simulator. This is a simply web-based tool that will send a test IPN signal to your website. Here’s how it works.

The IPN Simulator is part of your Developer account. See our docs on setting up a PayPal Developer Sandbox account here. Once you have an account, navigate the to Dashboard, then under “Sandbox” you’ll see a link for the IPN Simulator.

The PayPal IPN Simulator.

Here, you simply need to enter the IPN handler URL and choose the Transaction type.

  • IPN handler URL — you need to enter your full URL, including “https://” and maybe “www” if you use that. Then at the end you need to add the Give IPN listener which is ?give-listener=IPN
  • Transaction type — in this case we are testing PayPal Standard, so we’ll simply choose “Express Checkout”

Once you choose that, you’ll see a lot of options to customize the data that is sent to your website. Right now, all we want to do is test and confirm that the IPN does actually hit your website and get the proper response so no need to change anything else. So simply scroll to the bottom and hit “Send IPN”.

NOTE: If you want to send an actual donation that you have on your site, you can go through and change each field to match an existing donation in your site and see that after you hit “Send IPN” Give will reflect the updated status correctly.
After you hit “Send IPN” you should see an alert at the top of the page (you’ll need to scroll up) indicating that the IPN was sent correctly and the site responded correctly.
The PayPal IPN Simulator confirmation message saying: “IPN was sent and the handshake was verified.”

If you get a message like the above, then we know that your site is returning a 200 HTTP response, which is half the battle. Next is making sure Give can receive that signal without interference from other plugins or custom security rules.

PayPal’s IPN History

PayPal actually has a page in your account that lists out the last 28 days worth of IPN requests they have sent. It’s not possible to navigate to this page via their normal account interface. You can read about it in their docs here:

Currently, this is the IPN History link

NOTE: PayPal changes things often and sometimes they change them differently for different types of accounts or in different countries. We do our best to keep our docs updated. If you try to access your IPN History via that link and it does not work, please reach out to us via our contact form.

This history page, is located within your normal PayPal account, not the Developer account. It’s a history of the live IPN signals it has sent to your website over the last 28 days (maximum).

The PayPal IPN History page.

With this report, you can have a very simple overview of whether or not the IPN was sent successfully to your site and received a 200 response. Remember: a 200 response still doesn’t mean that Give got the information it needed.

So next, find a transaction in your Give donations that shows as “Pending” but is “Complete” in your PayPal account. That donation represents a time in which PayPal sent the IPN but Give didn’t get it. Next, do the following:

  • Clear all caching and deactivate caching plugins
  • Deactivate security plugins
  • Review your .htaccess file and make sure it is as close to the default WordPress htacess as you can safely get it (NOTE: Proceed with caution, you can disable your whole site if you don’t know how to restore your htaccess or tweak it in the wrong way).

Those are the most common reasons why Give might not be getting the IPN signal. With those deactivated for now, find that donation in the list of your IPN History page and click on the checkbox to the left, then click on the “Resend Selected” button at the top of the table.

Resend the selected IPN signal.

Ideally, as long as you chose the correct transaction, you can look in your Give Donations and see that it is now marked as “Complete”.

If it is not marked as “Complete”, then deactivate all plugins besides Give and try again.

If it still is not marked as “Complete” contact our Support and let them know you walked through all these steps and provide as much detail as possible about the transaction with as many screenshots as you can provide.