PayPal IPN & LC

J. Landman Gay jacque at
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:

on startup
   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 "" into tPPAddr
     post tOrderData to tPPAddr
     put it into tResponse -- "VERIFIED" or "INVALID"
     processData tOrderData -- do whatever with the data here
   end if
end startup

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 
sends though.

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
HyperActive Software           |

More information about the Use-livecode mailing list