Hi
I have tried a simple experiment now with only the following lines in my
HTML::Mason file which is called by PayPal after making a successful
sandboxed payment:
<%flags>
inherit=>undef
# To sidestep the parameter processing in my autohandler.
</%flags>
<%init>
use Business::PayPal::IPN;
$Business::PayPal::IPN::GTW = '
https://www.sandbox.paypal.com/cgi-bin/webscr ';
my $ipn = Business::PayPal::IPN->new();
if ($ipn) {
print "Content-type: text/plain\n\nipn=yes\n";
} else {
print "Content-type: text/plain\n\nipn=no\n";
}
</%init>
It outputs:
Content-type: text/plain ipn=no
Obviously I'm doing something fundamentally wrong, perhaps I need to setup
some parameters before the call to $ipn = Business::PayPal::IPN->new() ?
Help
Jim Rey
On 07/03/07, Jim Rey <[EMAIL PROTECTED]> wrote:
Sorry about that ... I forgot that if you TAB in Googlemail it executes a
SEND.
Jim
On 07/03/07, Jim Rey < [EMAIL PROTECTED]> wrote:
>
> Hi Alfie,
>
> I'm still having fun and games trying to get IPN to work with paypal. Is
> this because I use Apache2 and mod_perl2 instead of CGI? Do I need to use a
> CGI return address instead. I'm really stuck with this and when I tried to
> get some help from PayPal, they admitted that they didn't know anything at
> all apart from their own shopping basket. I went back to their own perl
> example and tried to modify that, but, and perhaps this is where I'm going
> wrong, when I executed the code to
> # post back to PayPal system to validate
> # use LWP::UserAgent;
> $ua = new LWP::UserAgent;
> $req = new HTTP::Request 'POST',
> $MyVar{'SandBox'}
> ? '
> https://www.sandbox.paypal.com/cgi-bin/webscr'
> : ' https://www.paypal.com/cgi-bin/webscr
> ';
>
> $req->content_type('application/x-www-form-urlencoded');
> $req->content($query);
> $res = $ua->request($req);
> This is so frustrating
>
> On 26/02/07, Alfie John < [EMAIL PROTECTED]> wrote:
> >
> > Hey Jim,
> > While testing using a sandbox, modifying $Business::PayPal::IPN::GTW
> > is a good idea. Otherwise it could be expensive since your loosing out on
> > fees during each transaction.
> >
> > To give you a bit of an idea on how I used it:
> >
> > ---8<---
> >
> > use Business::PayPal::IPN;
> >
> > if ( my $ipn = Business::PayPal::IPN->new() )
> > {
> > unless ( $ipn->item_name() )
> > {
> > print "Content-type: text/plain\n\nOK";
> >
> > exit;
> > }
> >
> > unless ( $ipn->receiver_email() eq $my_email )
> > {
> > die "receiver_email is SUSPICIOUS: " . $ipn->dump();
> > }
> >
> > unless ( $ipn->payer_email() )
> > {
> > die "payer_email is not a valid email address: " . $ipn->dump();
> > }
> >
> > my $payment;
> >
> > if ( $ipn->payment_gross() )
> > {
> > unless ( $ipn->payment_gross() =~ m{ ^ ( \d+ [.]? \d{0,2} ) $ }x )
> > {
> > die "payment_gross is not a valid number: " . $ipn->dump();
> > }
> >
> > if ( $ipn->payment_fee() )
> > {
> > unless ( $ipn->payment_fee() =~ m{ ^ ( \d+ [.]? \d{0,2} ) $ }x )
> > {
> > die "payment_fee is not a valid number: " . $ipn->dump();
> > }
> > }
> >
> > $payment = $ipn->payment_gross() - ( $ipn->payment_fee() || 0 );
> > }
> > elsif ( $ipn->settle_amount() && $ipn->settle_current() eq 'USD' )
> > {
> > unless ( $ipn->settle_amount() =~ m{ ^ ( \d+ [.]? \d{0,2} ) $ }x )
> > {
> > die "settle_amount is not a valid number: " . $ipn->dump();
> > }
> >
> > $payment = $ipn->settle_amount();
> > }
> > else
> > {
> > die "currency not in USD: " . $ipn->dump();
> > }
> >
> > eval {
> > My::Class->create(
> > 'transaction_id' => $ipn->txn_id(),
> > 'url' => $ipn->item_name(),
> > 'email' => $ipn->payer_email(),
> > 'payment' => $payment,
> > 'my_custom1' => ( $ipn->option_selection1() ? 1 : 0 ),
> > );
> > };
> >
> > if ( $@ )
> > {
> > unless ( $@ =~ m{ DBD::mysql::db do failed: Duplicate entry } )
> > {
> > die "duplicate record found";
> > }
> > }
> > }
> >
> > --->8---
> >
> > Alfie John
> > http://www.freehouse.com.au
> >
> > On 26/02/2007, at 8:11 PM, Jim Rey wrote:
> >
> > I've decided using Business::PayPal::IPN, but I first need to test my
> > process using the paypal sandbox. I have still to setup the sandbox
> > properly, but in order to use it, may I assume that I have proceed the call
> > to:
> >
> > if ($Ipn = new Business::PayPal::IPN ()) {
> > ...
> > }
> >
> > by something like:
> >
> > $Business::PayPal::IPN::GTW = 'https://www.sandbox.paypal.com/cgi-bin/webscr
> > ';
> >
> > Jim
> >
> > On 22/02/07, Jim Rey < [EMAIL PROTECTED]> wrote:
> > >
> > > Thanks Lionel,
> > >
> > > Shortly before you replied I managed to get through to PayPal and
> > > apparently "pending" applied to payments via a bank account which takes 4
to
> > > 5 working days here in the UK. During the time it takes to clear we are
> > > going to wait for completion. I'm going to ask PayPay if there is any way
> > > the PayPal account can be accessed READONLY so I can check the status of
> > > pending orders for completion, but, initially at least, we will probably
> > > have to login to see for ourselves.
> > >
> > > Jim
> > >
> > > On 22/02/07, Lionel MARTIN < [EMAIL PROTECTED]> wrote:
> > > >
> > > > Hi Jim,
> > > >
> > > > Normally, when the status is pending, Paypal sends you a new
> > > > notification when the status becomes completed, if it ever becomes
> > > > completed. So, from your part, dying here would just be fine. (or store
data
> > > > for your records)
> > > >
> > > > Lionel.
> > > >
> > > > ----- Original Message -----
> > > > *From:* Jim Rey <[EMAIL PROTECTED]>
> > > > *To:* Alfie John <[EMAIL PROTECTED]>
> > > > *Cc:* Mason List <mason-users@lists.sourceforge.net>
> > > > *Sent:* Thursday, February 22, 2007 3:48 PM
> > > > *Subject:* Re: [Mason] How do I implement PayPal IPN code in
> > > > Mason?
> > > >
> > > > Alfie
> > > >
> > > > The code example shows:
> > > >
> > > > my $ipn = new Business::PayPal::IPN() or die
Business::PayPal::IPN->error();
> > > >
> > > >
> > > >
> > > > # if we come this far, we're guaranteed it was a valid transaction.
> > > >
> > > >
> > > > if ( $ipn->completed() ) {
> > > >
> > > > # means the funds are already in our paypal account.
> > > >
> > > > } elsif ( $ipn->pending() ) {
> > > >
> > > >
> > > > # the payment was made to your account, but its status is still
pending
> > > >
> > > >
> > > > # $ipn->pending() also returns the reason why it is so.
> > > >
> > > >
> > > > } elsif ( $ipn->denied() ) {
> > > > # the payment denied
> > > >
> > > > } elsif ( $ipn->failed() ) {
> > > > # the payment failed
> > > >
> > > > }
> > > >
> > > > Obviously, I won't use die because it is generally bad web
> > > > practice, but if the returned status is pending, what do you do,
resubmit at
> > > > intervals using cron job?
> > > >
> > > > Jim
> > > >
> > > > On 22/02/07, Jim Rey <[EMAIL PROTECTED]> wrote:
> > > > >
> > > > > Alfie
> > > > >
> > > > > Thanks
> > > > >
> > > > > I'll check it out.
> > > > >
> > > > > Jim
> > > > >
> > > > > On 22/02/07, Alfie John <[EMAIL PROTECTED] > wrote:
> > > > > >
> > > > > > Hey Jim,
> > > > > > I've used Business::PayPal::IPN in the past and found it very
> > > > > > reliable.
> > > > > >
> > > > > > CPAN is your friend:
> > > > > > http://search.cpan.org/search?query=paypal+ipn&mode=all
> > > > > >
> > > > > > Alfie John
> > > > > > http://www.freehouse.com.au
> > > > > >
> > > > > > On 23/02/2007, at 12:30 AM, Jim Rey wrote:
> > > > > >
> > > > > > Hi
> > > > > >
> > > > > > I have downloaded some sample code written in perl from the
> > > > > > PayPal site, but it appears to handle the POSTed parameters
directly rather
> > > > > > like in CGI perl. I use mod_perl2 and Apache2 code. Does anyone
have a copy
> > > > > > of this code already converted for Mason2 / mod_perl2 / Apache2?
> > > > > >
> > > > > > Jim Rey
> > > > > >
> > > > > > The free code provided follows:
> > > > > >
> > > > > > #!/usr/bin/perl
> > > > > >
> > > > > > #(requires LWP::UserAgent)
> > > > > >
> > > > > > # 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';
> > > > > > $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
> > > > > > $item_name = $variable{'item_name'};
> > > > > > $item_number = $variable{'item_number'};
> > > > > > $payment_status = $variable{'payment_status'};
> > > > > > $payment_amount = $variable{'mc_gross'};
> > > > > > $payment_currency = $variable{'mc_currency'};
> > > > > > $txn_id = $variable{'txn_id'};
> > > > > > $receiver_email = $variable{'receiver_email'};
> > > > > > $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 your Primary PayPal email
> > > > > > # check that $payment_amount/$payment_currency are correct
> > > > > > # process payment
> > > > > > }
> > > > > > elsif ($res->content eq 'INVALID') {
> > > > > > # log for manual investigation
> > > > > > }
> > > > > > else {
> > > > > > # error
> > > > > > }
> > > > > > print "content-type: text/plain\n\n";
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Jim Rey
> > > > > > 48 Laburnum Park
> > > > > > Bradshaw
> > > > > > Bolton BL2 3BU
> > > > > > United Kingdom
> > > > > > Tel: 01204 593 222
> > > > > > Mob: 07816 751 874
> > > > > >
-------------------------------------------------------------------------
> > > > > >
> > > > > > Take Surveys. Earn Cash. Influence the Future of IT
> > > > > > Join SourceForge.net's Techsay panel and you'll get the chance
> > > > > > to share your
> > > > > > opinions on IT & business topics through brief surveys-and
> > > > > > earn cash
> > > > > >
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV_______________________________________________
> > > > > > Mason-users mailing list
> > > > > > Mason-users@lists.sourceforge.net
> > > > > > https://lists.sourceforge.net/lists/listinfo/mason-users
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Jim Rey
> > > > > 48 Laburnum Park
> > > > > Bradshaw
> > > > > Bolton BL2 3BU
> > > > > United Kingdom
> > > > > Tel: 01204 593 222
> > > > > Mob: 07816 751 874
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Jim Rey
> > > > 48 Laburnum Park
> > > > Bradshaw
> > > > Bolton BL2 3BU
> > > > United Kingdom
> > > > Tel: 01204 593 222
> > > > Mob: 07816 751 874
> > > >
> > > > ------------------------------
> > > >
> > > >
> > > >
-------------------------------------------------------------------------
> > > > Take Surveys. Earn Cash. Influence the Future of IT
> > > > Join SourceForge.net 's Techsay panel and you'll get the chance to
> > > > share your
> > > > opinions on IT & business topics through brief surveys-and earn
> > > > cash
> > > >
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> > > >
> > > > ------------------------------
> > > >
> > > > _______________________________________________
> > > > Mason-users mailing list
> > > > Mason-users@lists.sourceforge.net
> > > > https://lists.sourceforge.net/lists/listinfo/mason-users
> > > >
> > > >
> > > >
> > >
> > >
> > > --
> > > Jim Rey
> > > 48 Laburnum Park
> > > Bradshaw
> > > Bolton BL2 3BU
> > > United Kingdom
> > > Tel: 01204 593 222
> > > Mob: 07816 751 874
> > >
> >
> >
> >
> > --
> > Jim Rey
> > 48 Laburnum Park
> > Bradshaw
> > Bolton BL2 3BU
> > United Kingdom
> > Tel: 01204 593 222
> > Mob: 07816 751 874
> >
> >
> >
>
>
> --
> Jim Rey
> 48 Laburnum Park
> Bradshaw
> Bolton BL2 3BU
> United Kingdom
> Tel: 01204 593 222
> Mob: 07816 751 874
>
--
Jim Rey
48 Laburnum Park
Bradshaw
Bolton BL2 3BU
United Kingdom
Tel: 01204 593 222
Mob: 07816 751 874
--
Jim Rey
48 Laburnum Park
Bradshaw
Bolton BL2 3BU
United Kingdom
Tel: 01204 593 222
Mob: 07816 751 874
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Mason-users mailing list
Mason-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mason-users