CheckByNet

Table of Contents

/*
echeck.class, Copyright 2004 John Hogenmiller [email protected]
http://h.hsource.net/
This is an api to interface with ChecksByNet (http://www.checksbynet.com/), provided
by CrossCheck, Inc. This program is in no way (currently) endorsed by Crosscheck, Inc., nor is the author in any way affiliated with CrossCheck, Inc.
Distribution:
This program is released under the GNU Lesser General Public License.
(http://www.opensource.org/licenses/lgpl-license.php)
CONFIGURATION:
Go to the function post_echeck and change the $payto and $paytoid variables
to match what you have with ChecksByNet. Alternatively, you could pass these
in from the parent script. If ChecksByNet ever changes their
submission url, you'll have to change the $url variable.
EXAMPLE:
Note that in a production environment, you wouldn't want to pass $REQUEST in
to the post_echeck function as the end user would be able to change the amount,
payto, and paytoid at will. Ideally, you pull the cbn
variables out of
$REQUEST, do any regex checks you want to do on your side, and directly
set the amount from the server side.
post_echeck works by returning an array with the keys "approved" and "err".
$array['approved'] // If set, echeck was approved.
$array['err'] // Human readable text of all errors.
$array['RSPxxxx'] // Server generated error as key, human readable error as value.
Useful for parent scripts that want to do more with the error.
$ec = new echeck;
$result = $ec->post_echeck($_REQUEST);
if ($result[approved])
{ print "Echeck approved
n"; }
else
{ print "Declined:
n";
print $result[err];
}
VARIABLES:
Put all the variables into an array and pass that array to post_echeck.
Prefix all variables in the array with cbn

Example:
$checkno = 123;
$check['cbn_checknbr'] = $checkno;
$result = $ec->post_echeck($check);
Checksbynet requires the following variables FROM THE CUSTOMER:
Check Number Value: checknbr Needs to be greater than 99 / 6 Max
Customer's First Name: writerfirst 15 Max (only for personal checks)
Customer's Last Name: writerlast 29 Max
Customer's Business Name: writername 50 Max (only for business checks)
Customer's Address: writeraddr Street address required / 50 Max
City: writercity 30 Max
State: writerst 2 characters required
Zip: writerzip 5 digits required
Bank Name: bankname 50 Max
Bank City: bankcity 30 Max
Bank State: bankst 2 characters required
Bank Zip: bankzip 5 digits required or can be blank
MICR: micr 80 Max
Customer's Driver's License: idnbr Do not include dashes or spaces / 40 Max
Driver's License State: idst 2 characters required
Customer's Phone Number: phone 10 digits required / 14 max
Customer's Email: email "@" and "." required / 50 Max
They also require these variables FROM THE MERCHANT:
Check Dollar Amount Value: checkamt Needs to be greater than $1.00/ 10 Max characters
These variables are required by the MERCHANT, but can be set in the post_echeck
function, and do not need to be passed in from the parent program.:
Pay to: payto Who the check is being made out to. 50 Max
Pay to id: paytoid Merchant id number
*/
class echeck
{
function post_echeck($check)
{
$url = 'https://cross.checksbynet.com/response.asp';
if ($check[cbn_payto])
{ $payto = urlencode($check[cbn_payto]); }
else { $payto = urlencode("Valued CrossCheck Merchant"); }
if ($check[cbn_paytoid])
{ $paytoid = urlencode($check[cbn_paytoid]); }
else { $paytoid = "12345"; }
// For initial testing, you may want to NULL out the paytoid
$paytoid = 0;
$params =
"payto=$payto"
. "&checknbr=". urlencode($check['cbn_checknbr'])
. "&checkamt=". urlencode($check['cbn_checkamt'])
. "&writeraddr=". urlencode($check['cbn_writeraddr'])
. "&writercity=". urlencode($check['cbn_writercity'])
. "&writerst=". urlencode($check['cbn_writerst'])
. "&writerzip=". urlencode($check['cbn_writerzip'])
. "&bankname=". urlencode($check['cbn_bankname'])
. "&bankcity=". urlencode($check['cbn_bankcity'])
. "&bankst=". urlencode($check['cbn_bankst'])
. "&micr=". urlencode($check['cbn_micr'])
. "&idnbr=". urlencode($check['cbn_idnbr'])
. "&idst=". urlencode($check['cbn_idst'])
. "&phone=". urlencode($check['cbn_phone'])
. "&email=". urlencode($check['cbn_email']);
if ($check['cbn_bankzip']) { $params .= "&bankzip=". $check['cbn_bankzip']; }
if ($check['cbn_writername']) { $params .= "&writername=". $check['cbn_writername']; }
else { $params .= "&writerfirst=". $check['cbn_writerfirst'] . "&writerlast=". $check['cbn_writerlast']; }
if ($paytoid) { $params .= "&paytoid=". $paytoid; }
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
// curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$return=curl_exec($ch);
curl_close ($ch);
$goodresults = $this->quotesplit($return);
foreach ($goodresults as $key => $value)
{
$result[$value] = "ECHECK: Unknown error"; // All known return codes will replace this.
if ($value == 'RSP0051') { $result[err] .= "ECHECK: Configuration error: invalid payto/paytoid";
$result[$value] .= "ECHECK: Configuration error: invalid payto/paytoid"; }
if ($value == 'RSP1101') { $result[err] .= "ECHECK: Bad/blank check number
n";
$result[$value] = "ECHECK: Bad/blank check number
n"; }
if ($value == 'RSP1102') { $result[err] .= "ECHECK: Bad/blank check dollar amount
n";
$result[$value] = "ECHECK: Bad/blank check dollar amount
n"; }
if ($value == 'RSP1201') { $result[err] .= "ECHECK: Bad/blank entry for customer name
n";
$result[$value] = "ECHECK: Bad/blank entry for customer name
n"; }
if ($value == 'RSP1202') { $result[err] .= "ECHECK: Bad/blank address for customer $check[cbn_writeraddr]
n";
$result[$value] = "ECHECK: Bad/blank address for customer $check[cbn_writeraddr]
n"; }
if ($value == 'RSP1203') { $result[err] .= "ECHECK: Bad/blank city for customer
n";
$result[$value] = "ECHECK: Bad/blank city for customer
n"; }
if ($value == 'RSP1204') { $result[err] .= "ECHECK: Bad/blank state for customer
n";
$result[$value] = "ECHECK: Bad/blank state for customer
n"; }
if ($value == 'RSP1205') { $result[err] .= "ECHECK: Bad/blank zip code for customer
n";
$result[$value] = "ECHECK: Bad/blank zip code for customer
n"; }
if ($value == 'RSP1301') { $result[err] .= "ECHECK: Bad/blank bank name
n";
$result[$value] = "ECHECK: Bad/blank bank name
n"; }
if ($value == 'RSP1302') { $result[err] .= "ECHECK: Bad/blank city for bank
n";
$result[$value] = "ECHECK: Bad/blank city for bank
n"; }
if ($value == 'RSP1303') { $result[err] .= "ECHECK: Bad/blank state for bank
n";
$result[$value] = "ECHECK: Bad/blank state for bank
n"; }
if ($value == 'RSP1304') { $result[err] .= "ECHECK: Bad/blank zip code for bank
n";
$result[$value] = "ECHECK: Bad/blank zip code for bank
n"; }
if ($value == 'RSP1311') { $result[err] .= "ECHECK: Bad/blank account number
n";
$result[$value] = "ECHECK: Bad/blank account number
n"; }
if ($value == 'RSP1312') { $result[err] .= "ECHECK: Bad/blank routing number
n";
$result[$value] = "ECHECK: Bad/blank routing number
n"; }
if ($value == 'RSP1313') { $result[err] .= "ECHECK: Bad/blank micr number
n";
$result[$value] = "ECHECK: Bad/blank micr number
n"; }
if ($value == 'RSP1401') { $result[err] .= "ECHECK: Bad/blank driver's license number
n";
$result[$value] = "ECHECK: Bad/blank driver's license number
n"; }
if ($value == 'RSP1402') { $result[err] .= "ECHECK: Bad/blank state for driver's license
n";
$result[$value] = "ECHECK: Bad/blank state for driver's license
n"; }
if ($value == 'RSP1501') { $result[err] .= "ECHECK: Bad/blank phone number for customer
n";
$result[$value] = "ECHECK: Bad/blank phone number for customer
n"; }
if ($value == 'RSP1502') { $result[err] .= "ECHECK: Bad/blank email address for customer
n";
$result[$value] = "ECHECK: Bad/blank email address for customer
n"; }
if ($value == 'RSP0000') { $result[approved] = 1; $result[err] = 0; }
if ($value == 'RSP0001') { $result[approved] = 0; $result[err] .= "ECHECK: Declined
n";
$result[$value] = "ECHECK: ECHECK: Declined
n"; }
if ($value == 'RSP0020') { $result[err] .= "ECHECK: Check duplication error. We have approved this same check number from the same account in recent history.
n";
$result[$value] = "ECHECK: Check duplication error. We have approved this same check number from the same account in recent history.
n"; }
if ($value == 'RSP9999') { $result[err] .= "ECHECK: Unable to process checks at this time
n";
$result[$value] = "ECHECK: Unable to process checks at this time
n"; }
// Enable the below line for testing
if ($value == 'RSP0010') { $result[approved] = 1; $result[err] = 0;
$result[$value] = "ECHECK: Test completed.";}
}
if (!$result[err] && !$result[approved]) { $result[err] .= "ECHECK: Undefined error, not approved"; }
return($result);
} #end function post_echeck
function quotesplit($s)
{
$r = Array();
$p = 0;
$l = strlen($s);
while ($p < $l) {
while (($p < $l) && (strpos(" rtn",$s[$p]) !== false)) $p++;
if ($s[$p] == '"') {
$p++;
$q = $p;
while (($p < $l) && ($s[$p] != '"')) {
if ($s[$p] == '\') { $p+=2; continue; }
$p++;
}
$r[] = stripslashes(substr($s, $q, $p-$q));
$p++;
while (($p < $l) && (strpos(" rtn",$s[$p]) !== false)) $p++;
$p++;
} else if ($s[$p] == "'") {
$p++;
$q = $p;
while (($p < $l) && ($s[$p] != "'")) {
if ($s[$p] == '\') { $p+=2; continue; }
$p++;
}
$r[] = stripslashes(substr($s, $q, $p-$q));
$p++;
while (($p < $l) && (strpos(" rtn",$s[$p]) !== false)) $p++;
$p++;
} else {
$q = $p;
while (($p < $l) && (strpos(",;",$s[$p]) === false)) {
$p++;
}
$r[] = stripslashes(trim(substr($s, $q, $p-$q)));
while (($p < $l) && (strpos(" rtn",$s[$p]) !== false)) $p++;
$p++;
}
}
return $r;
} # end function quotesplit
} # end class echeck
?>