- Add "cargs" argument including "-k" when in test mode.
- Move tests from t2/ and have them actually work out of the box.
- get rid of old Exporter / AutoLoader cruft
- patch from Mark D. Anderson <mda@discerning.com>:
- addrnum should be first digit string, not first word
- avoid uninitialized variable warnings in lpperl due to webspace and
debug
- Map customer_ip, customer_id, invoice_number and description fields
- Pass email, company, fax fields
- Set lpperl debug if our $DEBUG is set
- Better/supplimental download link for lpperl.pm
Revision history for Perl extension Business::OnlinePayment::LinkPoint.
-0.08 Thu May 1 21:26:05 2007 UTC
+0.08 Tue May 1 18:26:15 PDT 2007
- Improve error message for declined checks.
+ - Update for new test account.
+ - Add "cargs" argument including "-k" when in test mode.
+ - Move tests from t2/ and have them actually work out of the box.
+ - get rid of old Exporter / AutoLoader cruft
+ - patch from Mark D. Anderson <mda@discerning.com>:
+ - addrnum should be first digit string, not first word
+ - avoid uninitialized variable warnings in lpperl due to webspace and
+ debug
+ - Map customer_ip, customer_id, invoice_number and description fields
+ - Pass email, company, fax fields
+ - Set lpperl debug if our $DEBUG is set
+ - Better/supplimental download link for lpperl.pm
0.07 Thu Apr 6 18:27:32 2007 UTC
- Add account type mapping
package Business::OnlinePayment::LinkPoint;
-# $Id: LinkPoint.pm,v 1.28 2007-05-01 21:37:17 jeff Exp $
-
use strict;
use vars qw($VERSION @ISA $DEBUG @EXPORT @EXPORT_OK);
use Carp qw(croak);
-use AutoLoader;
use Business::OnlinePayment;
-require Exporter;
-
-@ISA = qw(Exporter AutoLoader Business::OnlinePayment);
-@EXPORT = qw();
-@EXPORT_OK = qw();
+@ISA = qw(Business::OnlinePayment);
$VERSION = '0.08';
$DEBUG = 0;
$month = '0'. $month if $month =~ /^\d$/;
}
- $content{'address'} =~ /^(\S+)\s/;
+ $content{'address'} =~ /^(\d+)\s/;
my $addrnum = $1;
my $result = $content{'result'};
#storename => \( $self->storename ),
configfile => \( $self->storename ),
keyfile => \( $self->keyfile ),
- addrnum => \$addrnum,
+
+ chargetotal => 'amount',
result => \$result,
+ addrnum => \$addrnum,
+ oid => 'order_number',
+ ip => 'customer_ip',
+ userid => 'customer_id',
+ ponumber => 'invoice_number',
+ comments => 'description',
+ #reference_number => 'reference_number',
+
cardnumber => 'card_number',
cardexpmonth => \$month,
cardexpyear => \$year,
- chargetotal => 'amount',
- oid => 'order_number',
+
bankname => 'bank_name',
bankstate => 'bank_state',
routing => 'routing_code',
host port configfile keyfile
result
chargetotal cardnumber cardexpmonth cardexpyear
- name email phone addrnum city state zip country
+ name company email phone fax addrnum city state zip country
oid
dl dlstate routing account accounttype bankname bankstate name void
if ( $DEBUG ) {
warn "$_ => $post_data{$_}\n" foreach keys %post_data;
+ $post_data{debug} = 'true';
}
- my %response;
+ $post_data{'cargs'} = '-k -m 300 -s -S' if $self->test_transaction;
+
+ # avoid some uninitialized warnings in lpperl.pm
+ foreach (qw(webspace debug debugging)) { $post_data{$_} ||= '' }
+
+ #my %response;
#{
# local($^W)=0;
# %response = $lperl->$action(\%post_data);
#}
- %response = $lperl->curl_process(\%post_data);
+ my %response = $lperl->curl_process(\%post_data);
if ( $DEBUG ) {
warn "$_ => $response{$_}\n" for keys %response;
} else {
$self->is_success(0);
$self->result_code('');
- $response{'r_error'} =~/\S/
- ? $self->error_message($response{'r_error'})
- : $self->error_message($response{'r_approved'}); # no r_error for checks
+ if ( $response{'r_error'} =~ /\S/ ) {
+ $self->error_message($response{'r_error'});
+ } else {
+ $self->error_message($response{'r_approved'}); # no r_error for checks
+ }
}
}
=head1 COMPATIBILITY
-This module implements an interface to the LinkPoint Perl Wrapper
+This module implements an interface to the LinkPoint Perl Wrapper "lpperl",
+which you need to download and install separately.
http://www.linkpoint.com/product_solutions/internet/lperl/lperl_main.html
+http://www.linkpoint.com/viewcart/down_index.htm
Versions 0.4 and on of this module support the LinkPoint Perl Wrapper version
3.5.
Ivan Kohler <ivan-linkpoint@420.am>
+Contributions from Mark D. Anderson <mda@discerning.com>
+
+Echeck work by Jeff Finucane <jeff@cmh.net>
+
Based on Busienss::OnlinePayment::AuthorizeNet written by Jason Kohles.
=head1 SEE ALSO
Copyright (c) 2002 Ivan Kohler
+Copyright (c) 2007 Freeside Internet Services, Inc.
All rights reserved. This program is free software; you can redistribute it
and/or modify it under the same terms as Perl itself.
account with LinkPoint (Cardservice): http://www.linkpoint.com/ and the
"LinkPoint Perl Wrapper":
http://www.linkpoint.com/product_solutions/internet/lperl/lperl_main.html
+http://www.linkpoint.com/viewcart/down_index.htm
It is based on Business::OnlinePayment::AuthorizeNet written by Jason Kohles.
-There are additional tests in t2/ that may be useful to you once you have a
-store number and key file.
-
Ivan Kohler <ivan-linkpoint@420.am>
Business::OnlinePayment is a generic interface for processing payments through
--- /dev/null
+BEGIN { $| = 1; print "1..1\n"; }
+
+use Business::OnlinePayment;
+
+my $tx = new Business::OnlinePayment("LinkPoint",
+ 'storename' => '1909796604',
+ 'keyfile' => './test.pem',
+ 'server' => 'staging.linkpt.net',
+);
+
+$tx->content(
+ type => 'VISA',
+ action => 'Normal Authorization',
+ description => 'Business::OnlinePayment::LinkPoint visa test',
+ amount => '0.01',
+ first_name => 'Tofu',
+ last_name => 'Beast',
+ address => '123 Anystreet',
+ city => 'Anywhere',
+ state => 'UT',
+ zip => '84058',
+ country => 'US',
+ email => 'ivan-linkpoint@420.am',
+ card_number => '4007000000027',
+ expiration => '12/2008',
+ result => 'DECLINE',
+);
+
+$tx->test_transaction(1);
+
+$tx->submit();
+
+if($tx->is_success()) {
+ print "not ok 1\n";
+ $auth = $tx->authorization;
+ warn "********* $auth ***********\n";
+} else {
+ print "ok 1\n";
+ #warn '***** '. $tx->error_message. " *****\n";
+ exit;
+}
+
--- /dev/null
+BEGIN { $| = 1; print "1..1\n"; }
+
+use Business::OnlinePayment;
+
+my $tx = new Business::OnlinePayment("LinkPoint",
+ 'storename' => '1909796604',
+ 'keyfile' => './test.pem',
+ 'server' => 'staging.linkpt.net',
+);
+
+$tx->content(
+ type => 'VISA',
+ action => 'Normal Authorization',
+ description => 'Business::OnlinePayment::LinkPoint visa test',
+ amount => '0.01',
+ first_name => 'Tofu',
+ last_name => 'Beast',
+ address => '123 Anystreet',
+ city => 'Anywhere',
+ state => 'UT',
+ zip => '84058',
+ country => 'US',
+ email => 'ivan-linkpoint@420.am',
+ card_number => '4007000000027',
+ expiration => '12/2008',
+);
+
+$tx->test_transaction(1);
+
+$tx->submit();
+
+if($tx->is_success()) {
+ print "ok 1\n";
+ #$auth = $tx->authorization;
+ #warn "********* $auth ***********\n";
+} else {
+ print "not ok 1\n";
+ warn '***** '. $tx->error_message. " *****\n";
+ exit;
+}
+
--- /dev/null
+BEGIN { $| = 1; print "1..1\n"; }
+
+$no_echeck_tests =
+ "Skipped: Linkpoint doesn't provide a way to test echecks\n";
+warn $no_echeck_tests;
+print "ok 1 # $no_echeck_tests";
+exit;
+
+use Business::OnlinePayment;
+
+my $tx = new Business::OnlinePayment("LinkPoint",
+ 'storename' => '1909796604',
+ 'keyfile' => './test.pem',
+ 'server' => 'staging.linkpt.net',
+);
+
+$tx->content(
+ type => 'ECHECK',
+ action => 'Normal Authorization',
+ description => 'Business::OnlinePayment::LinkPoint echeck test',
+ amount => '0.01',
+ first_name => 'Tofu',
+ last_name => 'Beast',
+ address => '123 Anystreet',
+ city => 'Anywhere',
+ state => 'UT',
+ zip => '84058',
+ country => 'US',
+ email => 'ivan-linkpoint@420.am',
+ account_number => '0027',
+ account_type => 'Personal Checking',
+ routing_code => '400700000',
+ bank_name => 'SomeBank',
+ bank_state => 'UT',
+);
+
+$tx->test_transaction(1);
+
+$tx->submit();
+
+if($tx->is_success()) {
+ print "ok 1\n";
+ #$auth = $tx->authorization;
+ #warn "********* $auth ***********\n";
+} else {
+ print "not ok 1\n";
+ warn '***** '. $tx->error_message. " *****\n";
+ exit;
+}
+
--- /dev/null
+BEGIN { $| = 1; print "1..1\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Business::OnlinePayment::LinkPoint;
+$loaded = 1;
+print "ok 1\n";
+++ /dev/null
-BEGIN { $| = 1; print "1..1\n"; }
-
-use Business::OnlinePayment;
-
-my $tx = new Business::OnlinePayment("LinkPoint",
- 'storename' => '1909922411',
- 'keyfile' => './test.pem',
-);
-
-$tx->content(
- type => 'VISA',
- action => 'Normal Authorization',
- description => 'Business::OnlinePayment::LinkPoint visa test',
- amount => '0.01',
- first_name => 'Tofu',
- last_name => 'Beast',
- address => '123 Anystreet',
- city => 'Anywhere',
- state => 'UT',
- zip => '84058',
- country => 'US',
- email => 'ivan-linkpoint@420.am',
- card_number => '4007000000027',
- expiration => '12/2008',
- result => 'DECLINE',
-);
-
-$tx->test_transaction(1);
-
-$tx->submit();
-
-if($tx->is_success()) {
- print "not ok 1\n";
- $auth = $tx->authorization;
- warn "********* $auth ***********\n";
-} else {
- print "ok 1\n";
- warn '***** '. $tx->error_message. " *****\n";
- exit;
-}
-
+++ /dev/null
-BEGIN { $| = 1; print "1..1\n"; }
-
-use Business::OnlinePayment;
-
-my $tx = new Business::OnlinePayment("LinkPoint",
- 'storename' => '1909922411',
- 'keyfile' => './test.pem',
-);
-
-$tx->content(
- type => 'VISA',
- action => 'Normal Authorization',
- description => 'Business::OnlinePayment::LinkPoint visa test',
- amount => '0.01',
- first_name => 'Tofu',
- last_name => 'Beast',
- address => '123 Anystreet',
- city => 'Anywhere',
- state => 'UT',
- zip => '84058',
- country => 'US',
- email => 'ivan-linkpoint@420.am',
- card_number => '4007000000027',
- expiration => '12/2008',
-);
-
-$tx->test_transaction(1);
-
-$tx->submit();
-
-if($tx->is_success()) {
- print "ok 1\n";
- $auth = $tx->authorization;
- warn "********* $auth ***********\n";
-} else {
- print "not ok 1\n";
- warn '***** '. $tx->error_message. " *****\n";
- exit;
-}
-
+++ /dev/null
-BEGIN { $| = 1; print "1..1\n"; }
-
-use Business::OnlinePayment;
-
-my $tx = new Business::OnlinePayment("LinkPoint",
- 'storename' => '1909922411',
- 'keyfile' => './test.pem',
-);
-
-$tx->content(
- type => 'CHECK',
- action => 'Normal Authorization',
- description => 'Business::OnlinePayment::LinkPoint visa test',
- amount => '0.01',
- first_name => 'Tofu',
- last_name => 'Beast',
- address => '123 Anystreet',
- city => 'Anywhere',
- state => 'UT',
- zip => '84058',
- country => 'US',
- email => 'ivan-linkpoint@420.am',
- account_number => '0027',
- account_type => 'Personal Checking',
- routing_code => '400700000',
- bank_name => 'SomeBank',
- bank_state => 'UT',
-);
-
-$tx->test_transaction(1);
-
-$tx->submit();
-
-if($tx->is_success()) {
- print "ok 1\n";
- $auth = $tx->authorization;
- warn "********* $auth ***********\n";
-} else {
- print "not ok 1\n";
- warn '***** '. $tx->error_message. " *****\n";
- exit;
-}
-
+++ /dev/null
-BEGIN { $| = 1; print "1..1\n"; }
-END {print "not ok 1\n" unless $loaded;}
-use Business::OnlinePayment::LinkPoint;
-$loaded = 1;
-print "ok 1\n";
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQDMuGGy905tleY6aAAQXp2ZaWNrQOunSowlue9LC4k/cBdtwTJ3
-cvpzMAN5680x/TcyNTOtcj9OPE4nrhxJqTqSR1Rri04XVy/f+8qZujXXesrnRmVx
-N83LxtqhP5dH7uNgs/apbXr0wfx/Aq42Odax6toKlEo8NvnJ5u86ZSNKoQIDAQAB
-AoGBAIIXUQ5XFWGR9gF7gT7lwSRx0hmf4aAnQTPgGe4IYKkNY/X85UL+r6RvCGZ7
-r6Nqk562LCa2CQCAVfHlNFiiz3Js2zOJamA37tlv6+pVc1OhZH0Xjd/vsoRvFXW6
-LNoQ62SYImVvbeetk6pI0ghHXBES1QQi18uuhK6y5Ks+EXABAkEA+6pA2x8lhIj1
-VBMnLj5JnNBKZcJmtWp5iE0vhOhoOirH2FiqZ0kGL1em/iTGpwxFGhje4paZsans
-/o3Nm2Ig4QJBANA/Hp+43K/54Y2Cci6L1sRFcanZMx6OnsozqvK9mcdNAIyYz4uj
-pUEHBnyGen6KS9/AuN4+XtojlZrFlYnbocECQE+/CGQm/3165Lpqg0zdAfiF7D1I
-l8E+5xnw03D7MCPWcJM2rXCjLCmOTeVUg/plIfR+EwqcDEHHBck36AIn2yECQGVq
-F9PZB0B8BKgRmuGoIFM9Lnl02TxMYHBAcUP9qeIxUc8mrAxpCZV9gl8qboUpfIHf
-LSiuXysEoVraVlTorQECQBYWeK4mfSRwofWimMtVv1a2YqPOf6vA57knBU2gPS2g
-rTrt7S0WmQvAwrKN5nd25XNOeVKPPbTFd2NQr5GSN3s=
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQC/119qB6Q7lnVfCEGUHCrhhRNIBsmu4i4iQkR9P+G7hzVLrr/8
++2xvUZ3D89wFxA2+rYwEcAGz73J2EQR8NPSRsTSW0c9HJEw5bAhistev8o8ZTygf
+Mwhta32TlD07TmlMpYetEM7rGC6fjZwWuJ0/Mi/q1canulBMqDXo4TzCeQIDAQAB
+AoGAYGwz/OsSVRDutXFE5NizhN6KLm2a+VedsIJ2Qi3Vm5f95ahTvyfv/JOdJFxx
+fkRoVCqOcbyKXpI/ibBL/NHxClkbqu9V5u4Ui0hEcWdyi/QPFGTc12BHzCHhJ1UB
+9MafcumUCxE7rA2LXF4eGVLqUjiP2+0Q5o3u/ycLFh5sA/ECQQD5gGKqAPHm9RrN
+sxPsziUQvVJI4ApE3IzhUXaeZvhGQfxYWkbgxBz9cKrz2xACOSszcJj2x9z74oIQ
+aU9lnpd/AkEAxNaF8+JttIAM5IeH8W9TT0iebPOl6RxUmtsfXkdXg3knQkYjpuWd
+gZzlM32CjfMhftcJBwdYAu6jSIqf0BhiBwJAHkf4sY1fzpoc4K5FUs5KLVfs7q9S
+T7080/PhI6R3qX9EsyxxwcHLiu7rsKD7tmld1uZpijoDlgaNppRBcKHo3QJAGsOM
+fSfJgOR0XFJtUo+vhTU7jVbntTWL725h6oDKzm6XvvQoftXzv57kr0aejMyFPmjg
+qlr+RY/LFd77ceEO2wJAK/eJ8lhUUXXx08L1WReN6PEbk9z3nUrWT7K0Z+d3xJnf
+3SVXgW514uVJ8Wi1RRmrXeGNredCXCROT18D+KyEuQ==
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
-MIICajCCAdOgAwIBAgIBADANBgkqhkiG9w0BAQQFADB7MQswCQYDVQQGEwJVUzEL
-MAkGA1UECBMCT0gxETAPBgNVBAcTCEFsbGlhbmNlMQswCQYDVQQKEwJtZTEWMBQG
-A1UEAxMNSmVmZiBGaW51Y2FuZTEnMCUGCSqGSIb3DQEJARYYbGlua3BvaW50QHdl
-YXNlbGxpcHMuY29tMB4XDTA3MDQwMjA1MTgyMVoXDTM3MDMzMDA1MTgyMVowezEL
-MAkGA1UEBhMCVVMxCzAJBgNVBAgTAk9IMREwDwYDVQQHEwhBbGxpYW5jZTELMAkG
-A1UEChMCbWUxFjAUBgNVBAMTDUplZmYgRmludWNhbmUxJzAlBgkqhkiG9w0BCQEW
-GGxpbmtwb2ludEB3ZWFzZWxsaXBzLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
-gYkCgYEAzLhhsvdObZXmOmgAEF6dmWlja0Drp0qMJbnvSwuJP3AXbcEyd3L6czAD
-eevNMf03MjUzrXI/TjxOJ64cSak6kkdUa4tOF1cv3/vKmbo113rK50ZlcTfNy8ba
-oT+XR+7jYLP2qW169MH8fwKuNjnWseraCpRKPDb5yebvOmUjSqECAwEAATANBgkq
-hkiG9w0BAQQFAAOBgQBGJBpIzo/3EXco1bQO622hB0BGsww3/w0aKL9fAHwwrWbw
-//XCjQgc5HcT3Pow+H0m/Pla1lfdqbBTAugT5gyePZppLZNGqvh2nUY/8K5vLO0j
-pm4WH9iks73XyOJOD9iRNaCbe4ETNDtt+MpEOA9/9FDEnmX6U/LCbkjo3NyRhA==
+MIICpjCCAg+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBmDELMAkGA1UEBhMCVVMx
+CzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdUcnVja2VlMSkwJwYDVQQKEyBGcmVlc2lk
+ZSBJbnRlcm5ldCBTZXJ2aWNlcywgSW5jLjEUMBIGA1UEAxMLSXZhbiBLb2hsZXIx
+KTAnBgkqhkiG9w0BCQEWGml2YW4tbGlua3BvaW50LXRlc3RANDIwLmFtMB4XDTA3
+MDUwMTIzMDgyMFoXDTM3MDQyODIzMDgyMFowgZgxCzAJBgNVBAYTAlVTMQswCQYD
+VQQIEwJDQTEQMA4GA1UEBxMHVHJ1Y2tlZTEpMCcGA1UEChMgRnJlZXNpZGUgSW50
+ZXJuZXQgU2VydmljZXMsIEluYy4xFDASBgNVBAMTC0l2YW4gS29obGVyMSkwJwYJ
+KoZIhvcNAQkBFhppdmFuLWxpbmtwb2ludC10ZXN0QDQyMC5hbTCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEAv9dfagekO5Z1XwhBlBwq4YUTSAbJruIuIkJEfT/h
+u4c1S66//Ptsb1Gdw/PcBcQNvq2MBHABs+9ydhEEfDT0kbE0ltHPRyRMOWwIYrLX
+r/KPGU8oHzMIbWt9k5Q9O05pTKWHrRDO6xgun42cFridPzIv6tXGp7pQTKg16OE8
+wnkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQA9pEdDqrx9ANBGRCCfCuhW7COqbI0y
+Pa/z1/VOvx+S4SwYhduyQmgKgg77xZ8IUKEb6f+LxWs4uE1bI69tnP7zTVyKT8bg
+TT43nYXNkTGgw/ePcaRgurw0PYEfS9EUU98SxVMcHTbEs9j5cph4+A7IYpi46AQp
+EBBJz9AhhXAk3g==
-----END CERTIFICATE-----