Business-CPI-Gateway-PayPal

 view release on metacpan or  search on metacpan

lib/Business/CPI/Gateway/PayPal/IPN.pm  view on Meta::CPAN

package Business::CPI::Gateway::PayPal::IPN;
# ABSTRACT: Instant Payment Notifications
use Moo;
use LWP::UserAgent ();

our $VERSION = '0.905'; # VERSION

has is_valid => (
    is      => 'lazy',
    default => sub {
        my $self = shift;

        for ($self->response->decoded_content) {
            return 0 if /^INVALID$/;
            return 1 if /^VERIFIED$/;

            die "Vague response: " . $_;
        }
    }
);

has vars => (
    is      => 'lazy',
    default => sub {
        my $self = shift;
        return { map { $_ => $self->query->param($_) } $self->query->param };
    },
);

has gateway_url => (
    is => 'ro',
    default => sub { 'https://www.paypal.com/cgi-bin/webscr' },
);

has query => (
    is      => 'ro',
    default => sub { require CGI; CGI->new() },
);

has user_agent_name => (
    is => 'ro',
    default => sub {
        my $base    = 'Business::CPI::Gateway::PayPal';
        my $version = __PACKAGE__->VERSION;

        return $version ? "$base/$version" : $base;
    }
);

has user_agent => (
    is      => 'lazy',
    default => sub {
        my $self = shift;

        my $ua = LWP::UserAgent->new();
        $ua->agent( $self->user_agent_name );

        return $ua;
    },
);

has response => (
    is      => 'lazy',
    default => sub {
        my $self = shift;

        my $ua   = $self->user_agent;
        my %vars = %{ $self->vars };
        my $gtw  = $self->gateway_url;

        $vars{cmd} = "_notify-validate";

        my $r = $ua->post( $gtw, \%vars );



( run in 0.703 second using v1.01-cache-2.11-cpan-d7f47b0818f )