Skip to content

Instantly share code, notes, and snippets.

@wdevaul
Created August 20, 2009 13:32
Show Gist options
  • Save wdevaul/171071 to your computer and use it in GitHub Desktop.
Save wdevaul/171071 to your computer and use it in GitHub Desktop.
[!]====================================================
Reference: https://www.paypal.com/cgi-bin/webscr?cmd=p/xcl/rec/ipn-intro-outside
ENABLE IPN IN YOUR PAYPAL ACCOUNT
1) Log Into your PayPal acct.
2) Go to "Profile", and under "Selling Preferences" click "Instant Payment Notification"
3) Click "Edit Settings" button
4) Enter your "Notification URL" (doesn't need to be https) where your IPN code will live
5) Choose "IPN messages - Receive IPN messages (Enabled)" and Save.
====================================================[/!]
[!]====================================================
RECEIVING IPN DATA FROM PAYPAL
1) When a payment is made to your PayPal account your IPN Notification URL page expects to receive a string very similar to this:
mc_gross=19.95&protection_eligibility=Eligible&address_status=confirmed&payer_id=LPLWNMTBWMFAY&tax=0.00&address_street=1+Main+St&payment_date=20%3A12%3A59+Jan+13%2C+2009+PST&payment_status=Completed&charset=windows-1252&address_zip=95131&first_name=Test&mc_fee=0.88&address_country_code=US&address_name=Test+User&notify_version=2.6&custom=&payer_status=verified&address_country=United+States&address_city=San+Jose&quantity=1&verify_sign=AtkOfCXbDm2hu0ZELryHFjY-Vb7PAUvS6nMXgysbElEn9v-1XcmSoGtf&payer_email=gpmac_1231902590_per%40paypal.com&txn_id=61E67681CH3238416&payment_type=instant&last_name=User&address_state=CA&receiver_email=gpmac_1231902686_biz%40paypal.com&payment_fee=0.88&receiver_id=S8XGHLYDW9T3S&txn_type=express_checkout&item_name=&mc_currency=USD&item_number=&residence_country=US&test_ipn=1&handling_amount=0.00&transaction_subject=&payment_gross=19.95&shipping=0.00
2) You must echo this string back to paypal along with an additional name/value pair "cmd=_notify-validate"
3) You can either save this string directly to a .db for later or break out the vars via [formvariables], whichever works best for you.
====================================================[/!]
[text]content=[!]
[/!][formvariables][name]=[url][value][/url]&[/formvariables]cmd=_notify-validate[!]
[/!][/text]
[text]response=[!]
[/!][TCPconnect host=www.paypal.com&port=443&ssl=T][!]
[/!][TCPsend skipheader=T]POST /cgi-bin/webscr HTTP/1.0[unURL]%0D%0A[/unURL][!]
[/!]USER-AGENT: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)[unURL]%0D%0A[/unURL][!]
[/!]Content-Type: application/x-www-form-urlencoded[unURL]%0D%0A[/unURL][!]
[/!]Content-Length: [countChars][content][/countChars][unURL]%0D%0A[/unURL][!]
[/!][unURL]%0D%0A[/unURL][!]
[/!][content][unURL]%0D%0A[/unURL][!]
[/!][/TCPSend][!]
[/!][/TCPconnect][/text]
[!]====================================================
Your IPN Notification URL will receive a [response] from PayPal of simply VERIFIED or INVALID.
Process your data accordingly.
To prevent fraud, Paypal suggests that you
1) Check the "payment_status" is "Completed"
2) Check that "txn_id" has not been previously processed
3) Check that "receiver_email" is your Primary PayPal email
4) Check that "payment_amount"/"payment_currency" are correct
====================================================[/!]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment