File Coverage

lib/PagSeguro/API/Checkout.pm
Criterion Covered Total %
statement 4 6 66.6
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 6 8 75.0


line stmt bran cond sub pod time code
1             package PagSeguro::API::Checkout;
2 6     6   34 use base 'PagSeguro::API::Base';
  6         12  
  6         5343  
3              
4 6     6   14087 use XML::Simple;
  0            
  0            
5              
6             # constructor
7             sub new {
8             my $class = shift;
9             my %args = @_ if ( @_ % 2 ) == 0;
10              
11             return bless {
12             email => $args{email} || undef,
13             token => $args{token} || undef,
14              
15             _code => undef,
16             _transaction => undef,
17             }, $class;
18             }
19              
20             # accessors
21             sub code {
22             return $_[0]->{_code} if $_[0]->{_code};
23             }
24              
25             # methods
26             sub send {
27             my $self = shift;
28             my %args = ( @_ % 2 ) == 0 ? @_ : undef;
29              
30             $self->{_code} = undef;
31              
32             if ( scalar(%args) ) {
33              
34             # parse and return by file
35             return XMLin( $args{file} ) if $args{file};
36              
37             # default parameters that you dont have to pass
38             $args{email} = $args{email} || $self->{email};
39             $args{token} = $args{token} || $self->{token};
40             $args{currency} = $args{currency} || 'BRL';
41             $args{shippingType} = $args{shippingType} || '3';
42              
43             my $uri = $self->_checkout_uri( \%args );
44             my $response = $self->post( $uri, \%args );
45              
46             # debug
47             warn "[Debug] Checkout Response: $response\n"
48             if $ENV{PAGSEGURO_API_DEBUG};
49              
50             my $xml = XMLin($response);
51              
52             # save code for payment url
53             $self->{_code} = $xml->{code} if $xml->{code};
54              
55             return $xml;
56             }
57             else {
58             # error
59             die "Error: invalid paramether bound";
60             }
61             }
62              
63             sub payment_url {
64             my ($self, $code) = @_;
65              
66             $code = $self->code unless $code;
67            
68             my $uri = join '',
69             (
70             $self->resource(
71             ( $ENV{PAGSEGURO_API_SANDBOX} ? 'SANDBOX_CHECKOUT_PAYMENT' : 'CHECKOUT_PAYMENT' )
72             ),
73             "?code=",
74             $code
75             );
76              
77             warn "[Debug] URI: $uri\n" if $ENV{PAGSEGURO_API_DEBUG};
78             return $uri;
79             }
80              
81             sub _checkout_uri {
82             my ( $self, $args ) = @_;
83              
84             # add email and token
85             $args->{email} = $args->{email} || $self->{email};
86             $args->{token} = $args->{token} || $self->{token};
87              
88             # build query string
89             my $query_string = join '&', map { "$_=$args->{$_}" } keys %$args;
90              
91             my $uri = join '',
92             (
93             $self->resource(
94             ( $ENV{PAGSEGURO_API_SANDBOX} ? 'SANDBOX_URI' : 'BASE_URI' )
95             ),
96             $self->resource('CHECKOUT'),
97             "?",
98             $query_string
99             );
100              
101             warn "[Debug] URI: $uri\n" if $ENV{PAGSEGURO_API_DEBUG};
102             return $uri;
103             }
104              
105             1;