Are you referring to this script from http://www.paypal.com/cgi-bin/webscr?cmd=p/pdn/pp-solutions-ipn-outside ?.
PERL (requires LWP::UserAgent SSL encryption requires Crypt::SSLeay) #!/usr/local/bin/perl # read post from PayPal system and add 'cmd' read (STDIN, $query, $ENV{'CONTENT_LENGTH'}); $query .= '&cmd=_notify-validate'; # post back to PayPal system to validate use LWP::UserAgent; $ua = new LWP::UserAgent; $req = new HTTP::Request 'POST','http://www.paypal.com/cgi-bin/webscr' +; # note: if you have SSL encryption Enabled, use <https://www.paypal.com/cgi-bin/webscr> above $req->content_type('application/x-www-form-urlencoded'); $req->content($query); $res = $ua->request($req); # split posted variables into pairs @pairs = split(/&/, $query); $count = 0; foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $variable{$name} = $value; $count++; } # assign posted variables to local variables # note: additional IPN variables also available -- see IPN documentati +on $item_name = $variable{'item_name'}; $receiver_email = $variable{'receiver_email'}; $item_number = $variable{'item_number'}; $invoice = $variable{'invoice'}; $payment_status = $variable{'payment_status'}; $payment_gross = $variable{'payment_gross'}; $txn_id = $variable{'txn_id'}; $payer_email = $variable{'payer_email'}; if ($res->is_error) { # HTTP error } elsif ($res->content eq 'VERIFIED') { # check the payment_status=Completed # check that txn_id has not been previously processed # check that receiver_email is an email address in your PayPal account # process payment } elsif ($res->content eq 'INVALID') { # log for manual investigation } else { # error } print "content-type: text/plain\n\nOK\n";
From reading the IPN manual and watching the demo it looks to me like this script does several things.
1. It receives form data from IPN with details of the purchase
2. It posts back a validation to IPN using LWP::UserAgent
3. It receives back from the IPN server the response to the post which is captured in $res. This will have the word VERIFIED or INVALID in it
The idea then is that you use this response to update your records usually your own sales database. The # comments are suggestion on code you need write. The ->is_error method tells you if the response is good and you can proceed to check whether the response is VERIFIED or INVALID.
The last line I guess is just to keep the IPN server happy with a response.
So after all that, the question is "Do you want to keep your own records of the transactions that have been made ?". If No, then use the script as it is.
If Yes, then maybe take look at this site http://gotany.com/cgi/paypalipn.html for some more ideas.
poj

In reply to Re: PayPal IPN and Perl by poj
in thread PayPal IPN and Perl by powerhouse

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.