inital checking of OpenECHO module
authorivan <ivan>
Fri, 3 Sep 2004 23:37:13 +0000 (23:37 +0000)
committerivan <ivan>
Fri, 3 Sep 2004 23:37:13 +0000 (23:37 +0000)
25 files changed:
Changes [new file with mode: 0644]
MANIFEST [new file with mode: 0644]
Makefile [new file with mode: 0644]
Makefile.PL [new file with mode: 0644]
OpenECHO.pm [new file with mode: 0644]
README [new file with mode: 0644]
TODO [new file with mode: 0644]
blib/arch/auto/Business/OnlinePayment/OpenECHO/.exists [new file with mode: 0644]
blib/lib/Business/OnlinePayment/.exists [new file with mode: 0644]
blib/lib/Business/OnlinePayment/OpenECHO.pm [new file with mode: 0644]
blib/lib/auto/Business/OnlinePayment/OpenECHO/.exists [new file with mode: 0644]
blib/man3/.exists [new file with mode: 0644]
generror/ISPGuide-Codes.asp [new file with mode: 0644]
generror/errortable.html [new file with mode: 0644]
generror/errortable2hash.pl [new file with mode: 0755]
pm_to_blib [new file with mode: 0644]
t/bad_card.t [new file with mode: 0644]
t/bop.t [new file with mode: 0644]
t/capture.t [new file with mode: 0644]
t/check.t [new file with mode: 0644]
t/credit_card.t [new file with mode: 0644]
t/crypt_bad_card.t [new file with mode: 0644]
t/crypt_credit_card.t [new file with mode: 0644]
t/crypt_load.t [new file with mode: 0644]
t/load.t [new file with mode: 0644]

