NAME
VERSION
version 0.02 Checkout::CyberSource::SOAP A Modern Perl interface to
CyberSource's SOAP API.
WHY?
Folks often have a need for simple and quick, but "enterprise-level"
payment- gateway integration. CyberSource's Simple Order API still
requires that you compile a binary, and it won't compile on 64-bit
processors (no, not OSes, but processors, i.e., what I imagine to be
most development workstations by now). So you have to use the SOAP API,
which is unwieldy, not least because it uses XML. May no one struggle
with this again. :)
NOTICE
Credit Card Numbers
To save you some legal hassles and vulnerability, this module does not
store credit card numbers. If you'd like the option of returning a
credit card number from the Response object, please send a patch.
ID and Key
Please note that you must use your own CyberSource id and key, even for
testing purposes on CyberSource's test server. This module defaults to
using the test server, so when you go into production, set production to
a true value in your configuration file or in your object construction,
e.g.,
my $checkout = Checkout::CyberSource::SOAP->new(
id => $id,
key => $key,
production => 1,
column_map => $column_map
);
SYNOPSIS
This is for single transactions of variable quantity.
column_map is important. You must map the keys in the hashref you send
(which also sets the keys for the payment_info hashref you receive
back). CyberSource uses camelCased and otherwise idiosyncratic
identifiers here, so this mapping cannot be avoided.
I mentioned above that this module does not store credit card numbers;
more specifically, the payment_info hash that the Response object
returns deletes the credit card number, replaces it with card_type, and
adds 4 additional keys:
decision fault reasoncode refcode
These are for more a detailed record of why a particular transaction was
denied.
Standalone Usage
You can use this as a standalone module by sending it a payment
information hashref. You will receive a
Checkout::CyberSource::SOAP::Response object containing either a success
message or an error message. If successful, you will also receive a
payment_info hashref, suitable for storing in your database.
my $checkout = Checkout::CyberSource::SOAP->new(
id => $id,
key => $key,
column_map => $column_map
);
...
my $response = $checkout->checkout($args);
...
if ($response->success) {
my $payment_info = $response->payment_info;
# Store payment_info in your database, etc.
}
else {
# Display error message
print $response->error->{message};
}
Catalyst
You can use this in a Catalyst application by using
Catalyst::Model::Adaptor and setting your configuration file somewhat
like this:
class Checkout::CyberSource::SOAP
id your_cybersource_id
key your cybersource_key
#production 1
firstName firstname
lastName lastname
street1 address1
city city
state state
postalCode zip
country country
email email
ipAddress ip
unitPrice amount
quantity quantity
currency currency
accountNumber cardnumber
expirationMonth expiry.month
expirationYear expiry.year
production is commented out. You will want to set production to true
when you are ready to process real transactions. So that in your payment
processing controller you would get validated data back from a shopping
cart or other form and do something like this:
# If your checkout form is valid, call Checkout::CyberSource::SOAP's
# checkout method:
my $response = $c->model('Checkout')->checkout( $c->req->params );
# Check the Checkout::CyberSource::SOAP::Response object, branch
# accordingly.
if ( $response->success ) {
# Store a payment in your database
my $payment = $c->model('Payment')->create($response->payment_info);
$c->flash( status_msg => $response->success->{message} );
$c->res->redirect($c->uri_for('I_got_your_money'));
}
else {
$c->stash( error_msg => $response->error->{message} );
return;
}
METHODS
checkout
The only method you need to call.
addComplexType
Internal method for construction of the SOAP object.
addField
Internal method for construction of the SOAP object.
addItem
Internal method for construction of the SOAP object.
addService
Internal method for construction of the SOAP object.
formSOAPHeader
Internal method for construction of the SOAP object.
AUTHOR
Amiri Barksdale
CONTRIBUTORS
Tomas Doran (t0m)
COPYRIGHT
Copyright (c) 2010 the Checkout::CyberSource::SOAP "AUTHOR" and
"CONTRIBUTORS" as listed above.
LICENSE
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
SEE ALSO
Catalyst::Model::Adaptor Business::OnlinePayment::CyberSource