PayPal IPN & LC
J. Landman Gay
jacque at hyperactivesw.com
Tue May 1 12:04:22 EDT 2012
On 5/1/12 9:36 AM, Richard Miller wrote:
> Totally stuck on using PayPal's IPN process with LC. It doesn't appear
> that there is any way to have PayPal send the IPN data to a LC cgi
> script. Doesn't look like IPN supports cgi.
It does, I've got the data coming in. The only issue I have is that
PayPal hangs waiting for a response, and so it continues to resend
transactions up to 15 times, until it finally assigns the transaction a
"Failure" status and quits.
Here's an outline of my working script, the one in the text file:
if $REQUEST_METHOD = "POST" then -- this is the only kind PayPal sends
start using stack "liburl"
read from stdin until empty
put it into tOrderData
if tOrderData is in url ("file:paypalLog.txt" ) then exit startup
-- duplicate notification
put "cmd=_notify-validate&" before tOrderData -- required response
put "https://www.sandbox.paypal.com/cgi-bin/webscr" into tPPAddr
post tOrderData to tPPAddr
put it into tResponse -- "VERIFIED" or "INVALID"
processData tOrderData -- do whatever with the data here
The real script has "LOG" commands all through it, and shows that data
is coming in correctly, the posted reply is being sent, and "VERIFIED"
is returned from PayPal.
PayPal does not get a status code back from my cgi, which is the only
issue I can't resolve. Because it doesn't think it's reached me, it
continues to resend the transaction repeatedly. That's why the fourth
line of the script checks to see if the data is already in the log; if
so, it just drops the request. Note that an exit command in a cgi script
will throw an error 500. PayPal does receive this status code and
reports it in its IPN history log. That doesn't stop it from repeated
Other than the resends, it works. You need to create a libURL stack and
put it into cgi folder with 755 permissions. LibURL handles the POST
command. The MC IDE already has one you can clone, or ask if you need
info on how to make your own.
In PayPal you can use the sandbox simulator. Set it to send transactions
to the URL of your cgi script. If you create a sandbox test button, set
that up with the cgi URL too.
Except for the duplicate resends, it works.
Jacqueline Landman Gay | jacque at hyperactivesw.com
HyperActive Software | http://www.hyperactivesw.com
More information about the Use-livecode