perl-business-paypal-api/lib/Business/PayPal/API/GetTransactionDetails.pm
2014-03-22 22:31:50 -04:00

303 lines
8.8 KiB
Perl

package Business::PayPal::API::GetTransactionDetails;
use 5.008001;
use strict;
use warnings;
use SOAP::Lite 0.67;
use Business::PayPal::API ();
our @ISA = qw(Business::PayPal::API);
our @EXPORT_OK = qw(GetTransactionDetails); ## fake exporter
sub GetTransactionDetails {
my $self = shift;
my %args = @_;
my @trans = (
$self->version_req,
SOAP::Data->name( TransactionID => $args{TransactionID} )
->type( 'xs:string' ),
);
my $request
= SOAP::Data->name(
GetTransactionDetailsRequest => \SOAP::Data->value( @trans ) )
->type( "ns:GetTransactionDetailsRequestType" );
my $som = $self->doCall( GetTransactionDetailsReq => $request )
or return;
my $path = '/Envelope/Body/GetTransactionDetailsResponse';
my %response = ();
unless ( $self->getBasic( $som, $path, \%response ) ) {
$self->getErrors( $som, $path, \%response );
return %response;
}
$path .= '/PaymentTransactionDetails';
$self->getFields(
$som, $path,
\%response,
{ Business => '/ReceiverInfo/Business',
Receiver => '/ReceiverInfo/Receiver',
ReceiverID => '/ReceiverInfo/ReceiverID',
Payer => '/PayerInfo/Payer',
PayerID => '/PayerInfo/PayerID',
PayerStatus => '/PayerInfo/PayerStatus',
Salutation => '/PayerInfo/PayerName/Salutation',
FirstName => '/PayerInfo/PayerName/FirstName',
MiddleName => '/PayerInfo/PayerName/MiddleName',
LastName => '/PayerInfo/PayerName/LastName',
PayerCountry => '/PayerInfo/PayerCountry',
PayerBusiness => '/PayerInfo/PayerBusiness',
AddressOwner => '/PayerInfo/Address/AddressOwner',
AddressStatus => '/PayerInfo/Address/AddressStatus',
ADD_Name => '/PayerInfo/Address/Name',
Street1 => '/PayerInfo/Address/Street1',
Street2 => '/PayerInfo/Address/Street2',
CityName => '/PayerInfo/Address/CityName',
StateOrProvince => '/PayerInfo/Address/StateOrProvince',
Country => '/PayerInfo/Address/Country',
CountryName => '/PayerInfo/Address/CountryName',
Phone => '/PayerInfo/Address/Phone',
PostalCode => '/PayerInfo/Address/PostalCode',
TransactionID => '/PaymentInfo/TransactionID',
ParentTransactionID => '/PaymentInfo/ParentTransactionID',
ReceiptID => '/PaymentInfo/ReceiptID',
TransactionType => '/PaymentInfo/TransactionType',
PaymentType => '/PaymentInfo/PaymentType',
PaymentDate => '/PaymentInfo/PaymentDate',
GrossAmount => '/PaymentInfo/GrossAmount',
FeeAmount => '/PaymentInfo/FeeAmount',
SettleAmount => '/PaymentInfo/SettleAmount',
TaxAmount => '/PaymentInfo/TaxAmount',
ExchangeRate => '/PaymentInfo/ExchangeRate',
PaymentStatus => '/PaymentInfo/PaymentStatus',
PendingReason => '/PaymentInfo/PendingReason',
ReasonCode => '/PaymentInfo/ReasonCode',
ProtectionEligibility => '/PaymentInfo/ProtectionEligibility',
InvoiceID => '/PaymentItemInfo/InvoiceID',
Custom => '/PaymentItemInfo/Custom',
Memo => '/PaymentItemInfo/Memo',
SalesTax => '/PaymentItemInfo/SalesTax',
PII_SalesTax => '/PaymentItemInfo/PaymentItem/SalesTax',
PII_Name => '/PaymentItemInfo/PaymentItem/Name',
PII_Number => '/PaymentItemInfo/PaymentItem/Number',
PII_Quantity => '/PaymentItemInfo/PaymentItem/Quantity',
PII_Amount => '/PaymentItemInfo/PaymentItem/Amount',
PII_Options => '/PaymentItemInfo/PaymentItem/Options',
PII_SubscriptionID =>
'/PaymentItemInfo/Subscription/SubscriptionID',
PII_SubscriptionDate =>
'/PaymentItemInfo/Subscription/SubscriptionDate',
PII_EffectiveDate =>
'/PaymentItemInfo/Subscription/EffectiveDate',
PII_RetryTime => '/PaymentItemInfo/Subscription/RetryTime',
PII_Username => '/PaymentItemInfo/Subscription/Username',
PII_Password => '/PaymentItemInfo/Subscription/Password',
PII_Recurrences => '/PaymentItemInfo/Subscription/Recurrences',
PII_reattempt => '/PaymentItemInfo/Subscription/reattempt',
PII_recurring => '/PaymentItemInfo/Subscription/recurring',
PII_Amount => '/PaymentItemInfo/Subscription/Amount',
PII_period => '/PaymentItemInfo/Subscription/period',
PII_BuyerID => '/PaymentItemInfo/Auction/BuyerID',
PII_ClosingDate => '/PaymentItemInfo/Auction/ClosingDate',
PII_multiItem => '/PaymentItemInfo/Auction/multiItem',
}
);
## multiple payment items
my $paymentitems = $self->getFieldsList(
$som,
$path . '/PaymentItemInfo/PaymentItem',
{ SalesTax => 'SalesTax',
Name => 'Name',
Number => 'Number',
Quantity => 'Quantity',
Amount => 'Amount',
Options => 'Options',
}
);
if ( scalar( @$paymentitems ) > 0 ) {
$response{PaymentItems} = $paymentitems;
}
return %response;
}
1;
__END__
=head1 NAME
Business::PayPal::API::GetTransactionDetails - PayPal GetTransactionDetails API
=head1 SYNOPSIS
use Business::PayPal::API::GetTransactionDetails;
my $pp = new Business::PayPal::API::GetTransactionDetails ( ... );
or
## see Business::PayPal::API documentation for parameters
use Business::PayPal::API qw(GetTransactionDetails);
my $pp = new Business::PayPal::API( ... );
my %response = $pp->GetTransactionDetails( TransactionID => $transid, );
=head1 DESCRIPTION
B<Business::PayPal::API::GetTransactionDetails> implements PayPal's
B<GetTransactionDetails> API using SOAP::Lite to make direct API calls to
PayPal's SOAP API server. It also implements support for testing via
PayPal's I<sandbox>. Please see L<Business::PayPal::API> for details
on using the PayPal sandbox.
=head2 GetTransactionDetails
Implements PayPal's B<GetTransactionDetails> API call. Supported
parameters include:
TransactionID
as described in the PayPal "Web Services API Reference" document.
Returns a hash containing the transaction details, including these fields:
Business
Receiver
ReceiverID
Payer
PayerID
PayerStatus
Salutation
FirstName
MiddleName
LastName
PayerCountry
PayerBusiness
AddressOwner
AddressStatus
ADD_Name
Street1
Street2
CityName
StateOrProvince
Country
CountryName
Phone
PostalCode
TransactionID
ParentTransactionID
ReceiptID
TransactionType
PaymentType
PaymentDate
GrossAmount
FeeAmount
SettleAmount
TaxAmount
ExchangeRate
PaymentStatus
PendingReason
ReasonCode
InvoiceID
Custom
Memo
SalesTax
PII_SaleTax
PII_Name
PII_Number
PII_Quantity
PII_Amount
PII_Options
PII_SubscriptionID
PII_SubscriptionDate
PII_EffectiveDate
PII_RetryTime
PII_Username
PII_Password
PII_Recurrences
PII_reattempt
PII_recurring
PII_Amount
PII_period
PII_BuyerID
PII_ClosingDate
PII_multiItem
As described in the API document. Note: some fields have prefixes to
remove ambiguity for like-named fields (e.g., "PII_").
If there are multiple PaymentItems, then an additional field
'PaymentItems' will be available with an arrayref of PaymentItem
records:
PaymentItems => [ { SalesTax => ...,
Name => '...',
Number => '...',
Quantity => '...',
Amount => '...',
},
{ SalesTax => ..., etc.
} ]
Example:
my %resp = $pp->GetTransactionDetails( TransactionID => $trans_id );
print "Payer: $resp{Payer}\n";
for my $item ( @{ $resp{PaymentItems} } ) {
print "Name: " . $item->{Name} . "\n";
print "Amt: " . $item->{Amount} . "\n";
}
=head2 ERROR HANDLING
See the B<ERROR HANDLING> section of B<Business::PayPal::API> for
information on handling errors.
=head2 EXPORT
None by default.
=head1 SEE ALSO
L<https://developer.paypal.com/en_US/pdf/PP_APIReference.pdf>
=head1 AUTHOR
Scot Wiersdorf E<lt>scott@perlcode.orgE<gt>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2006 by Scott Wiersdorf
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.5 or,
at your option, any later version of Perl 5 you may have available.
=cut