Paypal IPN


[!]-----------------------------------------------------
Sample code for Paypal IPN using WebDNA.
By Dan Strong - http://www.DanStrong.com
Free to use, no strings attached.
-----------------------------------------------------[/!]

[!]====================================================
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.%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¬ify_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_idaE67681CH3238416&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&portD3&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
====================================================[/!]
Dan Strong

DOWNLOAD WEBDNA NOW!

Top Articles:

Tips and Tricks

A list of user-submitted tips ...

WebDNA Modules

A list of the currently available modules...

Technical Change History

This Technical Change History provides a reverse chronological list of WebDNA changes...

WebDNA Libraries

A list of available libraries for WebDNA...

AWS Raw WebDNA LAMP-Plus WebServer

Amazon Web Services (AWS) README for Machine Image ID...

WebDNA reference

A list of all WebDNA instructions...

Related Readings:

Check the Federal Government's Social Security database

The script on the page will check the federal government's social security database...

reCAPTCHA code

reCAPTCHA helps prevent automated abuse of your site (such as comment spam or bogus registrations) by using a CAPTCHA to ensure that only humans perform certain actions...

Formatting a long list in a table

How to show the result of a search as a table...

Database backup

How to make a backup of your databases...

Removing whitespace

How can I remove all whitespace entered by a user from an input box (ie card number)...

Spaghetti code

How to get rid of very long search strings...