The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

         Dancer::Plugin::PaypalExpressRoutes
         

VERSION

  Version 0.12, April 2014
  

CHANGES

  v 0.12: updated installation files

DESCRIPTION

This is a Dancer interface for Business::PayPal::API::ExpressCheckout. It calls ExpressCheckout with the three requests involved in a transaction, and also makes available the customer data and transaction data returned in hashes from Paypal for possible use on a receipt page or logging.

CONFIGURATION

Your config.yml would contain something like this:

          plugins:
                        PaypalExpressRoutes:
                          pp_id: xxx
                          pp_password: xxx
                          pp_signature: xxx
                          pp_returnurl: http://mysite.tld/paypalgetrequest
                          pp_cancelurl: http://mysite.tld

FUNCTIONS

Your site.pm would include:

        use Dancer::Plugin::PaypalExpressRoutes;

and the following routes:

    post '/paypalsetrequest' => sub {
             $pptotal = params->{'total_cost'}; # or your method
             ppsetrequest( $pptotal );
     };

This will transfer the customer to the Paypal site. When he hits the 'confirm' button, Paypal will invoke the configured return url which will invoke the next route:

    get '/paypalgetrequest' => sub {
       ppgetrequest(); 
           return redirect '/paypalcheckout'; # or your preferred page
     };

The paypalcheckout page should include whatever data you want the customer to see before finalising the order. Optionally you may populate the page with the details hash returned from the previous request, eg [% details.FirstName %] and so on, as found in the ppgetrequest() sub above.

     get '/paypalcheckout' => sub {
       template 'checkout/paypalcheckout', {
           $details = getppdetails(), # customer details
                   # order details
                  }
      };

The 'finalise order' button should then invoke the following route:

    post '/paypaldorequest' => sub  {
        
                my $ok = ppdorequest( $pp_order_total );

                if ($ok eq 'success') {
                # complete order process
                return  redirect  '/paypalreceipt'; 
                        }
                else {
                  # some sort of error message or page
                }
                
                return redirect '/checkout' if ! $ppresult{Token};
                                           
        };

And this then invokes the final route to display the receipt:

     get '/paypalreceipt' => sub {
            return template 'checkout/paypalreceipt', {
           $details = getppdetails(), # customer details
                   # other details to display
                   }
     };

CONVENIENCE FUNCTIONS

        getppdetails(); 
        

will access all customer data returned in the details hash from the 'ppgetrequest' upon the customer returning from Paypal

        getppresult(); 
        

will access all the transaction data in the results hash returned from the 'ppdorequest' finalising the transaction.

AUTHOR

Lyn St George, lyn@zolotek.net

LICENCE AND COPYRIGHT

Copyright Lyn St George

This module is free software and is published under the same terms as Perl itself.

See http://dev.perl.org/licenses/ for more information.