--- /dev/null
+0.01 Wed Aug 25 23:27:55 2004
+ - original version; created by ivan 1.0
+
--- /dev/null
+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
--- /dev/null
+# 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 <ivan-openecho@420.am></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.
--- /dev/null
+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'},
+);
+
--- /dev/null
+##############################################################################\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
--- /dev/null
+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").
--- /dev/null
+- 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?
--- /dev/null
+##############################################################################\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
--- /dev/null
+<!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">"<ECHOTYPE1>"</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">"</ECHOTYPE1>"</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">"<ECHOTYPE1>"</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">"</ECHOTYPE1>"</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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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 - 83</td>\r
+ <td valign="top" width="259">not used</td>\r
+ <td valign="top"> </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 </td>\r
+ <td valign="top" width="259">not used</td>\r
+ <td valign="top"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </td>\r
+ </tr>\r
+ <tr>\r
+ <td valign="top">1508</td>\r
+ <td valign="top"> </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"> </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"> </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"> </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"> </td>\r
+ </tr>\r
+ <tr>\r
+ <td valign="top">1599</td>\r
+ <td valign="top"> </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"> </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> </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"> </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"> </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">"<ECHOTYPE1>"</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">"</ECHOTYPE1>"</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.<p><code><!--<ECHOTYPE1>DECLINE·CHECK···50·UNPAIDS·(ALL)UNPAID·AMT=·3778PHN·800-555-4503···CHKACHEK·····PHN·800-555-2954····XPCK!·······</ECHOTYPE1>--><br><!--<ECHOTYPE1>WARNING·········DAYLOC/NCHCKS=14DAYLOC/AMT=45···WINLOC/AMT=12···</ECHOTYPE1> \r
+ --><BR>\r
+ <!-- <ECHOTYPE1>ERROR IN ID·····</ECHOTYPE1> --><BR>\r
+ <!-- \r
+ <ECHOTYPE1>DECLINE·CHECK····2·UNPAIDS·(LOC)UNPAID·AMT=··376BANK·STOP·······PHN \r
+ 800-555-4503SUPER·COLLECT···</ECHOTYPE1> --><BR>\r
+ <!-- <ECHOTYPE1>RE-PRESENTED CHK</ECHOTYPE1> --> </CODE>\r
+ <p>\r
+ <b>Note:</b><br>\r
+ All Electronic Check Declines return a Decline Code of "0005" in the ECHOTYPE3 \r
+ <decline_code> tag (i.e., <decline_code>0005</decline_code> \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> \r
+<a href="http://www.echo-inc.com/">ECHO Home</a> \r
+<a href="mailto:webmaster@echo-inc.com">Feedback</a> \r
+<a href="http://www.echo-inc.com/helpdesk.html">Contact ECHO</a> \r
+<a href="javascript:popUp('/copyright.asp')">Copyright</a> \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
--- /dev/null
+ <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. 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. 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"> </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. 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. 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. 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. 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. 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. 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"> </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"> </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"> </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"> </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 - 83</td>\r
+ <td valign="top" width="259">not used</td>\r
+ <td valign="top"> </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 </td>\r
+ <td valign="top" width="259">not used</td>\r
+ <td valign="top"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </td>\r
+ </tr>\r
+ <tr>\r
+ <td valign="top">1508</td>\r
+ <td valign="top"> </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"> </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"> </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"> </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"> </td>\r
+ </tr>\r
+ <tr>\r
+ <td valign="top">1599</td>\r
+ <td valign="top"> </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"> </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> </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"> </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"> </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
--- /dev/null
+#!/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| )*<\/td>\s*$/i ) {
+ $code = $1;
+ warn "found code $code" if $DEBUG;
+ $mode = 'short';
+ } elsif ( /^\s*<td[^>]*>(\d+(\s| )*\-\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/ / /g;
+ $short =~ s/<\/?a[^>]*>//gi;
+ $mode = 'explanation';
+ } elsif ( $mode eq 'explanation' ) {
+ $explanation = $1;
+ $explanation =~ s/<\/?FONT[^>]*>//gi;
+ $explanation =~ s/ / /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/ / /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';
+ }
+
+}
+
--- /dev/null
+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";
+}
--- /dev/null
+BEGIN { $| = 1; print "1..1\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use Business::OnlinePayment;
+$loaded = 1;
+print "ok 1\n";
--- /dev/null
+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";
+ }
+
+}
--- /dev/null
+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";
+}
--- /dev/null
+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";
+}
+
--- /dev/null
+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";
+}
+
--- /dev/null
+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";
+}
+
--- /dev/null
+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";
--- /dev/null
+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";