NAME
    WebService::PayPal::NVP - PayPal NVP API

DESCRIPTION
    A pure object oriented interface to PayPal's NVP API (Name-Value Pair).
    A lot of the logic in this module was taken from Business::PayPal::NVP.
    I re-wrote it because it wasn't working with Catalyst adaptors and I
    couldn't save instances of it in Moose-type accessors. Otherwise it
    worked fine. So if you don't need that kind of support you should visit
    Business::PayPal::NVP!. Currently supports "do_direct_payment",
    "do_express_checkout_payment", "get_express_checkout_details" and
    "set_express_checkout". Another difference with this module compared to
    Business::PayPal::NVP is that the keys may be passed as lowercase. Also,
    a response will return a WebService::PayPal::NVP::Response object where
    the response values are methods. Timestamps will automatically be
    converted to DateTime objects for your convenience.

SYNTAX
        my $nvp = WebService::PayPal::NVP->new(
            user   => 'user.tld'
            pwd    => 'xxx',
            sig    => 'xxxxxxx',
            branch => 'sandbox',
        );
    
        my $res = $nvp->set_express_checkout({
            DESC              => 'Payment for something cool',
            AMT               => 25.00,
            CURRENCYCODE      => 'GBP',
            PAYMENTACTION     => 'Sale',
            RETURNURL         => "http://returnurl.tld",
            CANCELURL         => 'http//cancelurl.tld",
            LANDINGPAGE       => 'Login',
            ADDOVERRIDE       => 1,
            SHIPTONAME        => "Customer Name",
            SHIPTOSTREET      => "7 Customer Street", 
            SHIPTOSTREET2     => "", 
            SHIPTOCITY        => "Town", 
            SHIPTOZIP         => "Postcode", 
            SHIPTOEMAIL       => "customer\@example.com", 
            SHIPTOCOUNTRYCODE => 'GB',
        });
    
        if ($res->success) {
            # timestamps turned into DateTime objects
            say "Response received at "
                . $res->timestamp->dmy . " "
                . $res->timestamp->hms(':');

            say $res->token;

            for my $arg ($res->args) {
                if ($res->has_arg($arg)) {
                    say "$arg => " . $res->$arg;
                }
            }

            # get a redirect uri to paypal express checkout
            # the Response object will automatically detect if you have 
            # live or sandbox and return the appropriate url for you
            if (my $redirect_user_to = $res->express_checkout_uri) {
                $web_framework->redirect( $redirect_user_to );
            }
        }
        else {
            say $_
              for @{$res->errors};
        }

AUTHOR
    Brad Haywood <brad@geeksware.com>

CREDITS
    A lot of this module was taken from Business::PayPal::NVP by Scott
    Wiersdorf. It was only rewritten in order to work properly in
    Catalyst::Model::Adaptor.

LICENSE
    You may distribute this code under the same terms as Perl itself.

