{{last_updated_at}} by {{last_updated_by}}

Troubleshooting PayPal and CiviCRM

PayPal is very difficult to navigate, and very difficult to handle certain tasks that come up time and again, particularly around recurring payments. I'm documenting them here for future reference.
General CiviCRM documentation

Setting a URL for IPN callbacks

Go here:

Resending an IPN

Do this from the IPN History page: Note the only way to find this page is from the "Setting the IPN callback" link above.

Modifying an IPN to reflect an updated CiviCRM contact ID, etc.

This is my raw documentation for the most complicated version of this. In this case, a user had a recurring membership/contribution, but a database restore eliminated all references in CiviCRM to it. However, the recurring payment profile still existed in PayPal.

I built a new recurring contribution from scratch. I compared an existing recurring contribution:

select * from civicrm_contribution_recur WHERE id = 700;

to the values from an IPN that corresponded to Carolyn:

select * from civicrm_system_log WHERE id = 223;

This is the SQL to create the recurring contribution.

INSERT into civicrm_contribution_recur (contact_id, amount, frequency_unit, frequency_interval, start_date, processor_id, trxn_id, invoice_id, contribution_status_id, cycle_day, auto_renew, currency, payment_processor_id, is_email_receipt, financial_type_id, payment_instrument_id) VALUES (90779, 12.50, 'month', 1, '2015-06-19 13:00:00', 'I-JAMLNHRXDD21', 'I-JAMLNHRXDD21', '14e0fcc045a7aa421a1b5c6c86d87e97', 5, 1, 1, 'USD', 3, 1, 7, 1);

Then you need a fake initial contribution, which I built by hand as well:

INSERT INTO civicrm_contribution (contact_id, financial_type_id, contribution_page_id, payment_instrument_id, receive_date, total_amount, fee_amount, net_amount, trxn_id, invoice_id, currency, source, contribution_recur_id, contribution_status_id) VALUES (90779, 7, 3, 1, '2015-06-29 13:00:00', 12.50, .44, 12.06, 'zzzyyyxxx', 'xxxyyyzzz', 'USD', 'Created by Jon', 975, 1);

In PayPal

  • My Account > Profile
  • Recurring Payments Dashboard (
  • Scrolled back to the creation date and clicked on Carolyn's name
  • Clicked "Modify".
  • The profile reference has a bogus maximum field length, so I right-clicked, selected "Inspect Element", and manually changed the "maxlength" value so I could edit it.

I changed the URL values:

i = invoice id (don't change - set contribution_recur_id to match)
m = component (keep as "contribute")
c = contact id (change if necessary)
r = recurring contribution id (change)
b = initial contribution ID (change)
p = participant_id OR contribution_page_id (keep)
Press Continue, then Submit

Finally, I created a new membership through the UI (46913) and edited THAT manually to have updated end date. I also created a membership_payment record.

Updated by Jon Goldberg over 5 years ago · 1 revisions