diff --git a/Changes b/Changes
new file mode 100644 (file)
index 0000000..f6c339e
--- /dev/null
+++ b/Changes
@@ -0,0 +1,3 @@
+0.01  Wed Aug 25 23:27:55 2004
+        - original version; created by ivan 1.0
+
diff --git a/MANIFEST b/MANIFEST
new file mode 100644 (file)
index 0000000..8202973
--- /dev/null
+++ b/MANIFEST
@@ -0,0 +1,17 @@
+OpenECHO.pm
+Changes
+MANIFEST
+Makefile.PL
+README
+t/load.t
+t/crypt_load.t
+t/credit_card.t
+t/crypt_credit_card.t
+t/check.t
+t/bop.t
+t/capture.t
+t/bad_card.t
+t/crypt_bad_card.t
+generror/ISPGuide-Codes.asp
+generror/errortable.html
+generror/errortable2hash.pl
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..2af9e8d
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,710 @@
+# This Makefile is for the Business::OnlinePayment::OpenECHO extension to perl.
+#
+# It was generated automatically by MakeMaker version
+# 6.17 (Revision: 1.133) from the contents of
+# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
+#
+#       ANY CHANGES MADE HERE WILL BE LOST!
+#
+#   MakeMaker ARGV: ()
+#
+#   MakeMaker Parameters:
+
+#     AUTHOR => q[Ivan Kohler <ivan-openecho@420.am>]
+#     NAME => q[Business::OnlinePayment::OpenECHO]
+#     PREREQ_PM => { Tie::IxHash=>q[0], URI::Escape=>q[0], Business::OnlinePayment=>q[0] }
+#     VERSION_FROM => q[OpenECHO.pm]
+
+# --- MakeMaker post_initialize section:
+
+
+# --- MakeMaker const_config section:
+
+# These definitions are from config.sh (via /usr/lib/perl/5.8/Config.pm)
+
+# They may have been overridden via Makefile.PL or on the command line
+AR = ar
+CC = cc
+CCCDLFLAGS = -fPIC
+CCDLFLAGS = -Wl,-E
+DLEXT = so
+DLSRC = dl_dlopen.xs
+LD = cc
+LDDLFLAGS = -shared -L/usr/local/lib
+LDFLAGS =  -L/usr/local/lib
+LIBC = /lib/libc-2.3.2.so
+LIB_EXT = .a
+OBJ_EXT = .o
+OSNAME = linux
+OSVERS = 2.4.26-ti1211
+RANLIB = :
+SITELIBEXP = /usr/local/share/perl/5.8.4
+SITEARCHEXP = /usr/local/lib/perl/5.8.4
+SO = so
+EXE_EXT = 
+FULL_AR = /usr/bin/ar
+VENDORARCHEXP = /usr/lib/perl5
+VENDORLIBEXP = /usr/share/perl5
+
+
+# --- MakeMaker constants section:
+AR_STATIC_ARGS = cr
+DIRFILESEP = /
+NAME = Business::OnlinePayment::OpenECHO
+NAME_SYM = Business_OnlinePayment_OpenECHO
+VERSION = 0.01
+VERSION_MACRO = VERSION
+VERSION_SYM = 0_01
+DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
+XS_VERSION = 0.01
+XS_VERSION_MACRO = XS_VERSION
+XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
+INST_ARCHLIB = blib/arch
+INST_SCRIPT = blib/script
+INST_BIN = blib/bin
+INST_LIB = blib/lib
+INST_MAN1DIR = blib/man1
+INST_MAN3DIR = blib/man3
+MAN1EXT = 1p
+MAN3EXT = 3pm
+INSTALLDIRS = site
+DESTDIR = 
+PREFIX = /usr
+PERLPREFIX = $(PREFIX)
+SITEPREFIX = $(PREFIX)/local
+VENDORPREFIX = $(PREFIX)
+INSTALLPRIVLIB = $(PERLPREFIX)/share/perl/5.8
+DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB)
+INSTALLSITELIB = $(SITEPREFIX)/share/perl/5.8.4
+DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB)
+INSTALLVENDORLIB = $(VENDORPREFIX)/share/perl5
+DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB)
+INSTALLARCHLIB = $(PERLPREFIX)/lib/perl/5.8
+DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB)
+INSTALLSITEARCH = $(SITEPREFIX)/lib/perl/5.8.4
+DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH)
+INSTALLVENDORARCH = $(VENDORPREFIX)/lib/perl5
+DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH)
+INSTALLBIN = $(PERLPREFIX)/bin
+DESTINSTALLBIN = $(DESTDIR)$(INSTALLBIN)
+INSTALLSITEBIN = $(SITEPREFIX)/bin
+DESTINSTALLSITEBIN = $(DESTDIR)$(INSTALLSITEBIN)
+INSTALLVENDORBIN = $(VENDORPREFIX)/bin
+DESTINSTALLVENDORBIN = $(DESTDIR)$(INSTALLVENDORBIN)
+INSTALLSCRIPT = $(PERLPREFIX)/bin
+DESTINSTALLSCRIPT = $(DESTDIR)$(INSTALLSCRIPT)
+INSTALLMAN1DIR = $(PERLPREFIX)/share/man/man1
+DESTINSTALLMAN1DIR = $(DESTDIR)$(INSTALLMAN1DIR)
+INSTALLSITEMAN1DIR = $(SITEPREFIX)/man/man1
+DESTINSTALLSITEMAN1DIR = $(DESTDIR)$(INSTALLSITEMAN1DIR)
+INSTALLVENDORMAN1DIR = $(VENDORPREFIX)/share/man/man1
+DESTINSTALLVENDORMAN1DIR = $(DESTDIR)$(INSTALLVENDORMAN1DIR)
+INSTALLMAN3DIR = $(PERLPREFIX)/share/man/man3
+DESTINSTALLMAN3DIR = $(DESTDIR)$(INSTALLMAN3DIR)
+INSTALLSITEMAN3DIR = $(SITEPREFIX)/man/man3
+DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR)
+INSTALLVENDORMAN3DIR = $(VENDORPREFIX)/share/man/man3
+DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR)
+PERL_LIB = /usr/share/perl/5.8
+PERL_ARCHLIB = /usr/lib/perl/5.8
+LIBPERL_A = libperl.a
+FIRST_MAKEFILE = Makefile
+MAKEFILE_OLD = $(FIRST_MAKEFILE).old
+MAKE_APERL_FILE = $(FIRST_MAKEFILE).aperl
+PERLMAINCC = $(CC)
+PERL_INC = /usr/lib/perl/5.8/CORE
+PERL = /usr/bin/perl
+FULLPERL = /usr/bin/perl
+ABSPERL = $(PERL)
+PERLRUN = $(PERL)
+FULLPERLRUN = $(FULLPERL)
+ABSPERLRUN = $(ABSPERL)
+PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"
+PERL_CORE = 0
+PERM_RW = 644
+PERM_RWX = 755
+
+MAKEMAKER   = /usr/share/perl/5.8/ExtUtils/MakeMaker.pm
+MM_VERSION  = 6.17
+MM_REVISION = 1.133
+
+# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
+# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
+# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
+# DLBASE  = Basename part of dynamic library. May be just equal BASEEXT.
+FULLEXT = Business/OnlinePayment/OpenECHO
+BASEEXT = OpenECHO
+PARENT_NAME = Business::OnlinePayment
+DLBASE = $(BASEEXT)
+VERSION_FROM = OpenECHO.pm
+OBJECT = 
+LDFROM = $(OBJECT)
+LINKTYPE = dynamic
+
+# Handy lists of source code files:
+XS_FILES = 
+C_FILES  = 
+O_FILES  = 
+H_FILES  = 
+MAN1PODS = 
+MAN3PODS = OpenECHO.pm
+
+# Where is the Config information that we are using/depend on
+CONFIGDEP = $(PERL_ARCHLIB)$(DIRFILESEP)Config.pm $(PERL_INC)$(DIRFILESEP)config.h
+
+# Where to build things
+INST_LIBDIR      = $(INST_LIB)/Business/OnlinePayment
+INST_ARCHLIBDIR  = $(INST_ARCHLIB)/Business/OnlinePayment
+
+INST_AUTODIR     = $(INST_LIB)/auto/$(FULLEXT)
+INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
+
+INST_STATIC      = 
+INST_DYNAMIC     = 
+INST_BOOT        = 
+
+# Extra linker info
+EXPORT_LIST        = 
+PERL_ARCHIVE       = 
+PERL_ARCHIVE_AFTER = 
+
+
+TO_INST_PM = OpenECHO.pm
+
+PM_TO_BLIB = OpenECHO.pm \
+       $(INST_LIB)/Business/OnlinePayment/OpenECHO.pm
+
+
+# --- MakeMaker platform_constants section:
+MM_Unix_VERSION = 1.42
+PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc
+
+
+# --- MakeMaker tool_autosplit section:
+# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
+AUTOSPLITFILE = $(PERLRUN)  -e 'use AutoSplit;  autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)'
+
+
+
+# --- MakeMaker tool_xsubpp section:
+
+
+# --- MakeMaker tools_other section:
+SHELL = /bin/sh
+CHMOD = chmod
+CP = cp
+MV = mv
+NOOP = $(SHELL) -c true
+NOECHO = @
+RM_F = rm -f
+RM_RF = rm -rf
+TEST_F = test -f
+TOUCH = touch
+UMASK_NULL = umask 0
+DEV_NULL = > /dev/null 2>&1
+MKPATH = $(PERLRUN) "-MExtUtils::Command" -e mkpath
+EQUALIZE_TIMESTAMP = $(PERLRUN) "-MExtUtils::Command" -e eqtime
+ECHO = echo
+ECHO_N = echo -n
+UNINST = 0
+VERBINST = 0
+MOD_INSTALL = $(PERLRUN) -MExtUtils::Install -e 'install({@ARGV}, '\''$(VERBINST)'\'', 0, '\''$(UNINST)'\'');'
+DOC_INSTALL = $(PERLRUN) "-MExtUtils::Command::MM" -e perllocal_install
+UNINSTALL = $(PERLRUN) "-MExtUtils::Command::MM" -e uninstall
+WARN_IF_OLD_PACKLIST = $(PERLRUN) "-MExtUtils::Command::MM" -e warn_if_old_packlist
+
+
+# --- MakeMaker makemakerdflt section:
+makemakerdflt: all
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dist section:
+TAR = tar
+TARFLAGS = cvf
+ZIP = zip
+ZIPFLAGS = -r
+COMPRESS = gzip --best
+SUFFIX = .gz
+SHAR = shar
+PREOP = $(NOECHO) $(NOOP)
+POSTOP = $(NOECHO) $(NOOP)
+TO_UNIX = $(NOECHO) $(NOOP)
+CI = ci -u
+RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
+DIST_CP = best
+DIST_DEFAULT = tardist
+DISTNAME = Business-OnlinePayment-OpenECHO
+DISTVNAME = Business-OnlinePayment-OpenECHO-0.01
+
+
+# --- MakeMaker macro section:
+
+
+# --- MakeMaker depend section:
+
+
+# --- MakeMaker cflags section:
+
+
+# --- MakeMaker const_loadlibs section:
+
+
+# --- MakeMaker const_cccmd section:
+
+
+# --- MakeMaker post_constants section:
+
+
+# --- MakeMaker pasthru section:
+
+PASTHRU = LIB="$(LIB)"\
+       LIBPERL_A="$(LIBPERL_A)"\
+       LINKTYPE="$(LINKTYPE)"\
+       PREFIX="$(PREFIX)"\
+       OPTIMIZE="$(OPTIMIZE)"\
+       PASTHRU_DEFINE="$(PASTHRU_DEFINE)"\
+       PASTHRU_INC="$(PASTHRU_INC)"
+
+
+# --- MakeMaker special_targets section:
+.SUFFIXES: .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT)
+
+.PHONY: all config static dynamic test linkext manifest
+
+
+
+# --- MakeMaker c_o section:
+
+
+# --- MakeMaker xs_c section:
+
+
+# --- MakeMaker xs_o section:
+
+
+# --- MakeMaker top_targets section:
+all :: pure_all manifypods
+       $(NOECHO) $(NOOP)
+
+
+pure_all :: config pm_to_blib subdirs linkext
+       $(NOECHO) $(NOOP)
+
+subdirs :: $(MYEXTLIB)
+       $(NOECHO) $(NOOP)
+
+config :: $(FIRST_MAKEFILE) $(INST_LIBDIR)$(DIRFILESEP).exists
+       $(NOECHO) $(NOOP)
+
+config :: $(INST_ARCHAUTODIR)$(DIRFILESEP).exists
+       $(NOECHO) $(NOOP)
+
+config :: $(INST_AUTODIR)$(DIRFILESEP).exists
+       $(NOECHO) $(NOOP)
+
+$(INST_AUTODIR)/.exists :: /usr/lib/perl/5.8/CORE/perl.h
+       $(NOECHO) $(MKPATH) $(INST_AUTODIR)
+       $(NOECHO) $(EQUALIZE_TIMESTAMP) /usr/lib/perl/5.8/CORE/perl.h $(INST_AUTODIR)/.exists
+
+       -$(NOECHO) $(CHMOD) $(PERM_RWX) $(INST_AUTODIR)
+
+$(INST_LIBDIR)/.exists :: /usr/lib/perl/5.8/CORE/perl.h
+       $(NOECHO) $(MKPATH) $(INST_LIBDIR)
+       $(NOECHO) $(EQUALIZE_TIMESTAMP) /usr/lib/perl/5.8/CORE/perl.h $(INST_LIBDIR)/.exists
+
+       -$(NOECHO) $(CHMOD) $(PERM_RWX) $(INST_LIBDIR)
+
+$(INST_ARCHAUTODIR)/.exists :: /usr/lib/perl/5.8/CORE/perl.h
+       $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR)
+       $(NOECHO) $(EQUALIZE_TIMESTAMP) /usr/lib/perl/5.8/CORE/perl.h $(INST_ARCHAUTODIR)/.exists
+
+       -$(NOECHO) $(CHMOD) $(PERM_RWX) $(INST_ARCHAUTODIR)
+
+config :: $(INST_MAN3DIR)$(DIRFILESEP).exists
+       $(NOECHO) $(NOOP)
+
+
+$(INST_MAN3DIR)/.exists :: /usr/lib/perl/5.8/CORE/perl.h
+       $(NOECHO) $(MKPATH) $(INST_MAN3DIR)
+       $(NOECHO) $(EQUALIZE_TIMESTAMP) /usr/lib/perl/5.8/CORE/perl.h $(INST_MAN3DIR)/.exists
+
+       -$(NOECHO) $(CHMOD) $(PERM_RWX) $(INST_MAN3DIR)
+
+help:
+       perldoc ExtUtils::MakeMaker
+
+
+# --- MakeMaker linkext section:
+
+linkext :: $(LINKTYPE)
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dlsyms section:
+
+
+# --- MakeMaker dynamic section:
+
+dynamic :: $(FIRST_MAKEFILE) $(INST_DYNAMIC) $(INST_BOOT)
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker dynamic_bs section:
+
+BOOTSTRAP =
+
+
+# --- MakeMaker dynamic_lib section:
+
+
+# --- MakeMaker static section:
+
+## $(INST_PM) has been moved to the all: target.
+## It remains here for awhile to allow for old usage: "make static"
+static :: $(FIRST_MAKEFILE) $(INST_STATIC)
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker static_lib section:
+
+
+# --- MakeMaker manifypods section:
+
+POD2MAN_EXE = $(PERLRUN) "-MExtUtils::Command::MM" -e pod2man "--"
+POD2MAN = $(POD2MAN_EXE)
+
+
+manifypods : pure_all  \
+       OpenECHO.pm \
+       OpenECHO.pm
+       $(NOECHO) $(POD2MAN) --section=3pm --perm_rw=$(PERM_RW)\
+         OpenECHO.pm $(INST_MAN3DIR)/Business::OnlinePayment::OpenECHO.$(MAN3EXT) 
+
+
+
+
+# --- MakeMaker processPL section:
+
+
+# --- MakeMaker installbin section:
+
+
+# --- MakeMaker subdirs section:
+
+# none
+
+# --- MakeMaker clean_subdirs section:
+clean_subdirs :
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker clean section:
+
+# Delete temporary files but do not touch installed files. We don't delete
+# the Makefile here so a later make realclean still has a makefile to use.
+
+clean :: clean_subdirs
+       -$(RM_RF) ./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all $(INST_ARCHAUTODIR)/extralibs.ld perlmain.c tmon.out mon.out so_locations pm_to_blib *$(OBJ_EXT) *$(LIB_EXT) perl.exe perl perl$(EXE_EXT) $(BOOTSTRAP) $(BASEEXT).bso $(BASEEXT).def lib$(BASEEXT).def $(BASEEXT).exp $(BASEEXT).x core core.*perl.*.? *perl.core core.[0-9] core.[0-9][0-9] core.[0-9][0-9][0-9] core.[0-9][0-9][0-9][0-9] core.[0-9][0-9][0-9][0-9][0-9]
+       -$(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) $(DEV_NULL)
+
+
+# --- MakeMaker realclean_subdirs section:
+realclean_subdirs :
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker realclean section:
+
+# Delete temporary files (via clean) and also delete installed files
+realclean purge ::  clean realclean_subdirs
+       $(RM_RF) $(INST_AUTODIR) $(INST_ARCHAUTODIR)
+       $(RM_RF) $(DISTVNAME)
+       $(RM_F)  $(INST_LIB)/Business/OnlinePayment/OpenECHO.pm $(MAKEFILE_OLD) $(FIRST_MAKEFILE)
+
+
+# --- MakeMaker metafile section:
+metafile :
+       $(NOECHO) $(ECHO) '# http://module-build.sourceforge.net/META-spec.html' > META.yml
+       $(NOECHO) $(ECHO) '#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#' >> META.yml
+       $(NOECHO) $(ECHO) 'name:         Business-OnlinePayment-OpenECHO' >> META.yml
+       $(NOECHO) $(ECHO) 'version:      0.01' >> META.yml
+       $(NOECHO) $(ECHO) 'version_from: OpenECHO.pm' >> META.yml
+       $(NOECHO) $(ECHO) 'installdirs:  site' >> META.yml
+       $(NOECHO) $(ECHO) 'requires:' >> META.yml
+       $(NOECHO) $(ECHO) '    Business::OnlinePayment:       0' >> META.yml
+       $(NOECHO) $(ECHO) '    Tie::IxHash:                   0' >> META.yml
+       $(NOECHO) $(ECHO) '    URI::Escape:                   0' >> META.yml
+       $(NOECHO) $(ECHO) '' >> META.yml
+       $(NOECHO) $(ECHO) 'distribution_type: module' >> META.yml
+       $(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.17' >> META.yml
+
+
+# --- MakeMaker metafile_addtomanifest section:
+metafile_addtomanifest:
+       $(NOECHO) $(PERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \
+       -e '    or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"'
+
+
+# --- MakeMaker dist_basics section:
+distclean :: realclean distcheck
+       $(NOECHO) $(NOOP)
+
+distcheck :
+       $(PERLRUN) "-MExtUtils::Manifest=fullcheck" -e fullcheck
+
+skipcheck :
+       $(PERLRUN) "-MExtUtils::Manifest=skipcheck" -e skipcheck
+
+manifest :
+       $(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest
+
+veryclean : realclean
+       $(RM_F) *~ *.orig */*~ */*.orig
+
+
+
+# --- MakeMaker dist_core section:
+
+dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE)
+       $(NOECHO) $(PERLRUN) -l -e 'print '\''Warning: Makefile possibly out of date with $(VERSION_FROM)'\''' \
+       -e '    if -e '\''$(VERSION_FROM)'\'' and -M '\''$(VERSION_FROM)'\'' < -M '\''$(FIRST_MAKEFILE)'\'';'
+
+tardist : $(DISTVNAME).tar$(SUFFIX)
+       $(NOECHO) $(NOOP)
+
+uutardist : $(DISTVNAME).tar$(SUFFIX)
+       uuencode $(DISTVNAME).tar$(SUFFIX) $(DISTVNAME).tar$(SUFFIX) > $(DISTVNAME).tar$(SUFFIX)_uu
+
+$(DISTVNAME).tar$(SUFFIX) : distdir
+       $(PREOP)
+       $(TO_UNIX)
+       $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
+       $(RM_RF) $(DISTVNAME)
+       $(COMPRESS) $(DISTVNAME).tar
+       $(POSTOP)
+
+zipdist : $(DISTVNAME).zip
+       $(NOECHO) $(NOOP)
+
+$(DISTVNAME).zip : distdir
+       $(PREOP)
+       $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
+       $(RM_RF) $(DISTVNAME)
+       $(POSTOP)
+
+shdist : distdir
+       $(PREOP)
+       $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
+       $(RM_RF) $(DISTVNAME)
+       $(POSTOP)
+
+
+# --- MakeMaker distdir section:
+distdir : metafile metafile_addtomanifest
+       $(RM_RF) $(DISTVNAME)
+       $(PERLRUN) "-MExtUtils::Manifest=manicopy,maniread" \
+               -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
+
+
+
+# --- MakeMaker dist_test section:
+
+disttest : distdir
+       cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL
+       cd $(DISTVNAME) && $(MAKE) $(PASTHRU)
+       cd $(DISTVNAME) && $(MAKE) test $(PASTHRU)
+
+
+# --- MakeMaker dist_ci section:
+
+ci :
+       $(PERLRUN) "-MExtUtils::Manifest=maniread" \
+         -e "@all = keys %{ maniread() };" \
+         -e "print(qq{Executing $(CI) @all\n}); system(qq{$(CI) @all});" \
+         -e "print(qq{Executing $(RCS_LABEL) ...\n}); system(qq{$(RCS_LABEL) @all});"
+
+
+# --- MakeMaker install section:
+
+install :: all pure_install doc_install
+
+install_perl :: all pure_perl_install doc_perl_install
+
+install_site :: all pure_site_install doc_site_install
+
+install_vendor :: all pure_vendor_install doc_vendor_install
+
+pure_install :: pure_$(INSTALLDIRS)_install
+
+doc_install :: doc_$(INSTALLDIRS)_install
+
+pure__install : pure_site_install
+       $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+doc__install : doc_site_install
+       $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
+
+pure_perl_install ::
+       $(NOECHO) umask 022; $(MOD_INSTALL) \
+               $(INST_LIB) $(DESTINSTALLPRIVLIB) \
+               $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \
+               $(INST_BIN) $(DESTINSTALLBIN) \
+               $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+               $(INST_MAN1DIR) $(DESTINSTALLMAN1DIR) \
+               $(INST_MAN3DIR) $(DESTINSTALLMAN3DIR)
+       $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+               $(SITEARCHEXP)/auto/$(FULLEXT)
+
+
+pure_site_install ::
+       $(NOECHO) umask 02; $(MOD_INSTALL) \
+               read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
+               write $(DESTINSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
+               $(INST_LIB) $(DESTINSTALLSITELIB) \
+               $(INST_ARCHLIB) $(DESTINSTALLSITEARCH) \
+               $(INST_BIN) $(DESTINSTALLSITEBIN) \
+               $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+               $(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) \
+               $(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR)
+       $(NOECHO) $(WARN_IF_OLD_PACKLIST) \
+               $(PERL_ARCHLIB)/auto/$(FULLEXT)
+
+pure_vendor_install ::
+       $(NOECHO) umask 022; $(MOD_INSTALL) \
+               $(INST_LIB) $(DESTINSTALLVENDORLIB) \
+               $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \
+               $(INST_BIN) $(DESTINSTALLVENDORBIN) \
+               $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \
+               $(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \
+               $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR)
+
+doc_perl_install ::
+
+doc_site_install ::
+       $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLSITEARCH)/perllocal.pod
+       -$(NOECHO) umask 02; $(MKPATH) $(DESTINSTALLSITEARCH)
+       -$(NOECHO) umask 02; $(DOC_INSTALL) \
+               "Module" "$(NAME)" \
+               "installed into" "$(INSTALLSITELIB)" \
+               LINKTYPE "$(LINKTYPE)" \
+               VERSION "$(VERSION)" \
+               EXE_FILES "$(EXE_FILES)" \
+               >> $(DESTINSTALLSITEARCH)/perllocal.pod
+
+doc_vendor_install ::
+
+
+uninstall :: uninstall_from_$(INSTALLDIRS)dirs
+
+uninstall_from_perldirs ::
+       $(NOECHO) $(UNINSTALL) $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist
+
+uninstall_from_sitedirs ::
+       $(NOECHO) $(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist
+
+uninstall_from_vendordirs ::
+       $(NOECHO) $(UNINSTALL) $(VENDORARCHEXP)/auto/$(FULLEXT)/.packlist
+
+
+# --- MakeMaker force section:
+# Phony target to force checking subdirectories.
+FORCE:
+       $(NOECHO) $(NOOP)
+
+
+# --- MakeMaker perldepend section:
+
+
+# --- MakeMaker makefile section:
+
+# We take a very conservative approach here, but it's worth it.
+# We move Makefile to Makefile.old here to avoid gnu make looping.
+$(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP)
+       $(NOECHO) $(ECHO) "Makefile out-of-date with respect to $?"
+       $(NOECHO) $(ECHO) "Cleaning current config before rebuilding Makefile..."
+       $(NOECHO) $(RM_F) $(MAKEFILE_OLD)
+       $(NOECHO) $(MV)   $(FIRST_MAKEFILE) $(MAKEFILE_OLD)
+       -$(MAKE) -f $(MAKEFILE_OLD) clean $(DEV_NULL) || $(NOOP)
+       $(PERLRUN) Makefile.PL 
+       $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <=="
+       $(NOECHO) $(ECHO) "==> Please rerun the make command.  <=="
+       false
+
+
+
+# --- MakeMaker staticmake section:
+
+# --- MakeMaker makeaperl section ---
+MAP_TARGET    = perl
+FULLPERL      = /usr/bin/perl
+
+$(MAP_TARGET) :: static $(MAKE_APERL_FILE)
+       $(MAKE) -f $(MAKE_APERL_FILE) $@
+
+$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
+       $(NOECHO) $(ECHO) Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
+       $(NOECHO) $(PERLRUNINST) \
+               Makefile.PL DIR= \
+               MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
+               MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=
+
+
+# --- MakeMaker test section:
+
+TEST_VERBOSE=0
+TEST_TYPE=test_$(LINKTYPE)
+TEST_FILE = test.pl
+TEST_FILES = t/*.t
+TESTDB_SW = -d
+
+testdb :: testdb_$(LINKTYPE)
+
+test :: $(TEST_TYPE)
+
+test_dynamic :: pure_all
+       PERL_DL_NONLAZY=1 $(FULLPERLRUN) "-MExtUtils::Command::MM" "-e" "test_harness($(TEST_VERBOSE), '$(INST_LIB)', '$(INST_ARCHLIB)')" $(TEST_FILES)
+
+testdb_dynamic :: pure_all
+       PERL_DL_NONLAZY=1 $(FULLPERLRUN) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE)
+
+test_ : test_dynamic
+
+test_static :: test_dynamic
+testdb_static :: testdb_dynamic
+
+
+# --- MakeMaker ppd section:
+# Creates a PPD (Perl Package Description) for a binary distribution.
+ppd:
+       $(NOECHO) $(ECHO) '<SOFTPKG NAME="$(DISTNAME)" VERSION="0,01,0,0">' > $(DISTNAME).ppd
+       $(NOECHO) $(ECHO) '    <TITLE>$(DISTNAME)</TITLE>' >> $(DISTNAME).ppd
+       $(NOECHO) $(ECHO) '    <ABSTRACT></ABSTRACT>' >> $(DISTNAME).ppd
+       $(NOECHO) $(ECHO) '    <AUTHOR>Ivan Kohler &lt;ivan-openecho@420.am&gt;</AUTHOR>' >> $(DISTNAME).ppd
+       $(NOECHO) $(ECHO) '    <IMPLEMENTATION>' >> $(DISTNAME).ppd
+       $(NOECHO) $(ECHO) '        <DEPENDENCY NAME="Business-OnlinePayment" VERSION="0,0,0,0" />' >> $(DISTNAME).ppd
+       $(NOECHO) $(ECHO) '        <DEPENDENCY NAME="Tie-IxHash" VERSION="0,0,0,0" />' >> $(DISTNAME).ppd
+       $(NOECHO) $(ECHO) '        <DEPENDENCY NAME="URI-Escape" VERSION="0,0,0,0" />' >> $(DISTNAME).ppd
+       $(NOECHO) $(ECHO) '        <OS NAME="$(OSNAME)" />' >> $(DISTNAME).ppd
+       $(NOECHO) $(ECHO) '        <ARCHITECTURE NAME="i386-linux-thread-multi" />' >> $(DISTNAME).ppd
+       $(NOECHO) $(ECHO) '        <CODEBASE HREF="" />' >> $(DISTNAME).ppd
+       $(NOECHO) $(ECHO) '    </IMPLEMENTATION>' >> $(DISTNAME).ppd
+       $(NOECHO) $(ECHO) '</SOFTPKG>' >> $(DISTNAME).ppd
+
+
+# --- MakeMaker pm_to_blib section:
+
+pm_to_blib: $(TO_INST_PM)
+       $(NOECHO) $(PERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', '\''$(PM_FILTER)'\'')'\
+         OpenECHO.pm $(INST_LIB)/Business/OnlinePayment/OpenECHO.pm 
+       $(NOECHO) $(TOUCH) $@
+
+# --- MakeMaker selfdocument section:
+
+
+# --- MakeMaker postamble section:
+
+
+# End.
diff --git a/Makefile.PL b/Makefile.PL
new file mode 100644 (file)
index 0000000..a9667c6
--- /dev/null
@@ -0,0 +1,24 @@
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+    'NAME'         => 'Business::OnlinePayment::OpenECHO',
+    'VERSION_FROM' => 'OpenECHO.pm', # finds $VERSION
+    'AUTHOR'       => 'Ivan Kohler <ivan-openecho@420.am>', #really just
+                                                            #the maintainer
+    #'NORECURS'     => 1, # dont descend into subdirectories
+    'PREREQ_PM'    => {
+                        'Business::OnlinePayment' => 0,
+
+                        # for HTTPS (maybe it should be a separate dist?)
+                        'URI::Escape' => 0,
+                        'Tie::IxHash' => 0,
+                       
+                        # 'Net::SSLeay' => 0,
+                        # or 'Crypt::SSLeay' => 0,
+                        #    'URI
+
+                      },
+    #'dist'         => {CI => 'ci -l'},
+);
+
diff --git a/OpenECHO.pm b/OpenECHO.pm
new file mode 100644 (file)
index 0000000..595c38d
--- /dev/null
@@ -0,0 +1,673 @@
+##############################################################################\r
+# Business::OnlinePayment::OpenECHO\r
+#\r
+# Credit card transactions via SSL to\r
+# Electronic Clearing House (ECHO) Systems\r
+#\r
+# Refer to ECHO's documentation for more info\r
+# http://www.openecho.com/echo_gateway_guide.html\r
+#\r
+# AUTHOR\r
+# Michael Lehmkuhl <michael@electricpulp.com>\r
+#\r
+# SPECIAL THANKS\r
+# Jim Darden <jdarden@echo-inc.com>\r
+# Dan Browning <db@kavod.com>\r
+#\r
+# BUSINESS::ONLINEPAYMENT IMPLEMENTATION\r
+# Ivan Kohler <ivan-openecho@420.am>\r
+#\r
+# VERSION HISTORY\r
+# + v1.2       08/17/2002 Corrected problem with certain string comparisons.\r
+# + v1.3       08/23/2002 Converted Interchange GlobalSub to Vend::Payment module.\r
+# + v1.3.1     11/12/2002 Updated the OpenECHO_example.perl test script.\r
+# + v1.4       11/18/2002 Corrected a problem with Submit method when using LWP.\r
+# + v1.5        03/29/2003 Updated for additional status and avs_result codes.\r
+# + v1.6        08/26/2003 Cleaned up code (salim qadeer sqadeer@echo-inc.com)\r
+# + v1.6.2      09/23/2003 Added DH transaction type (salim qadeer sqadeer@echo-inc.com)\r
+# --------\r
+# + v0.1        08/26/2004 Business::OnlinePayment implementation\r
+#\r
+# Copyright (C) 2002 Electric Pulp. <info@electricpulp.com>\r
+# Copyright (C) 2004 Ivan Kohler\r
+#\r
+# This program is free software; you can redistribute it and/or modify\r
+# it under the terms of the GNU General Public License as published by\r
+# the Free Software Foundation; either version 2 of the License, or\r
+# (at your option) any later version.\r
+#\r
+# This program is distributed in the hope that it will be useful,\r
+# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+# GNU General Public License for more details.\r
+#\r
+# You should have received a copy of the GNU General Public\r
+# License along with this program; if not, write to the Free\r
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,\r
+# MA  02111-1307  USA.\r
+#\r
+################################################################################\r
+\r
+package Business::OnlinePayment::OpenECHO;\r
+\r
+use strict;\r
+use Carp;\r
+use Business::OnlinePayment 3;\r
+use Business::OnlinePayment::HTTPS;\r
+use vars qw($VERSION @ISA);\r
+\r
+@ISA = qw(Business::OnlinePayment::HTTPS);\r
+$VERSION = '0.01';\r
+\r
+sub set_defaults {\r
+       my $self = shift;\r
+\r
+       $self->server('wwws.echo-inc.com');\r
+       $self->port('443');\r
+       $self->path('/scripts/INR200.EXE');\r
+\r
+       $self->build_subs(qw(\r
+         order_number avs_code\r
+                        ));\r
+        # order_type\r
+       # md5 cvv2_response cavv_response\r
+\r
+}\r
+\r
+#map_fileds originally from AuthorizeNet.pm\r
+\r
+sub map_fields {\r
+    my($self) = @_;\r
+\r
+    ##AD (Address Verification)  - 0.18 cents\r
+    #AS (Authorization) - 0.18 cents\r
+    #AV (Authorization with Address Verification) - 0.18 cents\r
+    #CR (Credit) - 0.18 cents + 0.12 cents (discount fee returned to merchant)\r
+    #DS (Deposit) - 0.18 cents + 0.12 cents\r
+    #ES (Authorization and Deposit) - 0.18 cents + 0.12 cents + an extra 0.17%\r
+    #EV (Authorization and Deposit with Address Verification) - 0.18 cents + 0.12 cents\r
+    ##CK (System check) - 0.18 cents\r
+    #DV (Electronic Check Verification) - check your contract\r
+    #DD (Electronic Check Debit with Verification) - check your contract\r
+    #DH (Electronic Check Debit ACH Only) - check your contract\r
+    #DC (Electronic Check Credit) - check your contract\r
+\r
+    my %content = $self->content();\r
+\r
+    my $avs = $self->require_avs;\r
+    $avs = 1 unless defined($avs) && length($avs); #default AVS on unless explicitly turned off\r
+\r
+    my %map;\r
+    if (\r
+      $content{'type'} =~ /^(cc|visa|mastercard|american express|discover)$/i\r
+    ) {\r
+      if ( $avs ) {\r
+        %map = ( 'normal authorization' => 'EV',\r
+                 'authorization only'   => 'AV',\r
+                 'credit'               => 'CR',\r
+                 'post authorization'   => 'DS',\r
+                 #'void'                 => 'VOID',\r
+               );\r
+      } else {\r
+        %map = ( 'normal authorization' => 'ES',\r
+                 'authorization only'   => 'AS',\r
+                 'credit'               => 'CR',\r
+                 'post authorization'   => 'DS',\r
+                 #'void'                 => 'VOID',\r
+               );\r
+      }\r
+    } elsif ( $content{'type'} =~ /^check$/i ) {\r
+      %map = ( 'normal authorization' => 'DD',\r
+               'authorization only'   => 'DV',\r
+               'credit'               => 'DC',\r
+               'post authorization'   => 'DH',\r
+               #'void'                 => 'VOID',\r
+             );\r
+    } else {\r
+      croak 'Unknown type: '. $content{'type'};\r
+    }\r
+\r
+    $content{'type'} = $map{lc($content{'action'})}\r
+      or croak 'Unknown action: '. $content{'action'};\r
+\r
+    $self->transaction_type($content{'type'});\r
+\r
+    # stuff it back into %content\r
+    $self->content(%content);\r
+\r
+}\r
+\r
+sub submit {\r
+    my($self) = @_;\r
+\r
+    $self->map_fields();\r
+    $self->remap_fields(\r
+        #                => 'order_type',\r
+        type             => 'transaction_type',\r
+        #action          =>\r
+        login            => 'merchant_echo_id',\r
+        password         => 'merchant_pin',\r
+        #                => 'isp_echo_id',\r
+        #                => 'isp_pin',\r
+        #transaction_key =>\r
+        authorization    => 'authorization', # auth_code => 'authorization',\r
+        customer_ip      => 'billing_ip_address',\r
+        #                   'billing_prefix',\r
+        name             => 'billing_name',\r
+        first_name       => 'billing_first_name',\r
+        last_name        => 'billing_last_name',\r
+        company          => 'billing_company_name',\r
+        address          => 'billing_address_1',\r
+        #                => 'billing_address_2',\r
+        city             => 'billing_city',\r
+        state            => 'billing_state',\r
+        zip              => 'billing_zip',\r
+        country          => 'billing_country',\r
+        phone            => 'billing_phone',\r
+        fax              => 'billing_fax',\r
+        email            => 'billing_email',\r
+        card_number      => 'cc_number',\r
+        #                => 'ccexp_month',\r
+        #                => 'ccexp_year',\r
+        #                => 'counter',\r
+        #                => 'debug',\r
+\r
+        #XXX#            => 'ec_*',\r
+\r
+        'amount'         => 'grand_total',\r
+        #                => 'merchant_email',\r
+        #invoice_number  =>\r
+        #customer_id     =>\r
+        #                => 'merchant_trace_nbr',\r
+        #                => 'original_amount',\r
+        #                => 'original_trandate_mm',\r
+        #                => 'original_trandate_dd',\r
+        #                => 'original_trandate_yyyy',\r
+        #                => 'original_reference',\r
+        order_number     => 'order_number',\r
+        #                => 'shipping_flag',\r
+\r
+        #description       =>\r
+        #currency          =>\r
+\r
+        #ship_last_name    =>\r
+        #ship_first_name   =>\r
+        #ship_company      =>\r
+        #ship_address      =>\r
+        #ship_city         =>\r
+        #ship_state        =>\r
+        #ship_zip          =>\r
+        #ship_country      =>\r
+\r
+        #expiration        =>\r
+        cvv2              => 'cnp_security',\r
+\r
+        #check_type        =>\r
+        #account_name      => 'ec_last_name' & 'ec_first_name',\r
+        account_number    => 'ec_account',\r
+        #account_type      =>\r
+        bank_name         => 'ec_bank_name',\r
+        routing_code      => 'ec_rt',\r
+        #customer_org      =>\r
+        #customer_ssn      =>\r
+        license_num       => 'ec_id_number',\r
+        license_state     => 'ec_id_state',\r
+        #license_dob       =>\r
+\r
+        #recurring_billing => 'cnp_recurring',\r
+    );\r
+\r
+    #XXX hosted order_type?\r
+    $self->{_content}{order_type} = 'S';\r
+\r
+    #XXX counter field shouldn't be just a random integer (but it does need a\r
+    #default this way i guess...\r
+    $self->{_content}{counter} = int(rand(2**31));\r
+\r
+    #ccexp_month & ccexp_year\r
+    $self->{_content}{'expiration'} =~ /^(\d+)\D+\d*(\d{2})$/\r
+      or croak "unparsable expiration ". $self->{_content}{expiration};\r
+    my( $month, $year ) = ( $1, $2 );\r
+    $month = '0'. $month if $month =~ /^\d$/;\r
+    $self->{_content}{ccexp_month} = $month;\r
+    $self->{_content}{ccexp_year} = $year;\r
+\r
+    $self->{_content}{cnp_recurring} = 'Y'\r
+      if exists($self->{_content}{recurring_billing})\r
+      && $self->{_content}{recurring_billing} =~ /^y/i;\r
+\r
+    #XXX echeck use customer_org and account_type to generate ec_account_type\r
+\r
+    #XXX set required fields\r
+    # https://wwws.echo-inc.com/ISPGuide-Fields2.asp\r
+    $self->required_fields();\r
+\r
+    my( $page, $response, %reply_headers) =\r
+      $self->https_get( $self->get_fields( $self->fields ) );\r
+\r
+    #XXX check $response and die if not 200?\r
+\r
+    my $echotype1 = $self->GetEchoReturn($page, 1);\r
+    my $echotype2 = $self->GetEchoReturn($page, 2);\r
+    my $echotype3 = $self->GetEchoReturn($page, 3);\r
+    my $openecho  = $self->GetEchoReturn($page, 'OPEN');\r
+\r
+    #  server_response\r
+    #  avs_code\r
+    #  order_number\r
+    #  is_success\r
+    #  result_code\r
+    #  authorization\r
+    #md5 cvv2_response cavv_response ...?\r
+\r
+    # Get all the metadata.\r
+    $self->server_response($page);\r
+    $self->authorization( $self->GetEchoProp($echotype3, 'auth_code') );\r
+    $self->order_number(  $self->GetEchoProp($echotype3, 'order_number') );\r
+\r
+    #XXX ???\r
+    #$self->reference(     $this->GetEchoProp($echotype3, "echo_reference");\r
+\r
+    $self->result_code(   $self->GetEchoProp($echotype3, 'status') );\r
+    $self->avs_code(      $self->GetEchoProp($echotype3, 'avs_result') );\r
+\r
+    #XXX ???\r
+    #$self->security_result( $self->GetEchoProp($echotype3, 'security_result');\r
+    #$self->mac( $self->GetEchoProp($echotype3, 'mac') );\r
+    #$self->decline_code( $self->GetEchoProp($echotype3, 'decline_code') );\r
+\r
+    if ($self->result_code =~ /^[GR]$/ ) { #success\r
+\r
+      #XXX special case for AVS-only transactions we don't handle yet\r
+      #if ($self->transaction_type eq "AD") {\r
+      #  if ($self->avs_code =~ /^[XYDM]$/ ) {\r
+      #    $self->is_success(1);\r
+      #  } else {\r
+      #    $self->is_success(0);\r
+      #  }\r
+      #} else {        \r
+        $self->is_success(1);\r
+      #}\r
+\r
+    } else {\r
+      $self->is_success(0);\r
+\r
+      my $decline_code = $self->GetEchoProp($echotype3, 'decline_code');\r
+      my $error_message = $self->error($decline_code);\r
+      if ( $decline_code =~ /^(00)?30$/ ) {\r
+        $echotype2 =~ s/<br>/\n/ig;\r
+        $echotype2 =~ s'</?(b|pre)>''ig;\r
+        $error_message .= ": $echotype2";\r
+      }\r
+      $self->error_message( $error_message );\r
+\r
+    }\r
+\r
+    $self->is_success(0) if $page eq '';\r
+\r
+}\r
+\r
+\r
+sub fields {\r
+       my $self = shift;\r
+\r
+       my @fields = qw(\r
+         order_type\r
+         transaction_type\r
+         merchant_echo_id\r
+         merchant_pin\r
+         isp_echo_id\r
+         isp_pin\r
+         authorization\r
+         billing_ip_address\r
+         billing_prefix\r
+         billing_name\r
+         billing_first_name\r
+         billing_last_name\r
+         billing_company_name\r
+         billing_address1\r
+         billing_address2\r
+         billing_city\r
+         billing_state\r
+         billing_zip\r
+         billing_country\r
+         billing_phone\r
+         billing_fax\r
+         billing_email\r
+         cc_number\r
+         ccexp_month\r
+         ccexp_year\r
+         counter\r
+         debug\r
+       );\r
+\r
+       if ($self->transaction_type =~ /^D[DCVH]$/) {\r
+         push @fields, qw(\r
+           ec_account\r
+           ec_account_type\r
+           ec_payment_type\r
+           ec_address1\r
+           ec_address2\r
+           ec_bank_name\r
+           ec_business_acct\r
+           ec_city\r
+           ec_email\r
+           ec_first_name\r
+           ec_id_country\r
+           ec_id_exp_mm\r
+           ec_id_exp_dd\r
+           ec_id_exp_yy\r
+           ec_id_number\r
+           ec_id_state\r
+           ec_id_type\r
+           ec_last_name\r
+           ec_merchant_ref\r
+           ec_nbds_code\r
+           ec_other_name\r
+           ec_payee\r
+           ec_rt\r
+           ec_serial_number\r
+           ec_state\r
+           ec_transaction_dt\r
+           ec_zip\r
+         );\r
+       }\r
+\r
+       push @fields, qw(\r
+         grand_total\r
+         merchant_email\r
+         merchant_trace_nbr\r
+         original_amount\r
+         original_trandate_mm\r
+         original_trandate_dd\r
+         original_trandate_yyyy\r
+         original_reference\r
+         order_number\r
+         shipping_flag\r
+         shipping_prefix\r
+         shipping_name\r
+         shipping_address1\r
+         shipping_address2\r
+         shipping_city\r
+         shipping_state\r
+         shipping_zip\r
+         shipping_comments\r
+         shipping_country\r
+         shipping_phone\r
+         shipping_fax\r
+         shipper\r
+         shipper_tracking_nbr\r
+         track1\r
+         track2\r
+         cnp_security\r
+         cnp_recurring\r
+       );\r
+\r
+       return @fields;\r
+}\r
+\r
+sub GetEchoProp {\r
+       my( $self, $raw, $prop ) = @_;\r
+       local $^W=0;\r
+\r
+       my $data;\r
+       ($data) = $raw =~ m"<$prop>(.*?)</$prop>"gsi;\r
+       $data =~ s/<.*?>/ /gs;\r
+       chomp $data;\r
+       return $data;\r
+}\r
+\r
+# Get's a given Echo return type and strips all HTML style tags from it.\r
+# It also strips any new line characters from the returned string.\r
+#\r
+# This function based on Ben Reser's <breser@vecdev.com> Echo::Process\r
+# module.\r
+sub GetEchoReturn {\r
+       my( $self, $page, $type ) = @_;\r
+       local $^W=0;\r
+\r
+       my $data;\r
+       if ($type eq 'OPEN') {\r
+               ($data) = $page =~ m"<OPENECHO>(.*?)</OPENECHO>"gsi;\r
+       }\r
+       else {\r
+               ($data) = $page =~ m"<ECHOTYPE$type>(.*?)</ECHOTYPE$type>"gsi;\r
+       }\r
+#      $data =~ s"<.*?>" "g;\r
+\r
+        #unless (length($data)) {\r
+        #  warn "$self $page $type";\r
+        #}\r
+\r
+       chomp $data;\r
+       return $data;\r
+}\r
+\r
+use vars qw(%error);\r
+%error = (\r
+  "01" => [ "Refer to card issuer", "The merchant must call the issuer before the transaction can be approved." ],\r
+  "02" => [ "Refer to card issuer, special condition", "The merchant must call the issuer before the transaction can be approved." ],\r
+  "03" => [ "Invalid merchant number", "The merchant ID is not valid." ],\r
+  "04" => [ "Pick-up card. Capture for reward", "The card is listed on the Warning Bulletin.  Merchant may receive reward money by capturing the card." ],\r
+  "05" => [ "Do not honor. The transaction was declined by the issuer without definition or reason", "The transaction was declined without explanation by the card issuer." ],\r
+  "06" => [ "Error", "The card issuer returned an error without further explanation." ],\r
+  "07" => [ "Pick-up card, special condition", "The card is listed on the Warning Bulletin.  Merchant may receive reward money by capturing the card." ],\r
+  "08" => [ "Honor with identification", "Honor with identification." ],\r
+  "09" => [ "Request in progress", "Request in progress." ],\r
+  "10" => [ "Approved for partial amount", "Approved for partial amount." ],\r
+  "11" => [ "Approved, VIP", "Approved, VIP program." ],\r
+  "12" => [ "Invalid transaction", "The requested transaction is not supported or is not valid for the card number presented." ],\r
+  "13" => [ "Invalid amount", "The amount exceeds the limits established by the issuer for this type of transaction." ],\r
+  "14" => [ "Invalid card #", "The issuer indicates that this card is not valid." ],\r
+  "15" => [ "No such issuer", "The card issuer number is not valid." ],\r
+  "16" => [ "Approved, update track 3", "Approved, update track 3." ],\r
+  "17" => [ "Customer cancellation", "Customer cancellation." ],\r
+  "18" => [ "Customer dispute", "Customer dispute." ],\r
+  "19" => [ "Re enter transaction", "Customer should resubmit transaction." ],\r
+  "20" => [ "Invalid response", "Invalid response." ],\r
+  "21" => [ "No action taken", "No action taken. The issuer declined with no other explanation." ],\r
+  "22" => [ "Suspected malfunction", "Suspected malfunction." ],\r
+  "23" => [ "Unacceptable transaction fee", "Unacceptable transaction fee." ],\r
+  "24" => [ "File update not supported", "File update not supported." ],\r
+  "25" => [ "Unable to locate record", "Unable to locate record." ],\r
+  "26" => [ "Duplicate record", "Duplicate record." ],\r
+  "27" => [ "File update edit error", "File update edit error." ],\r
+  "28" => [ "File update file locked", "File update file locked." ],\r
+  "30" => [ "Format error, call ECHO", "The host reported that the transaction was not formatted properly." ],\r
+  "31" => [ "Bank not supported", "Bank not supported by switch." ],\r
+  "32" => [ "Completed partially", "Completed partially." ],\r
+  "33" => [ "Expired card, pick-up", "The card is expired.  Merchant may receive reward money by capturing the card." ],\r
+  "34" => [ "Issuer suspects fraud, pick-up card", "The card issuer suspects fraud.  Merchant may receive reward money by capturing the card." ],\r
+  "35" => [ "Contact acquirer, pick-up", "Contact card issuer.  Merchant may receive reward money by capturing the card." ],\r
+  "36" => [ "Restricted card, pick-up", "The card is restricted by the issuer.  Merchant may receive reward money by capturing the card." ],\r
+  "37" => [ "Call ECHO security, pick-up", "Contact ECHO security.  Merchant may receive reward money by capturing the card." ],\r
+  "38" => [ "PIN tries exceeded, pick-up", "PIN attempts exceed issuer limits.  Merchant may receive reward money by capturing the card." ],\r
+  "39" => [ "No credit account", "No credit account." ],\r
+  "40" => [ "Function not supported", "Requested function not supported." ],\r
+  "41" => [ "Lost Card, capture for reward", "The card has been reported lost." ],\r
+  "42" => [ "No universal account", "No universal account." ],\r
+  "43" => [ "Stolen Card, capture for reward", "The card has been reported stolen." ],\r
+  "44" => [ "No investment account", "No investment account." ],\r
+  "51" => [ "Not sufficient funds", "The credit limit for this account has been exceeded." ],\r
+  "54" => [ "Expired card", "The card is expired." ],\r
+  "55" => [ "Incorrect PIN", "The cardholder PIN is incorrect." ],\r
+  "56" => [ "No card record", "No card record." ],\r
+  "57" => [ "Transaction not permitted to cardholder", "The card is not allowed the type of transaction requested." ],\r
+  "58" => [ "Transaction not permitted on terminal", "The Merchant is not allowed this type of transaction." ],\r
+  "59" => [ "Suspected fraud", "Suspected fraud." ],\r
+  "60" => [ "Contact ECHO", "Contact ECHO." ],\r
+  "61" => [ "Exceeds withdrawal limit", "The amount exceeds the allowed daily maximum." ],\r
+  "62" => [ "Restricted card", "The card has been restricted." ],\r
+  "63" => [ "Security violation.", "The card has been restricted." ],\r
+  "64" => [ "Original amount incorrect", "Original amount incorrect." ],\r
+  "65" => [ "Exceeds withdrawal frequency", "The allowable number of daily transactions has been exceeded." ],\r
+  "66" => [ "Call acquirer security, call ECHO", "Call acquirer security, call ECHO." ],\r
+  "68" => [ "Response received too late", "Response received too late." ],\r
+  "75" => [ "PIN tries exceeded", "The allowed number of PIN retries has been exceeded." ],\r
+  "76" => [ "Invalid \"to\" account", "The debit account does not exist." ],\r
+  "77" => [ "Invalid \"from\" account", "The credit account does not exist." ],\r
+  "78" => [ "Invalid account specified (general)", "The associated card number account is invalid or does not exist." ],\r
+  "79" => [ "Already reversed", "Already reversed." ],\r
+  "84" => [ "Invalid authorization life cycle", "The authorization life cycle is invalid." ],\r
+  "86" => [ "Cannot verify PIN", "Cannot verify PIN." ],\r
+  "87" => [ "Network Unavailable", "Network Unavailable." ],\r
+  "89" => [ "Ineligible to receive financial position information", "Ineligible to receive financial position information." ],\r
+  "90" => [ "Cut-off in progress", "Cut-off in progress." ],\r
+  "91" => [ "Issuer or switch inoperative", "The bank is not available to authorize this transaction." ],\r
+  "92" => [ "Routing error", "The transaction cannot be routed to the authorizing agency." ],\r
+  "93" => [ "Violation of law", "Violation of law." ],\r
+  "94" => [ "Duplicate transaction", "Duplicate transaction." ],\r
+  "95" => [ "Reconcile error", "Reconcile error." ],\r
+  "96" => [ "System malfunction", "A system error has occurred." ],\r
+  "98" => [ "Exceeds cash limit", "Exceeds cash limit." ],\r
+  "1000" => [ "Unrecoverable error.", "An unrecoverable error has occurred in the ECHONLINE processing." ],\r
+  "1001" => [ "Account closed", "The merchant account has been closed." ],\r
+  "1002" => [ "System closed", "Services for this system are not available. (Not used by ECHONLINE)" ],\r
+  "1003" => [ "E-Mail Down", "The e-mail function is not available. (Not used by ECHONLINE)" ],\r
+  "1012" => [ "Invalid trans code", "The host computer received an invalid transaction code." ],\r
+  "1013" => [ "Invalid term id", "The ECHO-ID is invalid." ],\r
+  "1015" => [ "Invalid card number", "The credit card number that was sent to the host computer was invalid" ],\r
+  "1016" => [ "Invalid expiry date", "The card has expired or the expiration date was invalid." ],\r
+  "1017" => [ "Invalid amount", "The dollar amount was less than 1.00 or greater than the maximum allowed for this card." ],\r
+  "1019" => [ "Invalid state", "The state code was invalid. (Not used by ECHONLINE)" ],\r
+  "1021" => [ "Invalid service", "The merchant or card holder is not allowed to perform that kind of transaction" ],\r
+  "1024" => [ "Invalid auth code", "The authorization number presented with this transaction is incorrect. (deposit transactions only)" ],\r
+  "1025" => [ "Invalid reference number", "The reference number presented with this transaction is incorrect or is not numeric." ],\r
+  "1029" => [ "Invalid contract number", "The contract number presented with this transaction is incorrect or is not numeric. (Not used by ECHONLINE)" ],\r
+  "1030" => [ "Invalid inventory data", "The inventory data presented with this transaction is not ASCII \"printable\". (Not used by ECHONLINE)" ],\r
+  "1508" => [ " ", "Invalid or missing order_type." ],\r
+  "1509" => [ " ", "The merchant is not approved to submit this order_type." ],\r
+  "1510" => [ " ", "The merchant is not approved to submit this transaction_type." ],\r
+  #"1511" => [ " ", "Duplicate transaction attempt (see counterin Part I of this Specification</EM>)." ],\r
+  "1511" => [ " ", "Duplicate transaction attempt (set counter field?)." ],\r
+  "1599" => [ " ", "An system error occurred while validating the transaction input." ],\r
+  "1801" => [ "Return Code \"A\"", "Address matches; ZIP does not match." ],\r
+  "1802" => [ "Return Code \"W\"", "9-digit ZIP matches; Address does not match." ],\r
+  "1803" => [ "Return Code \"Z\"", "5-digit ZIP matches; Address does not match." ],\r
+  "1804" => [ "Return Codes \"U\"", "Issuer unavailable; cannot verify." ],\r
+  "1805" => [ "Return Code \"R\"", "Retry; system is currently unable to process." ],\r
+  "1806" => [ "Return Code \"S\" or \"G\"", "Issuer does not support AVS." ],\r
+  "1807" => [ "Return Code \"N\"", "Nothing matches." ],\r
+  "1808" => [ "Return Code \"E\"", "Invalid AVS only response." ],\r
+  "1809" => [ "Return Code \"B\"", "Street address match. Postal code not verified because of incompatible formats." ],\r
+  "1810" => [ "Return Code \"C\"", "Street address and Postal code not verified because of incompatible formats." ],\r
+  "1811" => [ "Return Code \"D\"", "Street address match and Postal code match." ],\r
+  "1812" => [ "Return Code \"I\"", "Address information not verified for international transaction." ],\r
+  "1813" => [ "Return Code \"M\"", "Street address match and Postal code match." ],\r
+  "1814" => [ "Return Code \"P\"", "Postal code match. Street address not verified because of incompatible formats." ],\r
+  "1897" => [ "invalid response", "The host returned an invalid response." ],\r
+  "1898" => [ "disconnect", "The host unexpectedly disconnected." ],\r
+  "1899" => [ "timeout", "Timeout waiting for host response." ],\r
+  "2071" => [ "Call VISA", "An authorization number from the VISA Voice Center is required to approve this transaction." ],\r
+  "2072" => [ "Call Master Card", "An authorization number from the Master Card Voice Center is required to approve this transaction." ],\r
+  "2073" => [ "Call Carte Blanche", "An authorization number from the Carte Blanche Voice Center is required to approve this transaction." ],\r
+  "2074" => [ "Call Diners Club", "An authorization number from the Diners' Club Voice Center is required to approve this transaction." ],\r
+  "2075" => [ "Call AMEX", "An authorization number from the American Express Voice Center is required to approve this transaction." ],\r
+  "2076" => [ "Call Discover", "An authorization number from the Discover Voice Center is required to approve this transaction." ],\r
+  "2078" => [ "Call ECHO", "The merchant must call ECHOCustomer Support for approval.or because there is a problem with the merchant's account." ],\r
+  "2079" => [ "Call XpresscheX", "The merchant must call ECHOCustomer Support for approval.or because there is a problem with the merchant's account." ],\r
+  "3001" => [ "No ACK on Resp", "The host did not receive an ACK from the terminal after sending the transaction response." ],\r
+  "3002" => [ "POS NAK'd 3 Times", "The host disconnected after the terminal replied 3 times to the host response with a NAK." ],\r
+  "3003" => [ "Drop on Wait", "The line dropped before the host could send a response to the terminal." ],\r
+  "3005" => [ "Drop on Resp", "The line dropped while the host was sending the response to the terminal." ],\r
+  "3007" => [ "Drop Before EOT", "The host received an ACK from the terminal but the line dropped before the host could send the EOT." ],\r
+  "3011" => [ "No Resp to ENQ", "The line was up and carrier detected, but the terminal did not respond to the ENQ." ],\r
+  "3012" => [ "Drop on Input", "The line disconnected while the host was receiving data from the terminal." ],\r
+  "3013" => [ "FEP NAK'd 3 Times", "The host disconnected after receiving 3 transmissions with incorrect LRC from the terminal." ],\r
+  "3014" => [ "No Resp to ENQ", "The line disconnected during input data wait in Multi-Trans Mode." ],\r
+  "3015" => [ "Drop on Input", "The host encountered a full queue and discarded the input data." ],\r
+);\r
+for ( 9000..9999 ) {\r
+  $error{$_} = [ "Host Error", "The host encountered an internal error and was not able to process the transaction." ]; \r
+}\r
+sub error {\r
+  my( $self, $num ) = @_;\r
+  $num =~ s/^00(\d\d)$/$1/;\r
+  return $num. ': '. $error{$num}[0]. ': '. $error{$num}[1];\r
+}\r
+\r
+1;\r
+\r
+__END__\r
+\r
+=head1 NAME\r
+\r
+Business::OnlinePayment::OpenECHO - ECHO backend module for Business::OnlinePayment\r
+\r
+=head1 SYNOPSIS\r
+\r
+  use Business::OnlinePayment;\r
+\r
+  ####\r
+  # One step transaction, the simple case.\r
+  ####\r
+\r
+  my $tx = new Business::OnlinePayment("OpenECHO");\r
+  $tx->content(\r
+      type           => 'VISA',\r
+      login          => '1234684752',\r
+      password       => '43400210',\r
+      action         => 'Normal Authorization',\r
+      description    => 'Business::OnlinePayment test',\r
+      amount         => '49.95',\r
+      invoice_number => '100100',\r
+      customer_id    => 'jsk',\r
+      first_name     => 'Tofu',\r
+      last_name      => 'Beast',\r
+      address        => '123 Anystreet',\r
+      city           => 'Anywhere',\r
+      state          => 'UT',\r
+      zip            => '84058',\r
+      card_number    => '4005550000000019',\r
+      expiration     => '08/06',\r
+      cvv2           => '1234', #optional\r
+      referer        => 'http://valid.referer.url/',\r
+  );\r
+  $tx->submit();\r
+\r
+  if($tx->is_success()) {\r
+      print "Card processed successfully: ".$tx->authorization."\n";\r
+  } else {\r
+      print "Card was rejected: ".$tx->error_message."\n";\r
+  }\r
+\r
+=head1 SUPPORTED TRANSACTION TYPES\r
+\r
+=head2 CC, Visa, MasterCard, American Express, Discover\r
+\r
+Content required: type, login, password, action, amount, first_name, last_name, card_number, expiration.\r
+\r
+=head2 Check\r
+\r
+Not yet implemented...\r
+#Content required: type, login, password, action, amount, first_name, last_name, account_number, routing_code, bank_name.\r
+\r
+=head1 PREREQUISITES\r
+\r
+  URI::Escape\r
+  Tie::IxHash\r
+\r
+  Net::SSLeay _or_ ( Crypt::SSLeay and LWP )\r
+\r
+=head1 DESCRIPTION\r
+\r
+For detailed information see L<Business::OnlinePayment>.\r
+\r
+=head1 AUTHOR\r
+\r
+Original Author\r
+Michael Lehmkuhl <michael@electricpulp.com>\r
+\r
+Special Thanks\r
+Jim Darden <jdarden@echo-inc.com>\r
+Dan Browning <db@kavod.com>\r
+\r
+Business::OnlinePayment Implementation\r
+Ivan Kohler <ivan-openecho@420.am>\r
+\r
+=head1 SEE ALSO\r
+\r
+perl(1). L<Business::OnlinePayment>.\r
+\r
+=cut\r
+\r
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..47b0da8
--- /dev/null
+++ b/README
@@ -0,0 +1,20 @@
+Copyright (C) 2002 Electric Pulp. <info@electricpulp.com>
+Copyright (c) 2004 Ivan Kohler
+All rights reserved. This program is free software; you can redistribute it
+and/or modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This is Business::OnlinePayment::OpenECHO, an Business::OnlinePayment
+backend module for ECHO.  It is only useful if you have a merchant account
+with ECHO: http://www.echo-inc.com/  (also see http://www.openecho.com/)
+
+This module is based on code written by Michael Lehmkuhl
+<michael@electricpulp.com>, with special thanks to Jim Darden
+<jdarden@echo-inc.com> and Dan Browning <db@kavod.com>.  It was adapted to
+the Business::OnlinePayment API by Ivan Kohler <ivan-openecho@420.am>.
+
+Business::OnlinePayment is a generic interface for processing payments through
+online credit card processors, online check acceptance houses, etc.  (If you
+like buzzwords, call it an "multiplatform ecommerce-enabling middleware
+solution").
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..157a740
--- /dev/null
+++ b/TODO
@@ -0,0 +1,15 @@
+- set required fields https://wwws.echo-inc.com/ISPGuide-Fields2.asp
+- counter field shouldn't be just a random integer (but it does need to
+  fallback to that as B:OP doesn't require it)
+
+- echecks / ACH
+    #echeck use customer_org and account_type to generate ec_account_type
+
+- check HTTPS response code and die if not 200?
+- order_type & ccexp_month,ccexp_year setting fiddling ->{_content} directly
+- 'echo_reference', 'security_result', 'mac', and 'decline_code' fields...?
+
+- handle returning correct is_success and error_message values in the
+  special case for AVS-only transactions we don't handle yet (B:OP needs a
+  name for that transaction!)
+- Hosted order type?
diff --git a/blib/arch/auto/Business/OnlinePayment/OpenECHO/.exists b/blib/arch/auto/Business/OnlinePayment/OpenECHO/.exists
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/blib/lib/Business/OnlinePayment/.exists b/blib/lib/Business/OnlinePayment/.exists
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/blib/lib/Business/OnlinePayment/OpenECHO.pm b/blib/lib/Business/OnlinePayment/OpenECHO.pm
new file mode 100644 (file)
index 0000000..595c38d
--- /dev/null
@@ -0,0 +1,673 @@
+##############################################################################\r
+# Business::OnlinePayment::OpenECHO\r
+#\r
+# Credit card transactions via SSL to\r
+# Electronic Clearing House (ECHO) Systems\r
+#\r
+# Refer to ECHO's documentation for more info\r
+# http://www.openecho.com/echo_gateway_guide.html\r
+#\r
+# AUTHOR\r
+# Michael Lehmkuhl <michael@electricpulp.com>\r
+#\r
+# SPECIAL THANKS\r
+# Jim Darden <jdarden@echo-inc.com>\r
+# Dan Browning <db@kavod.com>\r
+#\r
+# BUSINESS::ONLINEPAYMENT IMPLEMENTATION\r
+# Ivan Kohler <ivan-openecho@420.am>\r
+#\r
+# VERSION HISTORY\r
+# + v1.2       08/17/2002 Corrected problem with certain string comparisons.\r
+# + v1.3       08/23/2002 Converted Interchange GlobalSub to Vend::Payment module.\r
+# + v1.3.1     11/12/2002 Updated the OpenECHO_example.perl test script.\r
+# + v1.4       11/18/2002 Corrected a problem with Submit method when using LWP.\r
+# + v1.5        03/29/2003 Updated for additional status and avs_result codes.\r
+# + v1.6        08/26/2003 Cleaned up code (salim qadeer sqadeer@echo-inc.com)\r
+# + v1.6.2      09/23/2003 Added DH transaction type (salim qadeer sqadeer@echo-inc.com)\r
+# --------\r
+# + v0.1        08/26/2004 Business::OnlinePayment implementation\r
+#\r
+# Copyright (C) 2002 Electric Pulp. <info@electricpulp.com>\r
+# Copyright (C) 2004 Ivan Kohler\r
+#\r
+# This program is free software; you can redistribute it and/or modify\r
+# it under the terms of the GNU General Public License as published by\r
+# the Free Software Foundation; either version 2 of the License, or\r
+# (at your option) any later version.\r
+#\r
+# This program is distributed in the hope that it will be useful,\r
+# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+# GNU General Public License for more details.\r
+#\r
+# You should have received a copy of the GNU General Public\r
+# License along with this program; if not, write to the Free\r
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,\r
+# MA  02111-1307  USA.\r
+#\r
+################################################################################\r
+\r
+package Business::OnlinePayment::OpenECHO;\r
+\r
+use strict;\r
+use Carp;\r
+use Business::OnlinePayment 3;\r
+use Business::OnlinePayment::HTTPS;\r
+use vars qw($VERSION @ISA);\r
+\r
+@ISA = qw(Business::OnlinePayment::HTTPS);\r
+$VERSION = '0.01';\r
+\r
+sub set_defaults {\r
+       my $self = shift;\r
+\r
+       $self->server('wwws.echo-inc.com');\r
+       $self->port('443');\r
+       $self->path('/scripts/INR200.EXE');\r
+\r
+       $self->build_subs(qw(\r
+         order_number avs_code\r
+                        ));\r
+        # order_type\r
+       # md5 cvv2_response cavv_response\r
+\r
+}\r
+\r
+#map_fileds originally from AuthorizeNet.pm\r
+\r
+sub map_fields {\r
+    my($self) = @_;\r
+\r
+    ##AD (Address Verification)  - 0.18 cents\r
+    #AS (Authorization) - 0.18 cents\r
+    #AV (Authorization with Address Verification) - 0.18 cents\r
+    #CR (Credit) - 0.18 cents + 0.12 cents (discount fee returned to merchant)\r
+    #DS (Deposit) - 0.18 cents + 0.12 cents\r
+    #ES (Authorization and Deposit) - 0.18 cents + 0.12 cents + an extra 0.17%\r
+    #EV (Authorization and Deposit with Address Verification) - 0.18 cents + 0.12 cents\r
+    ##CK (System check) - 0.18 cents\r
+    #DV (Electronic Check Verification) - check your contract\r
+    #DD (Electronic Check Debit with Verification) - check your contract\r
+    #DH (Electronic Check Debit ACH Only) - check your contract\r
+    #DC (Electronic Check Credit) - check your contract\r
+\r
+    my %content = $self->content();\r
+\r
+    my $avs = $self->require_avs;\r
+    $avs = 1 unless defined($avs) && length($avs); #default AVS on unless explicitly turned off\r
+\r
+    my %map;\r
+    if (\r
+      $content{'type'} =~ /^(cc|visa|mastercard|american express|discover)$/i\r
+    ) {\r
+      if ( $avs ) {\r
+        %map = ( 'normal authorization' => 'EV',\r
+                 'authorization only'   => 'AV',\r
+                 'credit'               => 'CR',\r
+                 'post authorization'   => 'DS',\r
+                 #'void'                 => 'VOID',\r
+               );\r
+      } else {\r
+        %map = ( 'normal authorization' => 'ES',\r
+                 'authorization only'   => 'AS',\r
+                 'credit'               => 'CR',\r
+                 'post authorization'   => 'DS',\r
+                 #'void'                 => 'VOID',\r
+               );\r
+      }\r
+    } elsif ( $content{'type'} =~ /^check$/i ) {\r
+      %map = ( 'normal authorization' => 'DD',\r
+               'authorization only'   => 'DV',\r
+               'credit'               => 'DC',\r
+               'post authorization'   => 'DH',\r
+               #'void'                 => 'VOID',\r
+             );\r
+    } else {\r
+      croak 'Unknown type: '. $content{'type'};\r
+    }\r
+\r
+    $content{'type'} = $map{lc($content{'action'})}\r
+      or croak 'Unknown action: '. $content{'action'};\r
+\r
+    $self->transaction_type($content{'type'});\r
+\r
+    # stuff it back into %content\r
+    $self->content(%content);\r
+\r
+}\r
+\r
+sub submit {\r
+    my($self) = @_;\r
+\r
+    $self->map_fields();\r
+    $self->remap_fields(\r
+        #                => 'order_type',\r
+        type             => 'transaction_type',\r
+        #action          =>\r
+        login            => 'merchant_echo_id',\r
+        password         => 'merchant_pin',\r
+        #                => 'isp_echo_id',\r
+        #                => 'isp_pin',\r
+        #transaction_key =>\r
+        authorization    => 'authorization', # auth_code => 'authorization',\r
+        customer_ip      => 'billing_ip_address',\r
+        #                   'billing_prefix',\r
+        name             => 'billing_name',\r
+        first_name       => 'billing_first_name',\r
+        last_name        => 'billing_last_name',\r
+        company          => 'billing_company_name',\r
+        address          => 'billing_address_1',\r
+        #                => 'billing_address_2',\r
+        city             => 'billing_city',\r
+        state            => 'billing_state',\r
+        zip              => 'billing_zip',\r
+        country          => 'billing_country',\r
+        phone            => 'billing_phone',\r
+        fax              => 'billing_fax',\r
+        email            => 'billing_email',\r
+        card_number      => 'cc_number',\r
+        #                => 'ccexp_month',\r
+        #                => 'ccexp_year',\r
+        #                => 'counter',\r
+        #                => 'debug',\r
+\r
+        #XXX#            => 'ec_*',\r
+\r
+        'amount'         => 'grand_total',\r
+        #                => 'merchant_email',\r
+        #invoice_number  =>\r
+        #customer_id     =>\r
+        #                => 'merchant_trace_nbr',\r
+        #                => 'original_amount',\r
+        #                => 'original_trandate_mm',\r
+        #                => 'original_trandate_dd',\r
+        #                => 'original_trandate_yyyy',\r
+        #                => 'original_reference',\r
+        order_number     => 'order_number',\r
+        #                => 'shipping_flag',\r
+\r
+        #description       =>\r
+        #currency          =>\r
+\r
+        #ship_last_name    =>\r
+        #ship_first_name   =>\r
+        #ship_company      =>\r
+        #ship_address      =>\r
+        #ship_city         =>\r
+        #ship_state        =>\r
+        #ship_zip          =>\r
+        #ship_country      =>\r
+\r
+        #expiration        =>\r
+        cvv2              => 'cnp_security',\r
+\r
+        #check_type        =>\r
+        #account_name      => 'ec_last_name' & 'ec_first_name',\r
+        account_number    => 'ec_account',\r
+        #account_type      =>\r
+        bank_name         => 'ec_bank_name',\r
+        routing_code      => 'ec_rt',\r
+        #customer_org      =>\r
+        #customer_ssn      =>\r
+        license_num       => 'ec_id_number',\r
+        license_state     => 'ec_id_state',\r
+        #license_dob       =>\r
+\r
+        #recurring_billing => 'cnp_recurring',\r
+    );\r
+\r
+    #XXX hosted order_type?\r
+    $self->{_content}{order_type} = 'S';\r
+\r
+    #XXX counter field shouldn't be just a random integer (but it does need a\r
+    #default this way i guess...\r
+    $self->{_content}{counter} = int(rand(2**31));\r
+\r
+    #ccexp_month & ccexp_year\r
+    $self->{_content}{'expiration'} =~ /^(\d+)\D+\d*(\d{2})$/\r
+      or croak "unparsable expiration ". $self->{_content}{expiration};\r
+    my( $month, $year ) = ( $1, $2 );\r
+    $month = '0'. $month if $month =~ /^\d$/;\r
+    $self->{_content}{ccexp_month} = $month;\r
+    $self->{_content}{ccexp_year} = $year;\r
+\r
+    $self->{_content}{cnp_recurring} = 'Y'\r
+      if exists($self->{_content}{recurring_billing})\r
+      && $self->{_content}{recurring_billing} =~ /^y/i;\r
+\r
+    #XXX echeck use customer_org and account_type to generate ec_account_type\r
+\r
+    #XXX set required fields\r
+    # https://wwws.echo-inc.com/ISPGuide-Fields2.asp\r
+    $self->required_fields();\r
+\r
+    my( $page, $response, %reply_headers) =\r
+      $self->https_get( $self->get_fields( $self->fields ) );\r
+\r
+    #XXX check $response and die if not 200?\r
+\r
+    my $echotype1 = $self->GetEchoReturn($page, 1);\r
+    my $echotype2 = $self->GetEchoReturn($page, 2);\r
+    my $echotype3 = $self->GetEchoReturn($page, 3);\r
+    my $openecho  = $self->GetEchoReturn($page, 'OPEN');\r
+\r
+    #  server_response\r
+    #  avs_code\r
+    #  order_number\r
+    #  is_success\r
+    #  result_code\r
+    #  authorization\r
+    #md5 cvv2_response cavv_response ...?\r
+\r
+    # Get all the metadata.\r
+    $self->server_response($page);\r
+    $self->authorization( $self->GetEchoProp($echotype3, 'auth_code') );\r
+    $self->order_number(  $self->GetEchoProp($echotype3, 'order_number') );\r
+\r
+    #XXX ???\r
+    #$self->reference(     $this->GetEchoProp($echotype3, "echo_reference");\r
+\r
+    $self->result_code(   $self->GetEchoProp($echotype3, 'status') );\r
+    $self->avs_code(      $self->GetEchoProp($echotype3, 'avs_result') );\r
+\r
+    #XXX ???\r
+    #$self->security_result( $self->GetEchoProp($echotype3, 'security_result');\r
+    #$self->mac( $self->GetEchoProp($echotype3, 'mac') );\r
+    #$self->decline_code( $self->GetEchoProp($echotype3, 'decline_code') );\r
+\r
+    if ($self->result_code =~ /^[GR]$/ ) { #success\r
+\r
+      #XXX special case for AVS-only transactions we don't handle yet\r
+      #if ($self->transaction_type eq "AD") {\r
+      #  if ($self->avs_code =~ /^[XYDM]$/ ) {\r
+      #    $self->is_success(1);\r
+      #  } else {\r
+      #    $self->is_success(0);\r
+      #  }\r
+      #} else {        \r
+        $self->is_success(1);\r
+      #}\r
+\r
+    } else {\r
+      $self->is_success(0);\r
+\r
+      my $decline_code = $self->GetEchoProp($echotype3, 'decline_code');\r
+      my $error_message = $self->error($decline_code);\r
+      if ( $decline_code =~ /^(00)?30$/ ) {\r
+        $echotype2 =~ s/<br>/\n/ig;\r
+        $echotype2 =~ s'</?(b|pre)>''ig;\r
+        $error_message .= ": $echotype2";\r
+      }\r
+      $self->error_message( $error_message );\r
+\r
+    }\r
+\r
+    $self->is_success(0) if $page eq '';\r
+\r
+}\r
+\r
+\r
+sub fields {\r
+       my $self = shift;\r
+\r
+       my @fields = qw(\r
+         order_type\r
+         transaction_type\r
+         merchant_echo_id\r
+         merchant_pin\r
+         isp_echo_id\r
+         isp_pin\r
+         authorization\r
+         billing_ip_address\r
+         billing_prefix\r
+         billing_name\r
+         billing_first_name\r
+         billing_last_name\r
+         billing_company_name\r
+         billing_address1\r
+         billing_address2\r
+         billing_city\r
+         billing_state\r
+         billing_zip\r
+         billing_country\r
+         billing_phone\r
+         billing_fax\r
+         billing_email\r
+         cc_number\r
+         ccexp_month\r
+         ccexp_year\r
+         counter\r
+         debug\r
+       );\r
+\r
+       if ($self->transaction_type =~ /^D[DCVH]$/) {\r
+         push @fields, qw(\r
+           ec_account\r
+           ec_account_type\r
+           ec_payment_type\r
+           ec_address1\r
+           ec_address2\r
+           ec_bank_name\r
+           ec_business_acct\r
+           ec_city\r
+           ec_email\r
+           ec_first_name\r
+           ec_id_country\r
+           ec_id_exp_mm\r
+           ec_id_exp_dd\r
+           ec_id_exp_yy\r
+           ec_id_number\r
+           ec_id_state\r
+           ec_id_type\r
+           ec_last_name\r
+           ec_merchant_ref\r
+           ec_nbds_code\r
+           ec_other_name\r
+           ec_payee\r
+           ec_rt\r
+           ec_serial_number\r
+           ec_state\r
+           ec_transaction_dt\r
+           ec_zip\r
+         );\r
+       }\r
+\r
+       push @fields, qw(\r
+         grand_total\r
+         merchant_email\r
+         merchant_trace_nbr\r
+         original_amount\r
+         original_trandate_mm\r
+         original_trandate_dd\r
+         original_trandate_yyyy\r
+         original_reference\r
+         order_number\r
+         shipping_flag\r
+         shipping_prefix\r
+         shipping_name\r
+         shipping_address1\r
+         shipping_address2\r
+         shipping_city\r
+         shipping_state\r
+         shipping_zip\r
+         shipping_comments\r
+         shipping_country\r
+         shipping_phone\r
+         shipping_fax\r
+         shipper\r
+         shipper_tracking_nbr\r
+         track1\r
+         track2\r
+         cnp_security\r
+         cnp_recurring\r
+       );\r
+\r
+       return @fields;\r
+}\r
+\r
+sub GetEchoProp {\r
+       my( $self, $raw, $prop ) = @_;\r
+       local $^W=0;\r
+\r
+       my $data;\r
+       ($data) = $raw =~ m"<$prop>(.*?)</$prop>"gsi;\r
+       $data =~ s/<.*?>/ /gs;\r
+       chomp $data;\r
+       return $data;\r
+}\r
+\r
+# Get's a given Echo return type and strips all HTML style tags from it.\r
+# It also strips any new line characters from the returned string.\r
+#\r
+# This function based on Ben Reser's <breser@vecdev.com> Echo::Process\r
+# module.\r
+sub GetEchoReturn {\r
+       my( $self, $page, $type ) = @_;\r
+       local $^W=0;\r
+\r
+       my $data;\r
+       if ($type eq 'OPEN') {\r
+               ($data) = $page =~ m"<OPENECHO>(.*?)</OPENECHO>"gsi;\r
+       }\r
+       else {\r
+               ($data) = $page =~ m"<ECHOTYPE$type>(.*?)</ECHOTYPE$type>"gsi;\r
+       }\r
+#      $data =~ s"<.*?>" "g;\r
+\r
+        #unless (length($data)) {\r
+        #  warn "$self $page $type";\r
+        #}\r
+\r
+       chomp $data;\r
+       return $data;\r
+}\r
+\r
+use vars qw(%error);\r
+%error = (\r
+  "01" => [ "Refer to card issuer", "The merchant must call the issuer before the transaction can be approved." ],\r
+  "02" => [ "Refer to card issuer, special condition", "The merchant must call the issuer before the transaction can be approved." ],\r
+  "03" => [ "Invalid merchant number", "The merchant ID is not valid." ],\r
+  "04" => [ "Pick-up card. Capture for reward", "The card is listed on the Warning Bulletin.  Merchant may receive reward money by capturing the card." ],\r
+  "05" => [ "Do not honor. The transaction was declined by the issuer without definition or reason", "The transaction was declined without explanation by the card issuer." ],\r
+  "06" => [ "Error", "The card issuer returned an error without further explanation." ],\r
+  "07" => [ "Pick-up card, special condition", "The card is listed on the Warning Bulletin.  Merchant may receive reward money by capturing the card." ],\r
+  "08" => [ "Honor with identification", "Honor with identification." ],\r
+  "09" => [ "Request in progress", "Request in progress." ],\r
+  "10" => [ "Approved for partial amount", "Approved for partial amount." ],\r
+  "11" => [ "Approved, VIP", "Approved, VIP program." ],\r
+  "12" => [ "Invalid transaction", "The requested transaction is not supported or is not valid for the card number presented." ],\r
+  "13" => [ "Invalid amount", "The amount exceeds the limits established by the issuer for this type of transaction." ],\r
+  "14" => [ "Invalid card #", "The issuer indicates that this card is not valid." ],\r
+  "15" => [ "No such issuer", "The card issuer number is not valid." ],\r
+  "16" => [ "Approved, update track 3", "Approved, update track 3." ],\r
+  "17" => [ "Customer cancellation", "Customer cancellation." ],\r
+  "18" => [ "Customer dispute", "Customer dispute." ],\r
+  "19" => [ "Re enter transaction", "Customer should resubmit transaction." ],\r
+  "20" => [ "Invalid response", "Invalid response." ],\r
+  "21" => [ "No action taken", "No action taken. The issuer declined with no other explanation." ],\r
+  "22" => [ "Suspected malfunction", "Suspected malfunction." ],\r
+  "23" => [ "Unacceptable transaction fee", "Unacceptable transaction fee." ],\r
+  "24" => [ "File update not supported", "File update not supported." ],\r
+  "25" => [ "Unable to locate record", "Unable to locate record." ],\r
+  "26" => [ "Duplicate record", "Duplicate record." ],\r
+  "27" => [ "File update edit error", "File update edit error." ],\r
+  "28" => [ "File update file locked", "File update file locked." ],\r
+  "30" => [ "Format error, call ECHO", "The host reported that the transaction was not formatted properly." ],\r
+  "31" => [ "Bank not supported", "Bank not supported by switch." ],\r
+  "32" => [ "Completed partially", "Completed partially." ],\r
+  "33" => [ "Expired card, pick-up", "The card is expired.  Merchant may receive reward money by capturing the card." ],\r
+  "34" => [ "Issuer suspects fraud, pick-up card", "The card issuer suspects fraud.  Merchant may receive reward money by capturing the card." ],\r
+  "35" => [ "Contact acquirer, pick-up", "Contact card issuer.  Merchant may receive reward money by capturing the card." ],\r
+  "36" => [ "Restricted card, pick-up", "The card is restricted by the issuer.  Merchant may receive reward money by capturing the card." ],\r
+  "37" => [ "Call ECHO security, pick-up", "Contact ECHO security.  Merchant may receive reward money by capturing the card." ],\r
+  "38" => [ "PIN tries exceeded, pick-up", "PIN attempts exceed issuer limits.  Merchant may receive reward money by capturing the card." ],\r
+  "39" => [ "No credit account", "No credit account." ],\r
+  "40" => [ "Function not supported", "Requested function not supported." ],\r
+  "41" => [ "Lost Card, capture for reward", "The card has been reported lost." ],\r
+  "42" => [ "No universal account", "No universal account." ],\r
+  "43" => [ "Stolen Card, capture for reward", "The card has been reported stolen." ],\r
+  "44" => [ "No investment account", "No investment account." ],\r
+  "51" => [ "Not sufficient funds", "The credit limit for this account has been exceeded." ],\r
+  "54" => [ "Expired card", "The card is expired." ],\r
+  "55" => [ "Incorrect PIN", "The cardholder PIN is incorrect." ],\r
+  "56" => [ "No card record", "No card record." ],\r
+  "57" => [ "Transaction not permitted to cardholder", "The card is not allowed the type of transaction requested." ],\r
+  "58" => [ "Transaction not permitted on terminal", "The Merchant is not allowed this type of transaction." ],\r
+  "59" => [ "Suspected fraud", "Suspected fraud." ],\r
+  "60" => [ "Contact ECHO", "Contact ECHO." ],\r
+  "61" => [ "Exceeds withdrawal limit", "The amount exceeds the allowed daily maximum." ],\r
+  "62" => [ "Restricted card", "The card has been restricted." ],\r
+  "63" => [ "Security violation.", "The card has been restricted." ],\r
+  "64" => [ "Original amount incorrect", "Original amount incorrect." ],\r
+  "65" => [ "Exceeds withdrawal frequency", "The allowable number of daily transactions has been exceeded." ],\r
+  "66" => [ "Call acquirer security, call ECHO", "Call acquirer security, call ECHO." ],\r
+  "68" => [ "Response received too late", "Response received too late." ],\r
+  "75" => [ "PIN tries exceeded", "The allowed number of PIN retries has been exceeded." ],\r
+  "76" => [ "Invalid \"to\" account", "The debit account does not exist." ],\r
+  "77" => [ "Invalid \"from\" account", "The credit account does not exist." ],\r
+  "78" => [ "Invalid account specified (general)", "The associated card number account is invalid or does not exist." ],\r
+  "79" => [ "Already reversed", "Already reversed." ],\r
+  "84" => [ "Invalid authorization life cycle", "The authorization life cycle is invalid." ],\r
+  "86" => [ "Cannot verify PIN", "Cannot verify PIN." ],\r
+  "87" => [ "Network Unavailable", "Network Unavailable." ],\r
+  "89" => [ "Ineligible to receive financial position information", "Ineligible to receive financial position information." ],\r
+  "90" => [ "Cut-off in progress", "Cut-off in progress." ],\r
+  "91" => [ "Issuer or switch inoperative", "The bank is not available to authorize this transaction." ],\r
+  "92" => [ "Routing error", "The transaction cannot be routed to the authorizing agency." ],\r
+  "93" => [ "Violation of law", "Violation of law." ],\r
+  "94" => [ "Duplicate transaction", "Duplicate transaction." ],\r
+  "95" => [ "Reconcile error", "Reconcile error." ],\r
+  "96" => [ "System malfunction", "A system error has occurred." ],\r
+  "98" => [ "Exceeds cash limit", "Exceeds cash limit." ],\r
+  "1000" => [ "Unrecoverable error.", "An unrecoverable error has occurred in the ECHONLINE processing." ],\r
+  "1001" => [ "Account closed", "The merchant account has been closed." ],\r
+  "1002" => [ "System closed", "Services for this system are not available. (Not used by ECHONLINE)" ],\r
+  "1003" => [ "E-Mail Down", "The e-mail function is not available. (Not used by ECHONLINE)" ],\r
+  "1012" => [ "Invalid trans code", "The host computer received an invalid transaction code." ],\r
+  "1013" => [ "Invalid term id", "The ECHO-ID is invalid." ],\r
+  "1015" => [ "Invalid card number", "The credit card number that was sent to the host computer was invalid" ],\r
+  "1016" => [ "Invalid expiry date", "The card has expired or the expiration date was invalid." ],\r
+  "1017" => [ "Invalid amount", "The dollar amount was less than 1.00 or greater than the maximum allowed for this card." ],\r
+  "1019" => [ "Invalid state", "The state code was invalid. (Not used by ECHONLINE)" ],\r
+  "1021" => [ "Invalid service", "The merchant or card holder is not allowed to perform that kind of transaction" ],\r
+  "1024" => [ "Invalid auth code", "The authorization number presented with this transaction is incorrect. (deposit transactions only)" ],\r
+  "1025" => [ "Invalid reference number", "The reference number presented with this transaction is incorrect or is not numeric." ],\r
+  "1029" => [ "Invalid contract number", "The contract number presented with this transaction is incorrect or is not numeric. (Not used by ECHONLINE)" ],\r
+  "1030" => [ "Invalid inventory data", "The inventory data presented with this transaction is not ASCII \"printable\". (Not used by ECHONLINE)" ],\r
+  "1508" => [ " ", "Invalid or missing order_type." ],\r
+  "1509" => [ " ", "The merchant is not approved to submit this order_type." ],\r
+  "1510" => [ " ", "The merchant is not approved to submit this transaction_type." ],\r
+  #"1511" => [ " ", "Duplicate transaction attempt (see counterin Part I of this Specification</EM>)." ],\r
+  "1511" => [ " ", "Duplicate transaction attempt (set counter field?)." ],\r
+  "1599" => [ " ", "An system error occurred while validating the transaction input." ],\r
+  "1801" => [ "Return Code \"A\"", "Address matches; ZIP does not match." ],\r
+  "1802" => [ "Return Code \"W\"", "9-digit ZIP matches; Address does not match." ],\r
+  "1803" => [ "Return Code \"Z\"", "5-digit ZIP matches; Address does not match." ],\r
+  "1804" => [ "Return Codes \"U\"", "Issuer unavailable; cannot verify." ],\r
+  "1805" => [ "Return Code \"R\"", "Retry; system is currently unable to process." ],\r
+  "1806" => [ "Return Code \"S\" or \"G\"", "Issuer does not support AVS." ],\r
+  "1807" => [ "Return Code \"N\"", "Nothing matches." ],\r
+  "1808" => [ "Return Code \"E\"", "Invalid AVS only response." ],\r
+  "1809" => [ "Return Code \"B\"", "Street address match. Postal code not verified because of incompatible formats." ],\r
+  "1810" => [ "Return Code \"C\"", "Street address and Postal code not verified because of incompatible formats." ],\r
+  "1811" => [ "Return Code \"D\"", "Street address match and Postal code match." ],\r
+  "1812" => [ "Return Code \"I\"", "Address information not verified for international transaction." ],\r
+  "1813" => [ "Return Code \"M\"", "Street address match and Postal code match." ],\r
+  "1814" => [ "Return Code \"P\"", "Postal code match. Street address not verified because of incompatible formats." ],\r
+  "1897" => [ "invalid response", "The host returned an invalid response." ],\r
+  "1898" => [ "disconnect", "The host unexpectedly disconnected." ],\r
+  "1899" => [ "timeout", "Timeout waiting for host response." ],\r
+  "2071" => [ "Call VISA", "An authorization number from the VISA Voice Center is required to approve this transaction." ],\r
+  "2072" => [ "Call Master Card", "An authorization number from the Master Card Voice Center is required to approve this transaction." ],\r
+  "2073" => [ "Call Carte Blanche", "An authorization number from the Carte Blanche Voice Center is required to approve this transaction." ],\r
+  "2074" => [ "Call Diners Club", "An authorization number from the Diners' Club Voice Center is required to approve this transaction." ],\r
+  "2075" => [ "Call AMEX", "An authorization number from the American Express Voice Center is required to approve this transaction." ],\r
+  "2076" => [ "Call Discover", "An authorization number from the Discover Voice Center is required to approve this transaction." ],\r
+  "2078" => [ "Call ECHO", "The merchant must call ECHOCustomer Support for approval.or because there is a problem with the merchant's account." ],\r
+  "2079" => [ "Call XpresscheX", "The merchant must call ECHOCustomer Support for approval.or because there is a problem with the merchant's account." ],\r
+  "3001" => [ "No ACK on Resp", "The host did not receive an ACK from the terminal after sending the transaction response." ],\r
+  "3002" => [ "POS NAK'd 3 Times", "The host disconnected after the terminal replied 3 times to the host response with a NAK." ],\r
+  "3003" => [ "Drop on Wait", "The line dropped before the host could send a response to the terminal." ],\r
+  "3005" => [ "Drop on Resp", "The line dropped while the host was sending the response to the terminal." ],\r
+  "3007" => [ "Drop Before EOT", "The host received an ACK from the terminal but the line dropped before the host could send the EOT." ],\r
+  "3011" => [ "No Resp to ENQ", "The line was up and carrier detected, but the terminal did not respond to the ENQ." ],\r
+  "3012" => [ "Drop on Input", "The line disconnected while the host was receiving data from the terminal." ],\r
+  "3013" => [ "FEP NAK'd 3 Times", "The host disconnected after receiving 3 transmissions with incorrect LRC from the terminal." ],\r
+  "3014" => [ "No Resp to ENQ", "The line disconnected during input data wait in Multi-Trans Mode." ],\r
+  "3015" => [ "Drop on Input", "The host encountered a full queue and discarded the input data." ],\r
+);\r
+for ( 9000..9999 ) {\r
+  $error{$_} = [ "Host Error", "The host encountered an internal error and was not able to process the transaction." ]; \r
+}\r
+sub error {\r
+  my( $self, $num ) = @_;\r
+  $num =~ s/^00(\d\d)$/$1/;\r
+  return $num. ': '. $error{$num}[0]. ': '. $error{$num}[1];\r
+}\r
+\r
+1;\r
+\r
+__END__\r
+\r
+=head1 NAME\r
+\r
+Business::OnlinePayment::OpenECHO - ECHO backend module for Business::OnlinePayment\r
+\r
+=head1 SYNOPSIS\r
+\r
+  use Business::OnlinePayment;\r
+\r
+  ####\r
+  # One step transaction, the simple case.\r
+  ####\r
+\r
+  my $tx = new Business::OnlinePayment("OpenECHO");\r
+  $tx->content(\r
+      type           => 'VISA',\r
+      login          => '1234684752',\r
+      password       => '43400210',\r
+      action         => 'Normal Authorization',\r
+      description    => 'Business::OnlinePayment test',\r
+      amount         => '49.95',\r
+      invoice_number => '100100',\r
+      customer_id    => 'jsk',\r
+      first_name     => 'Tofu',\r
+      last_name      => 'Beast',\r
+      address        => '123 Anystreet',\r
+      city           => 'Anywhere',\r
+      state          => 'UT',\r
+      zip            => '84058',\r
+      card_number    => '4005550000000019',\r
+      expiration     => '08/06',\r
+      cvv2           => '1234', #optional\r
+      referer        => 'http://valid.referer.url/',\r
+  );\r
+  $tx->submit();\r
+\r
+  if($tx->is_success()) {\r
+      print "Card processed successfully: ".$tx->authorization."\n";\r
+  } else {\r
+      print "Card was rejected: ".$tx->error_message."\n";\r
+  }\r
+\r
+=head1 SUPPORTED TRANSACTION TYPES\r
+\r
+=head2 CC, Visa, MasterCard, American Express, Discover\r
+\r
+Content required: type, login, password, action, amount, first_name, last_name, card_number, expiration.\r
+\r
+=head2 Check\r
+\r
+Not yet implemented...\r
+#Content required: type, login, password, action, amount, first_name, last_name, account_number, routing_code, bank_name.\r
+\r
+=head1 PREREQUISITES\r
+\r
+  URI::Escape\r
+  Tie::IxHash\r
+\r
+  Net::SSLeay _or_ ( Crypt::SSLeay and LWP )\r
+\r
+=head1 DESCRIPTION\r
+\r
+For detailed information see L<Business::OnlinePayment>.\r
+\r
+=head1 AUTHOR\r
+\r
+Original Author\r
+Michael Lehmkuhl <michael@electricpulp.com>\r
+\r
+Special Thanks\r
+Jim Darden <jdarden@echo-inc.com>\r
+Dan Browning <db@kavod.com>\r
+\r
+Business::OnlinePayment Implementation\r
+Ivan Kohler <ivan-openecho@420.am>\r
+\r
+=head1 SEE ALSO\r
+\r
+perl(1). L<Business::OnlinePayment>.\r
+\r
+=cut\r
+\r
diff --git a/blib/lib/auto/Business/OnlinePayment/OpenECHO/.exists b/blib/lib/auto/Business/OnlinePayment/OpenECHO/.exists
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/blib/man3/.exists b/blib/man3/.exists
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/generror/ISPGuide-Codes.asp b/generror/ISPGuide-Codes.asp
new file mode 100644 (file)
index 0000000..4f2ac4e
--- /dev/null
@@ -0,0 +1,1249 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">\r
+<HTML>\r
+       <HEAD>\r
+               <title>V: ECHOnline Decline and Error Responses</title>\r
+               <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">\r
+               <style> <!-- a:hover{color:#0080FF}\r
+       --></style>\r
+       </HEAD>\r
+       <body bgcolor="#ffffff">\r
+               \r
+<table border="0" width="100%">\r
+    <tr>\r
+      <td rowspan=2 valign=center align=middle height="48" width="50">\r
+      \r
+         \r
+                               <a href="/"><img src="/images/ECHOBall3.jpg" border=0 alt="ECHO Merchant Center"></a>\r
+      \r
+         </td>\r
+      \r
+      <td align="left" valign="bottom">\r
+               <b><font size=+1>Interface Specification</b></font>\r
+         </td>\r
+         \r
+      <td align="right" valign="bottom">\r
+               <font size="-1"><font face="Arial,Verdana,Helvetica"><b><i><font size=+2>ECHOnline </i></b></font></font>\r
+        \r
+        \r
+        <br><b>Document revision date 05/24/2004</b></font>\r
+     </td>\r
+   </tr>\r
+</table>\r
\r
+<hr size="3" color="#000080">\r
+               <a href="/ISPGuide-Menu.asp">Return to the <font face="Verdana,Arial,Helvetica" size="-1">\r
+                               <b><i>ECHO</b></I></font> <b>Internet Development Tools</b> home page.</a>\r
+               <h1>Part V: Decline and Error Responses</h1>\r
+               <p>\r
+                       This document describes the content of an ECHOTYPE1 response containing a \r
+                       decline or error response received from the <font face="Verdana,Arial,Helvetica" size="-1">\r
+                               <b><i>ECHO</i></b></font> host computers. For a general description of <b><i><font face="Verdana,Arial,Helvetica" size="-1">\r
+                                               ECHO<font size="-2">NLINE</font></font></i></b> responses see <a href="ISPGuide-Interface.asp#Responses">\r
+                               Response Protocol</a>\r
+               in Part I of this Specification.\r
+               <p>\r
+                       Host responses differ depending on the transaction code and whether or not an \r
+                       error or decline was detected by the host. For a description of acknowledgement \r
+                       and approval responses see <a href="ISPGuide-Response.asp"><b>Part IV: <i><font face="Verdana,Arial,Helvetica" size="-1">\r
+                                                       ECHO<font size="-2">NLINE</font></font></i> Host Responses</b></a>\r
+               .\r
+               <p>\r
+                       Credit card transactions and electronic check transactions differ slightly in \r
+                       their format. For this reason they are treated separately in the sections \r
+                       below. In the examples, the "·" character is used to indicate a space \r
+                       character.\r
+                       <h2>Credit Card Transactions</h2>\r
+               Decline and error responses are very similar in that they both represent \r
+               situations that prevent a transaction from being authorized. Decline codes can \r
+               actually represent a system error, and error codes can actually represent an \r
+               account restriction. The difference between the two is more of a historical \r
+               artifact than any distinction between an "error" and a "decline."\r
+               <p>\r
+                       Decline responses are always preceded by the word "DECLINED," while error \r
+                       responses contain various text messages from <b><i><font face="Verdana,Arial,Helvetica" size="-1">\r
+                                               ECHO</font></i></b>'s host computer or the issuer's computers. \r
+                       Decline and error responses are described below.\r
+                       <h3>Message Formats</h3>\r
+               <p>\r
+               Decline responses are formatted as follows.\r
+               <p>\r
+                       <center>\r
+                               <table border="1" cellpadding="3" cellspacing="0" width="80%">\r
+                                       <tr bgcolor="#e0e0e0">\r
+                                               <td valign="top"><b>Field</b></td>\r
+                                               <td valign="top"><b>Size</b></td>\r
+                                               <td valign="top"><b>Description</b></td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">tag</td>\r
+                                               <td valign="top">11</td>\r
+                                               <td valign="top">"&lt;ECHOTYPE1&gt;"</td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">decline</td>\r
+                                               <td valign="top">9</td>\r
+                                               <td valign="top">"DECLINED "</td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">decline code\r
+                                               </td>\r
+                                               <td valign="top">2</td>\r
+                                               <td valign="top">See Decline Codes table below</td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">filler</td>\r
+                                               <td valign="top">1</td>\r
+                                               <td valign="top">" " (space)</td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">amount</td>\r
+                                               <td valign="top">20</td>\r
+                                               <td valign="top">Declined transaction amount. <em><b>Note</b></em>: This field is \r
+                                                       right-justified with leading zeroes suppressed. Depending on the type of \r
+                                                       decline, there may or may not be a "$" character in the leftmost position of \r
+                                                       this field. Examples: "$bbbbbbbbbbbbbbb2.99" and "bbbbbbbbbbbbbbbb2.99"</td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">tag</td>\r
+                                               <td valign="top">12</td>\r
+                                               <td valign="top">"&lt;/ECHOTYPE1&gt;"</td>\r
+                                       </tr>\r
+                               </table>\r
+                       </center>\r
+               <p>\r
+               Error responses are formatted as follows.\r
+               <p>\r
+                       <center>\r
+                               <table border="1" cellpadding="3" cellspacing="0" width="80%">\r
+                                       <tr bgcolor="#e0e0e0">\r
+                                               <td valign="top"><b>Field</b></td>\r
+                                               <td valign="top"><b>Size</b></td>\r
+                                               <td valign="top"><b>Description</b></td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">tag</td>\r
+                                               <td valign="top">11</td>\r
+                                               <td valign="top">"&lt;ECHOTYPE1&gt;"</td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">error text</td>\r
+                                               <td valign="top">20</td>\r
+                                               <td valign="top">error description</td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">error code</td>\r
+                                               <td valign="top">4</td>\r
+                                               <td valign="top">See Error Codes table below</td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">tag</td>\r
+                                               <td valign="top">12</td>\r
+                                               <td valign="top">"&lt;/ECHOTYPE1&gt;"</td>\r
+                                       </tr>\r
+                               </table>\r
+                       </center>\r
+                       <h3>Decline Codes</h3>\r
+               <p>Decline codes are defined in the following table.</p>\r
+               <center>\r
+                       <table border="1" cellpadding="3" cellspacing="0" width="80%">\r
+                               <tr bgcolor="#e0e0e0">\r
+                                       <td valign="top"><b>Decline<br>\r
+                                                       Code</b></td>\r
+                                       <td valign="top" width="259"><b>Short<br>\r
+                                                       Description</b></td>\r
+                                       <td valign="top"><b><br>\r
+                                                       Explanation</b></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">01</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Refer \r
+                                                               to card issuer</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               merchant must call the issuer before the transaction can be approved.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">02</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Refer \r
+                                                               to card issuer, special condition</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               merchant must call the issuer before the transaction can be approved.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">03</td>\r
+                                       <td valign="top" width="259">Invalid merchant number</td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               merchant ID is not valid.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">04</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Pick-up \r
+                                                               card. Capture for reward</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               card is listed on the Warning Bulletin.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Merchant \r
+                                                               may receive reward money by capturing the card.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">05</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Do \r
+                                                               not honor. The transaction was declined by the issuer without definition or \r
+                                                               reason</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                                       transaction was declined without explanation by the card issuer.</FONT></SPAN>\r
+                                               </SPAN></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">06</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Error</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               card issuer returned an error without further explanation.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">07</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Pick-up \r
+                                                               card, special condition</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               card is listed on the Warning Bulletin.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Merchant \r
+                                                               may receive reward money by capturing the card.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">08</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Honor \r
+                                                               with identification</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Honor \r
+                                                               with identification.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">09</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Request \r
+                                                               in progress</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Request \r
+                                                               in progress.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">10</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Approved \r
+                                                               for partial amount</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Approved \r
+                                                               for partial amount.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">\r
+                                               11</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Approved, \r
+                                                               VIP</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Approved, \r
+                                                                                       VIP program.</FONT></SPAN>\r
+                                                               </SPAN></FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">12</td>\r
+                                       <td valign="top" width="259">Invalid transaction</td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               requested transaction is not supported or is not valid for the card number \r
+                                                               presented.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">13</td>\r
+                                       <td valign="top" width="259">Invalid amount</td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               amount exceeds the limits established by the issuer for this type of \r
+                                                               transaction.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">14</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Invalid \r
+                                                               card #</FONT></SPAN></td>\r
+                                       <td valign="top">The issuer indicates that this card is not valid.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">15</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">No \r
+                                                               such issuer</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               card issuer number is not valid.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">16</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Approved, \r
+                                                               update track 3</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Approved, \r
+                                                               update track 3.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">17</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Customer \r
+                                                               cancellation</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Customer \r
+                                                               cancellation.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">18</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Customer \r
+                                                               dispute</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Customer \r
+                                                               dispute.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">19</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Re \r
+                                                               enter transaction</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Customer \r
+                                                               should resubmit transaction.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">20</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Invalid \r
+                                                               response</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Invalid \r
+                                                               response.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">21</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">No \r
+                                                               action taken</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">No \r
+                                                               action taken. The issuer declined with no other explanation.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">22</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Suspected \r
+                                                               malfunction</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Suspected \r
+                                                               malfunction.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">23</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Unacceptable \r
+                                                               transaction fee</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Unacceptable \r
+                                                               transaction fee.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">24</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">File \r
+                                                               update not supported</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">File \r
+                                                               update not supported.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">25</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Unable \r
+                                                               to locate record</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Unable \r
+                                                               to locate record.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">26</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Duplicate \r
+                                                               record</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Duplicate \r
+                                                               record.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">27</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">File \r
+                                                               update edit error</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">File \r
+                                                               update edit error.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">28</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">File \r
+                                                               update file locked</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">File \r
+                                                               update file locked.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">\r
+                                               29</td>\r
+                                       <td valign="top" width="259">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">30</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Format \r
+                                                               error, call ECHO</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               host reported that the transaction was not formatted properly.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">31</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Bank \r
+                                                               not supported</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Bank \r
+                                                               not supported by switch.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">32</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Completed \r
+                                                               partially</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Completed \r
+                                                               partially.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">33</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Expired \r
+                                                               card, pick-up</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               card is expired.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Merchant may \r
+                                                               receive reward money by capturing the card.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">34</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Issuer \r
+                                                               suspects fraud, pick-up card</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               card issuer suspects fraud.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Merchant \r
+                                                               may receive reward money by capturing the card.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">35</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Contact \r
+                                                               acquirer, pick-up</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Contact \r
+                                                               card issuer.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Merchant may receive \r
+                                                               reward money by capturing the card.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">36</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Restricted \r
+                                                               card, pick-up</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               card is restricted by the issuer.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Merchant \r
+                                                               may receive reward money by capturing the card.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">37</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Call \r
+                                                               ECHO security, pick-up</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Contact \r
+                                                               ECHO security.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Merchant may \r
+                                                               receive reward money by capturing the card.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">38</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">PIN \r
+                                                               tries exceeded, pick-up</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">PIN \r
+                                                               attempts exceed issuer limits.<SPAN style="mso-spacerun: yes">&nbsp; </SPAN>Merchant \r
+                                                               may receive reward money by capturing the card.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">39</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">No \r
+                                                               credit account</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">No \r
+                                                               credit account.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">\r
+                                               40</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Function \r
+                                                               not supported</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Requested \r
+                                                               function not supported.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">41</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Lost \r
+                                                               Card, capture for reward</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               card has been reported lost.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">42</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">No \r
+                                                               universal account</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">No \r
+                                                               universal account.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">43</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Stolen \r
+                                                               Card, capture for reward</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               card has been reported stolen.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">44</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">No \r
+                                                               investment account</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">No \r
+                                                               investment account.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">45 - 50</td>\r
+                                       <td valign="top" width="259">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">51</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Not \r
+                                                               sufficient funds</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               credit limit for this account has been exceeded.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">52 - 53</td>\r
+                                       <td valign="top" width="259">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">54</td>\r
+                                       <td valign="top" width="259">Expired card</td>\r
+                                       <td valign="top">The card is expired.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">55</td>\r
+                                       <td valign="top" width="259">Incorrect PIN</td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               cardholder PIN is incorrect.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">56</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">No \r
+                                                               card record</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">No \r
+                                                               card record.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">57</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Transaction \r
+                                                               not permitted to cardholder</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               card is not allowed the type of transaction requested.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">58</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Transaction \r
+                                                               not permitted on terminal</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               Merchant is not allowed this type of transaction.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">59</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Suspected \r
+                                                               fraud</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Suspected \r
+                                                               fraud.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">\r
+                                               60</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Contact \r
+                                                               ECHO</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Contact \r
+                                                               ECHO.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">61</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Exceeds \r
+                                                               withdrawal limit</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               amount exceeds the allowed daily maximum.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">62</td>\r
+                                       <td valign="top" width="259">Restricted card</td>\r
+                                       <td valign="top">The card has been restricted.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">63</td>\r
+                                       <td valign="top" width="259">Security violation.</td>\r
+                                       <td valign="top">The card has been restricted.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">64</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Original \r
+                                                               amount incorrect</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Original \r
+                                                               amount incorrect.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">65</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Exceeds \r
+                                                               withdrawal frequency</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               allowable number of daily transactions has been exceeded.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">66</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Call \r
+                                                               acquirer security, call ECHO</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Call \r
+                                                               acquirer security, call ECHO.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">\r
+                                               67</td>\r
+                                       <td valign="top" width="259">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">68</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Response \r
+                                                               received too late</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Response \r
+                                                               received too late.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">69 - 74</TD>\r
+                                       <TD vAlign="top" width="259">not used</TD>\r
+                                       <TD vAlign="top">&nbsp;</TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">75</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">PIN \r
+                                                               tries exceeded</FONT></SPAN></td>\r
+                                       <td valign="top">The allowed number of PIN retries has been exceeded.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">76</td>\r
+                                       <td valign="top" width="259">Invalid "to" account</td>\r
+                                       <td valign="top">The debit account does not exist.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">77</td>\r
+                                       <td valign="top" width="259">Invalid "from" account</td>\r
+                                       <td valign="top">The credit account does not exist.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">78</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Invalid \r
+                                                               account specified (general)</FONT></SPAN></td>\r
+                                       <td valign="top">\r
+                                               The associated card number account is invalid or does not exist.</td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">79</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Already \r
+                                                               reversed</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Already \r
+                                                               reversed.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">80&nbsp;- 83</td>\r
+                                       <td valign="top" width="259">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">84</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Invalid \r
+                                                               authorization life cycle</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">The \r
+                                                               authorization life cycle is invalid.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">85&nbsp;</td>\r
+                                       <td valign="top" width="259">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">86</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Cannot \r
+                                                               verify PIN</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Cannot \r
+                                                               verify PIN.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">87</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Network \r
+                                                               Unavailable</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Network \r
+                                                               Unavailable.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">88</TD>\r
+                                       <TD vAlign="top" width="259">not used</TD>\r
+                                       <TD vAlign="top">&nbsp;</TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">89</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Ineligible \r
+                                                               to receive financial position information</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Ineligible \r
+                                                               to receive financial position information.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">90</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Cut-off \r
+                                                               in progress</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Cut-off \r
+                                                               in progress.</FONT></SPAN></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">91</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Issuer \r
+                                                               or switch inoperative</FONT></SPAN></td>\r
+                                       <td valign="top">The bank is not available to authorize this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">92</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Routing \r
+                                                               error</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT size="3"><FONT face="Times New Roman">The \r
+                                                                       transaction cannot be routed to the authorizing agency.</FONT></FONT>\r
+                                               </SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">93</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Violation \r
+                                                               of law</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Violation \r
+                                                               of law.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">94</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Duplicate \r
+                                                               transaction</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Duplicate \r
+                                                               transaction.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">95</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Reconcile \r
+                                                               error</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Reconcile \r
+                                                               error.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">96</td>\r
+                                       <td valign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">System \r
+                                                               malfunction</FONT></SPAN></td>\r
+                                       <td valign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">A \r
+                                                               system error has occurred.</FONT></SPAN></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">97</TD>\r
+                                       <TD vAlign="top" width="259">not used</TD>\r
+                                       <TD vAlign="top">&nbsp;</TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">98</TD>\r
+                                       <TD vAlign="top" width="259"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Exceeds \r
+                                                               cash limit</FONT></SPAN></TD>\r
+                                       <TD vAlign="top"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><FONT face="Times New Roman" size="3">Exceeds \r
+                                                               cash limit.</FONT></SPAN></TD>\r
+                               </TR>\r
+                       </table>\r
+               </center>\r
+               <p>\r
+                       Error codes are defined in the following table.</p>\r
+               <center>\r
+                       <table border="1" cellpadding="3" cellspacing="0" width="80%">\r
+                               <tr bgcolor="#e0e0e0">\r
+                                       <td valign="top"><b>Error<br>\r
+                                                       Code</b></td>\r
+                                       <td valign="top"><b>Short<br>\r
+                                                       Description</b></td>\r
+                                       <td valign="top"><b><br>\r
+                                                       Explanation</b></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1000</td>\r
+                                       <td valign="top">Unrecoverable error.</td>\r
+                                       <td valign="top">An unrecoverable error has occurred in the <b><i><font face="Verdana,Arial,Helvetica" size="-1">\r
+                                                                       ECHO<font size="-2">NLINE</font></font></i></b> processing.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1001</td>\r
+                                       <td valign="top">Account closed</td>\r
+                                       <td valign="top">The merchant account has been closed.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1002</td>\r
+                                       <td valign="top">System closed</td>\r
+                                       <td valign="top">\r
+                                               Services for this system are not available.<br>\r
+                                               (Not used by <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO<font size="-2">NLINE</font></font></i></b>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1003</td>\r
+                                       <td valign="top">E-Mail Down</td>\r
+                                       <td valign="top">The e-mail function is not available.<br>\r
+                                               (Not used by <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO<font size="-2">NLINE</font></font></i></b>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1004-1011</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1012</td>\r
+                                       <td valign="top">Invalid trans code</td>\r
+                                       <td valign="top">The host computer received an invalid transaction code.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1013</td>\r
+                                       <td valign="top">Invalid term id</td>\r
+                                       <td valign="top">The ECHO-ID is invalid.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1014</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1015</td>\r
+                                       <td valign="top">Invalid card number</td>\r
+                                       <td valign="top">The credit card number that was sent to the host computer was \r
+                                               invalid</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1016</td>\r
+                                       <td valign="top">Invalid expiry date</td>\r
+                                       <td valign="top">The card has expired or the expiration date was invalid.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1017</td>\r
+                                       <td valign="top">Invalid amount</td>\r
+                                       <td valign="top">The dollar amount was less than 1.00 or greater than the maximum \r
+                                               allowed for this card.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1018</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1019</td>\r
+                                       <td valign="top">Invalid state</td>\r
+                                       <td valign="top">The state code was invalid.<br>\r
+                                               (Not used by <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO<font size="-2">NLINE</font></font></i></b>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1020</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1021</td>\r
+                                       <td valign="top">Invalid service</td>\r
+                                       <td valign="top">The merchant or card holder is not allowed to perform that kind of \r
+                                               transaction</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1022-1023</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1024</td>\r
+                                       <td valign="top">Invalid auth code</td>\r
+                                       <td valign="top">The authorization number presented with this transaction is \r
+                                               incorrect. (deposit transactions only)</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1025</td>\r
+                                       <td valign="top">Invalid reference number</td>\r
+                                       <td valign="top">The reference number presented with this transaction is incorrect \r
+                                               or is not numeric.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1026-1028</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1029</td>\r
+                                       <td valign="top">Invalid contract number</td>\r
+                                       <td valign="top">The contract number presented with this transaction is incorrect \r
+                                               or is not numeric.<br>\r
+                                               (Not used by <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO<font size="-2">NLINE</font></font></i></b>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1030</td>\r
+                                       <td valign="top">Invalid inventory data</td>\r
+                                       <td valign="top">The inventory data presented with this transaction is not ASCII \r
+                                               "printable".<br>\r
+                                               (Not used by <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO<font size="-2">NLINE</font></font></i></b>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1031-1500</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td colspan="3">\r
+                                               <i>Error Codes 1501 through 1599 are generated by <b><i><font face="Verdana,Arial,Helvetica" size="-1">\r
+                                                                               ECHO<font size="-2">NLINE</font></font></i></b> after validating \r
+                                                       the merchant but before presenting the transaction to the host computers for \r
+                                                       processing.</i>\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1501-1507</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1508</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                                       <td valign="top">Invalid or missing order_type.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1509</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                                       <td valign="top">The merchant is not approved to submit this order_type.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1510</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                                       <td valign="top">The merchant is not approved to submit this transaction_type.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1511</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                                       <td valign="top">\r
+                                               Duplicate transaction attempt (see <a href="ISPGuide-Interface.asp#counter">counter</a>\r
+                                               in Part I of this Specification</EM>).\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1512-1598</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1599</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                                       <td valign="top">An system error occurred while validating the transaction input.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1600-1800</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td colspan="3">\r
+                                               <i>Error Codes 1801 through 1814 are generated by <b><i><font face="Verdana,Arial,Helvetica" size="-1">\r
+                                                                               ECHO<font size="-2">NLINE</font></font></i></b> to indicate \r
+                                                       responses to <a href="ISPGuide-Response.asp#AVSOnly">AVS-Only transactions</a> when \r
+                                                       the response is anything but "X" or "Y" (all digits match).</i>\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1801</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "A"</a></td>\r
+                                       <td>Address matches; ZIP does not match.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1802</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "W"</a></td>\r
+                                       <td>9-digit ZIP matches; Address does not match.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1803</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "Z"</a></td>\r
+                                       <td>5-digit ZIP matches; Address does not match.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1804</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Codes "U"</a></td>\r
+                                       <td>Issuer unavailable; cannot verify.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1805</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "R"</a></td>\r
+                                       <td>Retry; system is currently unable to process.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1806</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "S" or "G"</a></td>\r
+                                       <td>Issuer does not support AVS.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1807</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "N"</a></td>\r
+                                       <td>Nothing matches.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1808</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "E"</a></td>\r
+                                       <td>Invalid AVS only response.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1809</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "B"</a></td>\r
+                                       <td>Street address match. Postal code not verified because of incompatible formats.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1810</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "C"</a></td>\r
+                                       <td>Street address and Postal code not verified because of incompatible formats.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1811</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "D"</a></td>\r
+                                       <td>Street address match and Postal code match.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1812</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "I"</a></td>\r
+                                       <td>Address information not verified for international transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1813</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "M"</a></td>\r
+                                       <td>Street address match and Postal code match.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1814</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "P"</a></td>\r
+                                       <td>Postal code match. Street address not verified because of incompatible formats.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1815-1896</td>\r
+                                       <td>not used</td>\r
+                                       <td>&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1897</td>\r
+                                       <td valign="top">invalid response</td>\r
+                                       <td valign="top">The host returned an invalid response.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1898</td>\r
+                                       <td valign="top">disconnect</td>\r
+                                       <td valign="top">The host unexpectedly disconnected.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1899</td>\r
+                                       <td valign="top">timeout</td>\r
+                                       <td valign="top">Timeout waiting for host response.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1900-2070</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2071</td>\r
+                                       <td valign="top">Call VISA</td>\r
+                                       <td valign="top">An authorization number from the VISA Voice Center is required to \r
+                                               approve this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2072</td>\r
+                                       <td valign="top">Call Master Card</td>\r
+                                       <td valign="top">An authorization number from the Master Card Voice Center is \r
+                                               required to approve this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2073</td>\r
+                                       <td valign="top">Call Carte Blanche</td>\r
+                                       <td valign="top">An authorization number from the Carte Blanche Voice Center is \r
+                                               required to approve this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2074</td>\r
+                                       <td valign="top">Call Diners Club</td>\r
+                                       <td valign="top">An authorization number from the Diners' Club Voice Center is \r
+                                               required to approve this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2075</td>\r
+                                       <td valign="top">Call AMEX</td>\r
+                                       <td valign="top">An authorization number from the American Express Voice Center is \r
+                                               required to approve this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2076</td>\r
+                                       <td valign="top">Call Discover</td>\r
+                                       <td valign="top">An authorization number from the Discover Voice Center is required \r
+                                               to approve this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2077</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2078</td>\r
+                                       <td valign="top">Call ECHO</td>\r
+                                       <td valign="top">The merchant must call <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO</font></i></b>\r
+                                               Customer Support for approval.or because there is a problem with the merchant's \r
+                                               account.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>2079</td>\r
+                                       <td>Call XpresscheX</td>\r
+                                       <td>The merchant must call <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO</font></i></b>\r
+                                               Customer Support for approval.or because there is a problem with the merchant's \r
+                                               account.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td colspan="3">\r
+                                               <i>The remaining error codes are generated by the <b><i><font face="Verdana,Arial,Helvetica" size="-1">\r
+                                                                               ECHO</font></i></b> host computers in response to errors in the \r
+                                                       dial-up protocol. These messages should never appear in <b><i><font face="Verdana,Arial,Helvetica" size="-1">\r
+                                                                               ECHO<font size="-2">NLINE</font></font></i></b>. They are listed \r
+                                                       below for completeness. </i>\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3001</td>\r
+                                       <td>No ACK on Resp</td>\r
+                                       <td>The host did not receive an ACK from the terminal after sending the transaction \r
+                                               response.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3002</td>\r
+                                       <td>POS NAK'd 3 Times</td>\r
+                                       <td>The host disconnected after the terminal replied 3 times to the host response \r
+                                               with a NAK.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3003</td>\r
+                                       <td>Drop on Wait</td>\r
+                                       <td>The line dropped before the host could send a response to the terminal.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3005</td>\r
+                                       <td>Drop on Resp</td>\r
+                                       <td>The line dropped while the host was sending the response to the terminal.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3007</td>\r
+                                       <td>Drop Before EOT</td>\r
+                                       <td>The host received an ACK from the terminal but the line dropped before the host \r
+                                               could send the EOT.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3011</td>\r
+                                       <td>No Resp to ENQ</td>\r
+                                       <td>The line was up and carrier detected, but the terminal did not respond to the \r
+                                               ENQ.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3012</td>\r
+                                       <td>Drop on Input</td>\r
+                                       <td>The line disconnected while the host was receiving data from the terminal.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3013</td>\r
+                                       <td>FEP NAK'd 3 Times</td>\r
+                                       <td>The host disconnected after receiving 3 transmissions with incorrect LRC from \r
+                                               the terminal.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3014</td>\r
+                                       <td>No Resp to ENQ</td>\r
+                                       <td>The line disconnected during input data wait in Multi-Trans Mode.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3015</td>\r
+                                       <td>Drop on Input</td>\r
+                                       <td>The host encountered a full queue and discarded the input data.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>9000-9999</td>\r
+                                       <td>Host Error</td>\r
+                                       <td>The host encountered an internal error and was not able to process the \r
+                                               transaction.</td>\r
+                               </tr>\r
+                       </table>\r
+               </center>\r
+               <h2>Electronic Check Transactions</h2>\r
+               <FONT face="Verdana,Arial,Helvetica" size="-1"><B><I>ECHO</I></B></FONT> verifies \r
+               all electronic checks against the National Check Information Systems (NCIS) \r
+               database. This is a real-time check verification system that can return a wide \r
+               variety of responses and conditions. <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO<font size="-2">NLINE</font></font></i></b>\r
+               does nor recognize a warning response, only approvals and declines. Therefore, \r
+               warnings received from NCIS are treated as declines by <b><i><font face="Verdana,Arial,Helvetica" size="-1">\r
+                                       ECHO<font size="-2">NLINE</font></font></i></b>.\r
+               <p>\r
+               Decline responses are formatted as shown below. Each message is 16 characters \r
+               long and contains information regarding the reasons for the decline or warning \r
+               and the name and contact number for the agency providing the information \r
+               leading to the decline.\r
+               <p>\r
+                       The NCN Response Format.pdf document located in the <A href="/XCXPlusTrans.zip"><I><FONT face="Verdana,Arial,Helvetica" size="-1">\r
+                                               X<FONT size="-2">PRESS</FONT>C<FONT size="-2">HE</FONT>X<FONT size="-2">PLUS</FONT></FONT></I>\r
+                               Transaction Validation Tool</A>\r
+               contains all Check Verification Responses.\r
+               <p>\r
+                       <center>\r
+                               <table border="1" cellpadding="3" cellspacing="0" width="80%">\r
+                                       <tr bgcolor="#e0e0e0">\r
+                                               <td valign="top"><b>Field</b></td>\r
+                                               <td valign="top"><b>Size</b></td>\r
+                                               <td valign="top"><b>Description</b></td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">tag</td>\r
+                                               <td valign="top">11</td>\r
+                                               <td valign="top">"&lt;ECHOTYPE1&gt;"</td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">message</td>\r
+                                               <td valign="top">16</td>\r
+                                               <td valign="top">\r
+                                                       Decline message (see examples below).\r
+                                               </td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">message</td>\r
+                                               <td valign="top">16</td>\r
+                                               <td valign="top">\r
+                                                       from 0 to <i>n</i> instances of additional decline and warning messages.\r
+                                               </td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td valign="top">tag</td>\r
+                                               <td valign="top">12</td>\r
+                                               <td valign="top">"&lt;/ECHOTYPE1&gt;"</td>\r
+                                       </tr>\r
+                               </table>\r
+                       </center>\r
+               <p>\r
+                       <b>Examples:</b><br>\r
+                       The first example shows a decline response containing 7 separate \r
+                       messages.&lt;p&gt;&lt;code&gt;&lt;!--&lt;ECHOTYPE1&gt;DECLINE·CHECK···50·UNPAIDS·(ALL)UNPAID·AMT=·3778PHN·800-555-4503···CHKACHEK·····PHN·800-555-2954····XPCK!·······&lt;/ECHOTYPE1&gt;--&gt;&lt;br&gt;&lt;!--&lt;ECHOTYPE1&gt;WARNING·········DAYLOC/NCHCKS=14DAYLOC/AMT=45···WINLOC/AMT=12···&lt;/ECHOTYPE1&gt; \r
+                       --&gt;<BR>\r
+                       &lt;!-- &lt;ECHOTYPE1&gt;ERROR IN ID·····&lt;/ECHOTYPE1&gt; --&gt;<BR>\r
+                       &lt;!-- \r
+                       &lt;ECHOTYPE1&gt;DECLINE·CHECK····2·UNPAIDS·(LOC)UNPAID·AMT=··376BANK·STOP·······PHN \r
+                       800-555-4503SUPER·COLLECT···&lt;/ECHOTYPE1&gt; --&gt;<BR>\r
+               &lt;!-- &lt;ECHOTYPE1&gt;RE-PRESENTED CHK&lt;/ECHOTYPE1&gt; --&gt; </CODE>\r
+               <p>\r
+                       <b>Note:</b><br>\r
+               All Electronic Check Declines return a Decline Code of "0005" in the ECHOTYPE3 \r
+               &lt;decline_code&gt; tag (i.e., &lt;decline_code&gt;0005&lt;/decline_code&gt; \r
+               ). To determine the exact reason for the decline, the ECHOTYPE1 response must \r
+               be examined.\r
+               <p>\r
+                       <hr size="3" color="#000080">\r
+               \r
+<SCRIPT LANGUAGE=JAVASCRIPT>\r
+/* Opens a new Window linking to the supplied url */\r
+function popUp(url){\r
+sealWin=window.open(url,"win",'toolbar=0,location=0,directories=0,status=1,menubar=0,scrollbars=1,resizable=1,width=500,height=520');\r
+self.name = "mainWin"; }\r
+</SCRIPT>\r
+\r
+<center>\r
+<font size="-2" face="Verdana,Arial,Helvetica">\r
+\r
+<a href="/">Merchant Center</a>&nbsp;\r
+<a href="http://www.echo-inc.com/">ECHO Home</a>&nbsp;\r
+<a href="mailto:webmaster@echo-inc.com">Feedback</a>&nbsp;\r
+<a href="http://www.echo-inc.com/helpdesk.html">Contact ECHO</a>&nbsp;\r
+<a href="javascript:popUp('/copyright.asp')">Copyright</a>&nbsp;\r
+\r
+\r
+   <a href="/login.asp">Login</a>\r
+\r
+\r
+</font>\r
+</center>\r
+\r
+</body>\r
+</html>\r
+</body>\r
+</HTML>\r
diff --git a/generror/errortable.html b/generror/errortable.html
new file mode 100644 (file)
index 0000000..b225355
--- /dev/null
@@ -0,0 +1,961 @@
+                               <tr>\r
+                                       <td valign="top">01</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Refer \r
+                                                               to card issuer</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               merchant must call the issuer before the transaction can be approved.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">02</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Refer \r
+                                                               to card issuer, special condition</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               merchant must call the issuer before the transaction can be approved.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">03</td>\r
+                                       <td valign="top" width="259">Invalid merchant number</td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               merchant ID is not valid.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">04</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Pick-up \r
+                                                               card. Capture for reward</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               card is listed on the Warning Bulletin.&nbsp; Merchant \r
+                                                               may receive reward money by capturing the card.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">05</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Do \r
+                                                               not honor. The transaction was declined by the issuer without definition or \r
+                                                               reason</FONT></td>\r
+                                       <td valign="top">The \r
+                                                                       transaction was declined without explanation by the card issuer.</FONT>\r
+                                               </td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">06</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Error</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               card issuer returned an error without further explanation.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">07</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Pick-up \r
+                                                               card, special condition</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               card is listed on the Warning Bulletin.&nbsp; Merchant \r
+                                                               may receive reward money by capturing the card.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">08</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Honor \r
+                                                               with identification</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Honor \r
+                                                               with identification.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">09</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Request \r
+                                                               in progress</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Request \r
+                                                               in progress.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">10</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Approved \r
+                                                               for partial amount</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Approved \r
+                                                               for partial amount.</FONT></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">\r
+                                               11</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Approved, \r
+                                                               VIP</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3"><FONT face="Times New Roman" size="3">Approved, \r
+                                                                                       VIP program.</FONT>\r
+                                                               </FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">12</td>\r
+                                       <td valign="top" width="259">Invalid transaction</td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               requested transaction is not supported or is not valid for the card number \r
+                                                               presented.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">13</td>\r
+                                       <td valign="top" width="259">Invalid amount</td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               amount exceeds the limits established by the issuer for this type of \r
+                                                               transaction.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">14</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Invalid \r
+                                                               card #</FONT></td>\r
+                                       <td valign="top">The issuer indicates that this card is not valid.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">15</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">No \r
+                                                               such issuer</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               card issuer number is not valid.</FONT></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">16</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Approved, \r
+                                                               update track 3</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Approved, \r
+                                                               update track 3.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">17</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Customer \r
+                                                               cancellation</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Customer \r
+                                                               cancellation.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">18</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Customer \r
+                                                               dispute</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Customer \r
+                                                               dispute.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">19</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Re \r
+                                                               enter transaction</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Customer \r
+                                                               should resubmit transaction.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">20</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Invalid \r
+                                                               response</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Invalid \r
+                                                               response.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">21</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">No \r
+                                                               action taken</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">No \r
+                                                               action taken. The issuer declined with no other explanation.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">22</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Suspected \r
+                                                               malfunction</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Suspected \r
+                                                               malfunction.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">23</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Unacceptable \r
+                                                               transaction fee</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Unacceptable \r
+                                                               transaction fee.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">24</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">File \r
+                                                               update not supported</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">File \r
+                                                               update not supported.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">25</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Unable \r
+                                                               to locate record</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Unable \r
+                                                               to locate record.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">26</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Duplicate \r
+                                                               record</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Duplicate \r
+                                                               record.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">27</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">File \r
+                                                               update edit error</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">File \r
+                                                               update edit error.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">28</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">File \r
+                                                               update file locked</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">File \r
+                                                               update file locked.</FONT></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">\r
+                                               29</td>\r
+                                       <td valign="top" width="259">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">30</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Format \r
+                                                               error, call ECHO</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               host reported that the transaction was not formatted properly.</FONT></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">31</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Bank \r
+                                                               not supported</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Bank \r
+                                                               not supported by switch.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">32</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Completed \r
+                                                               partially</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Completed \r
+                                                               partially.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">33</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Expired \r
+                                                               card, pick-up</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               card is expired.&nbsp; Merchant may \r
+                                                               receive reward money by capturing the card.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">34</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Issuer \r
+                                                               suspects fraud, pick-up card</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               card issuer suspects fraud.&nbsp; Merchant \r
+                                                               may receive reward money by capturing the card.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">35</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Contact \r
+                                                               acquirer, pick-up</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Contact \r
+                                                               card issuer.&nbsp; Merchant may receive \r
+                                                               reward money by capturing the card.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">36</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Restricted \r
+                                                               card, pick-up</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               card is restricted by the issuer.&nbsp; Merchant \r
+                                                               may receive reward money by capturing the card.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">37</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Call \r
+                                                               ECHO security, pick-up</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Contact \r
+                                                               ECHO security.&nbsp; Merchant may \r
+                                                               receive reward money by capturing the card.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">38</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">PIN \r
+                                                               tries exceeded, pick-up</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">PIN \r
+                                                               attempts exceed issuer limits.&nbsp; Merchant \r
+                                                               may receive reward money by capturing the card.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">39</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">No \r
+                                                               credit account</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">No \r
+                                                               credit account.</FONT></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">\r
+                                               40</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Function \r
+                                                               not supported</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">Requested \r
+                                                               function not supported.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">41</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Lost \r
+                                                               Card, capture for reward</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               card has been reported lost.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">42</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">No \r
+                                                               universal account</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">No \r
+                                                               universal account.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">43</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Stolen \r
+                                                               Card, capture for reward</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               card has been reported stolen.</FONT></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">44</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">No \r
+                                                               investment account</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">No \r
+                                                               investment account.</FONT></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">45 - 50</td>\r
+                                       <td valign="top" width="259">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">51</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Not \r
+                                                               sufficient funds</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               credit limit for this account has been exceeded.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">52 - 53</td>\r
+                                       <td valign="top" width="259">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">54</td>\r
+                                       <td valign="top" width="259">Expired card</td>\r
+                                       <td valign="top">The card is expired.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">55</td>\r
+                                       <td valign="top" width="259">Incorrect PIN</td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               cardholder PIN is incorrect.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">56</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">No \r
+                                                               card record</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">No \r
+                                                               card record.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">57</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Transaction \r
+                                                               not permitted to cardholder</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               card is not allowed the type of transaction requested.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">58</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Transaction \r
+                                                               not permitted on terminal</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               Merchant is not allowed this type of transaction.</FONT></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">59</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Suspected \r
+                                                               fraud</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Suspected \r
+                                                               fraud.</FONT></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">\r
+                                               60</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Contact \r
+                                                               ECHO</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">Contact \r
+                                                               ECHO.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">61</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Exceeds \r
+                                                               withdrawal limit</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               amount exceeds the allowed daily maximum.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">62</td>\r
+                                       <td valign="top" width="259">Restricted card</td>\r
+                                       <td valign="top">The card has been restricted.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">63</td>\r
+                                       <td valign="top" width="259">Security violation.</td>\r
+                                       <td valign="top">The card has been restricted.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">64</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Original \r
+                                                               amount incorrect</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">Original \r
+                                                               amount incorrect.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">65</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Exceeds \r
+                                                               withdrawal frequency</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               allowable number of daily transactions has been exceeded.</FONT></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">66</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Call \r
+                                                               acquirer security, call ECHO</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Call \r
+                                                               acquirer security, call ECHO.</FONT></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">\r
+                                               67</td>\r
+                                       <td valign="top" width="259">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">68</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Response \r
+                                                               received too late</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Response \r
+                                                               received too late.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">69 - 74</TD>\r
+                                       <TD vAlign="top" width="259">not used</TD>\r
+                                       <TD vAlign="top">&nbsp;</TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">75</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">PIN \r
+                                                               tries exceeded</FONT></td>\r
+                                       <td valign="top">The allowed number of PIN retries has been exceeded.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">76</td>\r
+                                       <td valign="top" width="259">Invalid "to" account</td>\r
+                                       <td valign="top">The debit account does not exist.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">77</td>\r
+                                       <td valign="top" width="259">Invalid "from" account</td>\r
+                                       <td valign="top">The credit account does not exist.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">78</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Invalid \r
+                                                               account specified (general)</FONT></td>\r
+                                       <td valign="top">\r
+                                               The associated card number account is invalid or does not exist.</td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">79</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Already \r
+                                                               reversed</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Already \r
+                                                               reversed.</FONT></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">80&nbsp;- 83</td>\r
+                                       <td valign="top" width="259">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">84</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Invalid \r
+                                                               authorization life cycle</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">The \r
+                                                               authorization life cycle is invalid.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">85&nbsp;</td>\r
+                                       <td valign="top" width="259">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">86</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Cannot \r
+                                                               verify PIN</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Cannot \r
+                                                               verify PIN.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">87</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Network \r
+                                                               Unavailable</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Network \r
+                                                               Unavailable.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">88</TD>\r
+                                       <TD vAlign="top" width="259">not used</TD>\r
+                                       <TD vAlign="top">&nbsp;</TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">89</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Ineligible \r
+                                                               to receive financial position information</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Ineligible \r
+                                                               to receive financial position information.</FONT></TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">90</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Cut-off \r
+                                                               in progress</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Cut-off \r
+                                                               in progress.</FONT></TD>\r
+                               </TR>\r
+                               <tr>\r
+                                       <td valign="top">91</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Issuer \r
+                                                               or switch inoperative</FONT></td>\r
+                                       <td valign="top">The bank is not available to authorize this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">92</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Routing \r
+                                                               error</FONT></td>\r
+                                       <td valign="top"><FONT size="3"><FONT face="Times New Roman">The \r
+                                                                       transaction cannot be routed to the authorizing agency.</FONT></FONT>\r
+                                               </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">93</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Violation \r
+                                                               of law</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">Violation \r
+                                                               of law.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">94</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Duplicate \r
+                                                               transaction</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">Duplicate \r
+                                                               transaction.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">95</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">Reconcile \r
+                                                               error</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">Reconcile \r
+                                                               error.</FONT></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">96</td>\r
+                                       <td valign="top" width="259"><FONT face="Times New Roman" size="3">System \r
+                                                               malfunction</FONT></td>\r
+                                       <td valign="top"><FONT face="Times New Roman" size="3">A \r
+                                                               system error has occurred.</FONT></td>\r
+                               </tr>\r
+                               <TR>\r
+                                       <TD vAlign="top">97</TD>\r
+                                       <TD vAlign="top" width="259">not used</TD>\r
+                                       <TD vAlign="top">&nbsp;</TD>\r
+                               </TR>\r
+                               <TR>\r
+                                       <TD vAlign="top">98</TD>\r
+                                       <TD vAlign="top" width="259"><FONT face="Times New Roman" size="3">Exceeds \r
+                                                               cash limit</FONT></TD>\r
+                                       <TD vAlign="top"><FONT face="Times New Roman" size="3">Exceeds \r
+                                                               cash limit.</FONT></TD>\r
+                               </TR>\r
+\r
+\r
+\r
+                               <tr>\r
+                                       <td valign="top">1000</td>\r
+                                       <td valign="top">Unrecoverable error.</td>\r
+                                       <td valign="top">An unrecoverable error has occurred in the <b><i><font face="Verdana,Arial,Helvetica" size="-1">\r
+                                                                       ECHO<font size="-2">NLINE</font></font></i></b> processing.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1001</td>\r
+                                       <td valign="top">Account closed</td>\r
+                                       <td valign="top">The merchant account has been closed.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1002</td>\r
+                                       <td valign="top">System closed</td>\r
+                                       <td valign="top">\r
+                                               Services for this system are not available.<br>\r
+                                               (Not used by <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO<font size="-2">NLINE</font></font></i></b>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1003</td>\r
+                                       <td valign="top">E-Mail Down</td>\r
+                                       <td valign="top">The e-mail function is not available.<br>\r
+                                               (Not used by <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO<font size="-2">NLINE</font></font></i></b>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1004-1011</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1012</td>\r
+                                       <td valign="top">Invalid trans code</td>\r
+                                       <td valign="top">The host computer received an invalid transaction code.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1013</td>\r
+                                       <td valign="top">Invalid term id</td>\r
+                                       <td valign="top">The ECHO-ID is invalid.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1014</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1015</td>\r
+                                       <td valign="top">Invalid card number</td>\r
+                                       <td valign="top">The credit card number that was sent to the host computer was \r
+                                               invalid</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1016</td>\r
+                                       <td valign="top">Invalid expiry date</td>\r
+                                       <td valign="top">The card has expired or the expiration date was invalid.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1017</td>\r
+                                       <td valign="top">Invalid amount</td>\r
+                                       <td valign="top">The dollar amount was less than 1.00 or greater than the maximum \r
+                                               allowed for this card.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1018</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1019</td>\r
+                                       <td valign="top">Invalid state</td>\r
+                                       <td valign="top">The state code was invalid.<br>\r
+                                               (Not used by <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO<font size="-2">NLINE</font></font></i></b>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1020</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1021</td>\r
+                                       <td valign="top">Invalid service</td>\r
+                                       <td valign="top">The merchant or card holder is not allowed to perform that kind of \r
+                                               transaction</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1022-1023</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1024</td>\r
+                                       <td valign="top">Invalid auth code</td>\r
+                                       <td valign="top">The authorization number presented with this transaction is \r
+                                               incorrect. (deposit transactions only)</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1025</td>\r
+                                       <td valign="top">Invalid reference number</td>\r
+                                       <td valign="top">The reference number presented with this transaction is incorrect \r
+                                               or is not numeric.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1026-1028</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1029</td>\r
+                                       <td valign="top">Invalid contract number</td>\r
+                                       <td valign="top">The contract number presented with this transaction is incorrect \r
+                                               or is not numeric.<br>\r
+                                               (Not used by <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO<font size="-2">NLINE</font></font></i></b>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1030</td>\r
+                                       <td valign="top">Invalid inventory data</td>\r
+                                       <td valign="top">The inventory data presented with this transaction is not ASCII \r
+                                               "printable".<br>\r
+                                               (Not used by <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO<font size="-2">NLINE</font></font></i></b>)\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1031-1500</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+\r
+\r
+                               <tr>\r
+                                       <td valign="top">1501-1507</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1508</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                                       <td valign="top">Invalid or missing order_type.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1509</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                                       <td valign="top">The merchant is not approved to submit this order_type.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1510</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                                       <td valign="top">The merchant is not approved to submit this transaction_type.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1511</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                                       <td valign="top">\r
+                                               Duplicate transaction attempt (see <a href="ISPGuide-Interface.asp#counter">counter</a>\r
+                                               in Part I of this Specification</EM>).\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1512-1598</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1599</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                                       <td valign="top">An system error occurred while validating the transaction input.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1600-1800</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+\r
+                               <tr>\r
+                                       <td>1801</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "A"</a></td>\r
+                                       <td>Address matches; ZIP does not match.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1802</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "W"</a></td>\r
+                                       <td>9-digit ZIP matches; Address does not match.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1803</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "Z"</a></td>\r
+                                       <td>5-digit ZIP matches; Address does not match.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1804</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Codes "U"</a></td>\r
+                                       <td>Issuer unavailable; cannot verify.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1805</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "R"</a></td>\r
+                                       <td>Retry; system is currently unable to process.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1806</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "S" or "G"</a></td>\r
+                                       <td>Issuer does not support AVS.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1807</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "N"</a></td>\r
+                                       <td>Nothing matches.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1808</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "E"</a></td>\r
+                                       <td>Invalid AVS only response.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1809</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "B"</a></td>\r
+                                       <td>Street address match. Postal code not verified because of incompatible formats.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1810</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "C"</a></td>\r
+                                       <td>Street address and Postal code not verified because of incompatible formats.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1811</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "D"</a></td>\r
+                                       <td>Street address match and Postal code match.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1812</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "I"</a></td>\r
+                                       <td>Address information not verified for international transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1813</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "M"</a></td>\r
+                                       <td>Street address match and Postal code match.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1814</td>\r
+                                       <td><a href="ISPGuide-Response.asp#AVSOnly">Return Code "P"</a></td>\r
+                                       <td>Postal code match. Street address not verified because of incompatible formats.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>1815-1896</td>\r
+                                       <td>not used</td>\r
+                                       <td>&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1897</td>\r
+                                       <td valign="top">invalid response</td>\r
+                                       <td valign="top">The host returned an invalid response.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1898</td>\r
+                                       <td valign="top">disconnect</td>\r
+                                       <td valign="top">The host unexpectedly disconnected.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1899</td>\r
+                                       <td valign="top">timeout</td>\r
+                                       <td valign="top">Timeout waiting for host response.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">1900-2070</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2071</td>\r
+                                       <td valign="top">Call VISA</td>\r
+                                       <td valign="top">An authorization number from the VISA Voice Center is required to \r
+                                               approve this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2072</td>\r
+                                       <td valign="top">Call Master Card</td>\r
+                                       <td valign="top">An authorization number from the Master Card Voice Center is \r
+                                               required to approve this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2073</td>\r
+                                       <td valign="top">Call Carte Blanche</td>\r
+                                       <td valign="top">An authorization number from the Carte Blanche Voice Center is \r
+                                               required to approve this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2074</td>\r
+                                       <td valign="top">Call Diners Club</td>\r
+                                       <td valign="top">An authorization number from the Diners' Club Voice Center is \r
+                                               required to approve this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2075</td>\r
+                                       <td valign="top">Call AMEX</td>\r
+                                       <td valign="top">An authorization number from the American Express Voice Center is \r
+                                               required to approve this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2076</td>\r
+                                       <td valign="top">Call Discover</td>\r
+                                       <td valign="top">An authorization number from the Discover Voice Center is required \r
+                                               to approve this transaction.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2077</td>\r
+                                       <td valign="top">not used</td>\r
+                                       <td valign="top">&nbsp;</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td valign="top">2078</td>\r
+                                       <td valign="top">Call ECHO</td>\r
+                                       <td valign="top">The merchant must call <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO</font></i></b>\r
+                                               Customer Support for approval.or because there is a problem with the merchant's \r
+                                               account.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>2079</td>\r
+                                       <td>Call XpresscheX</td>\r
+                                       <td>The merchant must call <b><i><font face="Verdana,Arial,Helvetica" size="-1">ECHO</font></i></b>\r
+                                               Customer Support for approval.or because there is a problem with the merchant's \r
+                                               account.</td>\r
+                               </tr>\r
+\r
+                               <tr>\r
+                                       <td>3001</td>\r
+                                       <td>No ACK on Resp</td>\r
+                                       <td>The host did not receive an ACK from the terminal after sending the transaction \r
+                                               response.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3002</td>\r
+                                       <td>POS NAK'd 3 Times</td>\r
+                                       <td>The host disconnected after the terminal replied 3 times to the host response \r
+                                               with a NAK.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3003</td>\r
+                                       <td>Drop on Wait</td>\r
+                                       <td>The line dropped before the host could send a response to the terminal.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3005</td>\r
+                                       <td>Drop on Resp</td>\r
+                                       <td>The line dropped while the host was sending the response to the terminal.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3007</td>\r
+                                       <td>Drop Before EOT</td>\r
+                                       <td>The host received an ACK from the terminal but the line dropped before the host \r
+                                               could send the EOT.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3011</td>\r
+                                       <td>No Resp to ENQ</td>\r
+                                       <td>The line was up and carrier detected, but the terminal did not respond to the \r
+                                               ENQ.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3012</td>\r
+                                       <td>Drop on Input</td>\r
+                                       <td>The line disconnected while the host was receiving data from the terminal.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3013</td>\r
+                                       <td>FEP NAK'd 3 Times</td>\r
+                                       <td>The host disconnected after receiving 3 transmissions with incorrect LRC from \r
+                                               the terminal.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3014</td>\r
+                                       <td>No Resp to ENQ</td>\r
+                                       <td>The line disconnected during input data wait in Multi-Trans Mode.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>3015</td>\r
+                                       <td>Drop on Input</td>\r
+                                       <td>The host encountered a full queue and discarded the input data.</td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td>9000-9999</td>\r
+                                       <td>Host Error</td>\r
+                                       <td>The host encountered an internal error and was not able to process the \r
+                                               transaction.</td>\r
+                               </tr>\r
diff --git a/generror/errortable2hash.pl b/generror/errortable2hash.pl
new file mode 100755 (executable)
index 0000000..2046f86
--- /dev/null
@@ -0,0 +1,88 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+my($code, $short, $explanation);
+my $mode = 'code';
+
+my $DEBUG = 0;
+
+while (<>) {
+
+  if ( /^\s*<tr>\s*$/i ) {
+    ($code, $short, $explanation) = ('', '', '');
+  } elsif ( /^\s*<td[^>]*>(\d+)(\s|&nbsp;)*<\/td>\s*$/i ) {
+    $code = $1;
+    warn "found code $code" if $DEBUG;
+    $mode = 'short';
+  } elsif ( /^\s*<td[^>]*>(\d+(\s|&nbsp;)*\-\s*\d+)<\/td>\s*$/i ){
+    warn "skipping range $1" if $DEBUG;
+    until ( ($_=<>) =~ /^\s*<\/tr>\s*$/i ) {
+      #nop
+    }
+    next;
+  } elsif ( /^\s*<td[^>]*>(.*)<\/td>\s*$/i ) {
+    warn "found one line data" if $DEBUG;
+    if ( $mode eq 'short' ) {
+      $short = $1;
+      $short =~ s/<\/?FONT[^>]*>//gi;
+      $short =~ s/&nbsp;/ /g;
+      $short =~ s/<\/?a[^>]*>//gi;
+      $mode = 'explanation';
+    } elsif ( $mode eq 'explanation' ) {
+      $explanation = $1;
+      $explanation =~ s/<\/?FONT[^>]*>//gi;
+      $explanation =~ s/&nbsp;/ /g;
+      $mode = 'code';
+    } else {
+      die "found (one-line) data, but in unknown mode $mode";
+    }
+  } elsif ( /^\s*<td[^>]*>(.*)$/i ) {
+    warn "found multi-line data (mode $mode)" if $DEBUG;
+    chop(my $data = $1);
+    #$data =~ s/<\/?FONT[^>]*>//g;
+    until ( ($_=<>) =~ /^\s*(.*)<\/td>/i ) {
+      /^\s*(.*)\s*$/ or die;
+      chop($data .= $1);
+      warn "found intermediate data $1" if $DEBUG;
+    }
+    $_ =~ /^\s*(.*)<\/td>/i;
+    $data .= $1;
+    $data =~ s/<\/?FONT[^>]*>//gi;
+    $data =~ s/&nbsp;/ /g;
+    $data =~ s/<\/?[BI]>//gi;
+    $data =~ s/<\/?BR>/ /gi;
+    $data =~ s/<\/?a[^>]*>//gi;
+    warn "last line $1 ($_)" if $DEBUG;
+    warn "coalesced multi-line data: $data" if $DEBUG;
+    if ( $mode eq 'short' ) {
+      $short = $data;
+      $mode = 'explanation';
+    } elsif ( $mode eq 'explanation' ) {
+      $explanation = $data;
+      $mode = 'code';
+    } elsif ( $mode eq 'code' && $data =~ /^(\d+)$/ ) {
+      $code = $1;
+      warn "found code $code" if $DEBUG;
+      $mode = 'short';
+    } else {
+      die "found (multi-line) data, but in unknown mode $mode or don't know what to do with it: $data";
+    }
+  
+  } elsif ( /^\s*<\/tr>\s*$/i ) {
+    #$short =~ s/<\/?FONT[^>]*>//g;
+    #$explanation =~ s/<\/?FONT[^>]*>//g;
+    #$short =~ s/[\n\r]//;
+    #$explanation =~ s/[\n\r]//;
+
+    $short =~ s/"/\\"/gi;
+    $explanation =~ s/"/\\"/gi;
+    
+    warn "end of row, printing hash element (code $code)" if $DEBUG;
+    print qq!  "$code" => \[ "$short", "$explanation" \],\n!
+      unless $short  =~ /^\s*not\s*used\s*/i;
+    $mode = 'code';
+  }
+
+}
+
diff --git a/pm_to_blib b/pm_to_blib
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/t/bad_card.t b/t/bad_card.t
new file mode 100644 (file)
index 0000000..b2bc0f1
--- /dev/null
@@ -0,0 +1,40 @@
+BEGIN { $| = 1; print "1..1\n"; }
+
+eval "use Net::SSLeay;";
+if ( $@ ) {
+  print "ok 1 # Skipped: Net::SSLeay is not installed\n"; exit;
+}
+
+use Business::OnlinePayment;
+
+my $tx = new Business::OnlinePayment("OpenECHO");
+$tx->content(
+    type           => 'VISA',
+    #login          => '123>4684752',
+    login          => '1234684752',
+    password       => '43400210',
+    action         => 'Normal Authorization',
+    description    => 'Business::OnlinePayment visa test',
+    amount         => '49.95',
+    invoice_number => '100100',
+    customer_id    => 'jsk',
+    first_name     => 'Tofu',
+    last_name      => 'Beast',
+    address        => '123 Anystreet',
+    city           => 'Anywhere',
+    state          => 'UT',
+    zip            => '84058',
+    phone          => '420-543-2199',
+    card_number    => '4007000000027',
+    expiration     => '08/06',
+);
+$tx->test_transaction(1); # test, dont really charge
+$tx->submit();
+
+if($tx->is_success()) {
+    print "not ok 1\n";
+} else {
+    #warn $tx->server_response."\n";
+    #warn $tx->error_message. "\n";
+    print "ok 1\n";
+}
diff --git a/t/bop.t b/t/bop.t
new file mode 100644 (file)
index 0000000..64332c5
--- /dev/null
+++ b/t/bop.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Business::OnlinePayment;
+$loaded = 1;
+print "ok 1\n";
diff --git a/t/capture.t b/t/capture.t
new file mode 100644 (file)
index 0000000..53b2c4a
--- /dev/null
@@ -0,0 +1,63 @@
+BEGIN { $| = 1; print "1..2\n"; }
+
+print "ok 1 # Skipped: no separate auth + capture test yet\n";
+print "ok 2 # Skipped: no separate auth + capture test yet\n";
+exit;
+
+use Business::OnlinePayment;
+
+my $tx = new Business::OnlinePayment("OpenECHO");
+$tx->content(
+    type           => 'VISA',
+    login          => 'testing',# CHANGE THESE TO TEST
+    password       => 'testing',#
+    action         => 'Authorization Only',
+    description    => 'Business::OnlinePayment visa test',
+    amount         => '49.95',
+    invoice_number => '100100',
+    customer_id    => 'jsk',
+    first_name     => 'Tofu',
+    last_name      => 'Beast',
+    address        => '123 Anystreet',
+    city           => 'Anywhere',
+    state          => 'UT',
+    zip            => '84058',
+    card_number    => '4007000000027',
+    expiration     => '08/06',
+);
+$tx->test_transaction(1); # test, dont really charge
+$tx->submit();
+
+unless($tx->is_success()) {
+    print "not ok 1\n";
+    print "not ok 2\n";
+} else {
+    my $order_number = $tx->order_number;
+    warn $order_number;
+    print "ok 1\n";
+
+    my $settle_tx = new Business::OnlinePayment("OpenECHO");
+    $settle_tx->content(
+      type           => 'VISA',
+      login          => 'testing', # CHANGE THESE TO TEST
+      password       => 'testing', #
+      action         => 'Post Authorization',
+      description    => 'Business::OnlinePayment visa test',
+      amount         => '49.95',
+      invoice_number => '100100',
+      order_number   => '111',
+      card_number    => '4007000000027',
+      expiration     => '08/06',
+    );
+
+    $settle_tx->test_transaction(1); # test, dont really charge
+    $settle_tx->submit();
+
+    if($settle_tx->is_success()) {
+        print "ok 2\n";
+    } else {
+        warn $settle_tx->error_message;
+        print "not ok 2\n";
+    }
+
+}
diff --git a/t/check.t b/t/check.t
new file mode 100644 (file)
index 0000000..d64d49c
--- /dev/null
+++ b/t/check.t
@@ -0,0 +1,32 @@
+BEGIN { $| = 1; print "1..1\n"; }
+
+print "ok 1 # Skipped: no ACH test yet\n"; exit;
+
+use Business::OnlinePayment;
+
+# checks are broken it seems
+my $ctx = new Business::OnlinePayment("OpenECHO");
+$ctx->content(
+    type           => 'CHECK',
+    login          => 'testing',
+    password       => 'testing',
+    action         => 'Normal Authorization',
+    amount         => '49.95',
+    invoice_number => '100100',
+    customer_id    => 'jsk',
+    first_name     => 'Tofu',
+    last_name      => 'Beast',
+    account_number => '12345',
+    routing_code   => '123456789',
+    bank_name      => 'First National Test Bank',
+);
+$ctx->test_transaction(1); # test, dont really charge
+$ctx->submit();
+
+print $ctx->is_success()."\n";
+
+if($ctx->is_success()) {
+    print "ok 1\n";
+} else {
+    print "not ok 1 (".$ctx->error_message().")\n";
+}
diff --git a/t/credit_card.t b/t/credit_card.t
new file mode 100644 (file)
index 0000000..f7dfafb
--- /dev/null
@@ -0,0 +1,41 @@
+BEGIN { $| = 1; print "1..1\n"; }
+
+eval "use Net::SSLeay;";
+if ( $@ ) {
+  print "ok 1 # Skipped: Net::SSLeay is not installed\n"; exit;
+}
+
+use Business::OnlinePayment;
+
+my $tx = new Business::OnlinePayment("OpenECHO");
+$tx->content(
+    type           => 'VISA',
+    #login          => '123>4684752',
+    login          => '1234684752',
+    password       => '43400210',
+    action         => 'Normal Authorization',
+    description    => 'Business::OnlinePayment visa test',
+    amount         => '49.95',
+    invoice_number => '100100',
+    customer_id    => 'jsk',
+    first_name     => 'Tofu',
+    last_name      => 'Beast',
+    address        => '123 Anystreet',
+    city           => 'Anywhere',
+    state          => 'UT',
+    zip            => '84058',
+    phone          => '420-543-2199',
+    card_number    => '4005550000000019',
+    expiration     => '08/06',
+);
+$tx->test_transaction(1); # test, dont really charge
+$tx->submit();
+
+if($tx->is_success()) {
+    print "ok 1\n";
+} else {
+    #warn $tx->server_response."\n";
+    warn $tx->error_message. "\n";
+    print "not ok 1\n";
+}
+
diff --git a/t/crypt_bad_card.t b/t/crypt_bad_card.t
new file mode 100644 (file)
index 0000000..24810d2
--- /dev/null
@@ -0,0 +1,45 @@
+BEGIN {
+  $| = 1; print "1..1\n";
+  $Business::OnlinePayment::HTTPS::skip_NetSSLeay=1;
+  $Business::OnlinePayment::HTTPS::skip_NetSSLeay=1;
+}
+
+eval "use Crypt::SSLeay;";
+if ( $@ ) {
+  print "ok 1 # Skipped: Crypt::SSLeay is not installed\n"; exit;
+}
+
+use Business::OnlinePayment;
+
+my $tx = new Business::OnlinePayment("OpenECHO");
+$tx->content(
+    type           => 'VISA',
+    #login          => '123>4684752',
+    login          => '1234684752',
+    password       => '43400210',
+    action         => 'Normal Authorization',
+    description    => 'Business::OnlinePayment visa test',
+    amount         => '49.95',
+    invoice_number => '100100',
+    customer_id    => 'jsk',
+    first_name     => 'Tofu',
+    last_name      => 'Beast',
+    address        => '123 Anystreet',
+    city           => 'Anywhere',
+    state          => 'UT',
+    zip            => '84058',
+    phone          => '420-543-2199',
+    card_number    => '4007000000027',
+    expiration     => '08/06',
+);
+$tx->test_transaction(1); # test, dont really charge
+$tx->submit();
+
+if($tx->is_success()) {
+    print "not ok 1\n";
+} else {
+    #warn $tx->server_response."\n";
+    #warn $tx->error_message. "\n";
+    print "ok 1\n";
+}
+
diff --git a/t/crypt_credit_card.t b/t/crypt_credit_card.t
new file mode 100644 (file)
index 0000000..ca51239
--- /dev/null
@@ -0,0 +1,45 @@
+BEGIN {
+  $| = 1; print "1..1\n";
+  $Business::OnlinePayment::HTTPS::skip_NetSSLeay=1;
+  $Business::OnlinePayment::HTTPS::skip_NetSSLeay=1;
+}
+
+eval "use Crypt::SSLeay;";
+if ( $@ ) {
+  print "ok 1 # Skipped: Crypt::SSLeay is not installed\n"; exit;
+}
+
+use Business::OnlinePayment;
+
+my $tx = new Business::OnlinePayment("OpenECHO");
+$tx->content(
+    type           => 'VISA',
+    #login          => '123>4684752',
+    login          => '1234684752',
+    password       => '43400210',
+    action         => 'Normal Authorization',
+    description    => 'Business::OnlinePayment visa test',
+    amount         => '49.95',
+    invoice_number => '100100',
+    customer_id    => 'jsk',
+    first_name     => 'Tofu',
+    last_name      => 'Beast',
+    address        => '123 Anystreet',
+    city           => 'Anywhere',
+    state          => 'UT',
+    zip            => '84058',
+    phone          => '420-543-2199',
+    card_number    => '4005550000000019',
+    expiration     => '08/06',
+);
+$tx->test_transaction(1); # test, dont really charge
+$tx->submit();
+
+if($tx->is_success()) {
+    print "ok 1\n";
+} else {
+    #warn $tx->server_response."\n";
+    warn $tx->error_message. "\n";
+    print "not ok 1\n";
+}
+
diff --git a/t/crypt_load.t b/t/crypt_load.t
new file mode 100644 (file)
index 0000000..d92b8f3
--- /dev/null
@@ -0,0 +1,13 @@
+BEGIN {
+  $| = 1; print "1..1\n";
+  eval "use Crypt::SSLeay;";
+  if ( $@ ) {
+    print "ok 1 # Skipped: Crypt::SSLeay is not installed\n"; exit;
+  }
+  $Business::OnlinePayment::HTTPS::skip_NetSSLeay=1;
+  $Business::OnlinePayment::HTTPS::skip_NetSSLeay=1;
+}
+END {print "not ok 1\n" unless $loaded;}
+use Business::OnlinePayment::OpenECHO;
+$loaded = 1;
+print "ok 1\n";
diff --git a/t/load.t b/t/load.t
new file mode 100644 (file)
index 0000000..cca662e
--- /dev/null
+++ b/t/load.t
@@ -0,0 +1,12 @@
+BEGIN {
+  $| = 1; print "1..1\n";
+  eval "use Net::SSLeay;";
+  if ( $@ ) {
+    print "ok 1 # Skipped: Net::SSLeay is not installed\n"; exit;
+  }
+
+}
+END {print "not ok 1\n" unless $loaded;}
+use Business::OnlinePayment::OpenECHO;
+$loaded = 1;
+print "ok 1\n";