// DMZS 03-2003
// dmz@dmzs.com
// nasty ugly hack for new user wizard
// Create User Account
// Purchase Selected Account type
// 07-2003 Added paypal instant payment
// 09-2003 Added BofA payment
// EUA & company info from database
// made payment gateway selectable and from database list
// 02-2004 Added bofa in-process-http
// 02-2004 Finished update_cc to save credit card info with pgp for offline processing of renewal
// 09-2004 Changed hourly accounts to be expired in 1 hour, not # of seconds left
// need to confirm CC uses address for confirm
// need to add cc RC4 data password check
// need to add cc error codes....
// need to add state dropdown box
include('admin/include/global.inc');
include('admin/include/functions.inc');
include('admin/adodb/adodb.inc.php');
//$current_url = $_SERVER['PHP_SELF'];
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$db = ADONewConnection('mysql');
$db->debug = false;
$db->Connect($database_host, $database_user, $database_pass, $database_db);
include('admin/include/bofa-inprocess.inc');
if (isset($IOC_response_code)) {
$invoice=$IOC_merchant_order_id;
$query="select * from purchases where invoice='$invoice'";
$dbpurchase = &$db->Execute($query);
$nodemac=$dbpurchase->fields['nodemac'];
$planid=$dbpurchase->fields['planid'];
$expirebycalendar=$dbpurchase->fields['expirebycalendar'];
$timeleft=$dbpurchase->fields['timeleft'];
$totalday=$dbpurchase->fields['totalday'];
$login=$dbpurchase->fields['login'];
$password=$dbpurchase->fields['password'];
$name=$dbpurchase->fields['name'];
$lastname=$dbpurchase->fields['lastname'];
$email=$dbpurchase->fields['email'];
$address=$dbpurchase->fields['address'];
$city=$dbpurchase->fields['city'];
$state=$dbpurchase->fields['state'];
$zip=$dbpurchase->fields['zip'];
$url=$dbpurchase->fields['url'];
$description=$dbpurchase->fields['description'];
$redirect=$dbpurchase->fields['redirect'];
$mac=$dbpurchase->fields['mac'];
$token=$dbpurchase->fields['token'];
$gateway=$dbpurchase->fields['gateway'];
$gatewaymac=$dbpurchase->fields['gatewaymac'];
$timeout=$dbpurchase->fields['timeout'];
}
// Load in all nocat variables
$gateway=fromnodename();
$gatewaymac=fromnodemac();
if (!$mac) { $mac="b0:b0:b0:b0:b0:b0"; }
if (!$token) { $token="OFFLINE"; }
if (!$redirect) { $redirect="OFFLINE"; }
if (!$timeout) { $timeout="OFFLINE"; }
// Set initial variables
if (!$mode) { $mode="newacct"; }
$datetime = date("Y-m-d H:i:s");
if (!$invoice) { $invoice=time(); }
// need to add short name for company for use in this script
$query="select name,url,useragreement from companyinfo";
$dbcompany = &$db->Execute($query);
$iwsp_company = $dbcompany->fields['name'];
$iwsp_url = $dbcompany->fields['url'];
$iwsp_eua = $dbcompany->fields['useragreement'];
function loginok($login) {
global $database_host,$database_user,$database_pass,$database_db;
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$db = ADONewConnection('mysql'); # eg 'mysql' or 'postgres'
$db->debug = false;
$db->Connect($database_host, $database_user, $database_pass, $database_db);
$loginok=1;
$query = "select login from member where login='".$login."'";
$dbresults = &$db->Execute($query);
$loginquery=$dbresults->fields['login'];
if ($loginquery != "") $loginok=0;
return $loginok;
}
function numaccts() {
global $database_host,$database_user,$database_pass,$database_db;
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$db = ADONewConnection('mysql'); # eg 'mysql' or 'postgres'
$db->debug = false;
$db->Connect($database_host, $database_user, $database_pass, $database_db);
$dbresults = &$db->Execute("select count(*) from member");
return $dbresults->fields['count(*)'];
}
function validate_email($address) {
global $database_host,$database_user,$database_pass,$database_db;
$valid_email=1;
$parts = explode("@", $address);
$host= $parts[1] .".";
if (getmxrr( $host, $mxhosts ) == FALSE && gethostbyname( $host ) == $host ) {
$valid_email = 0;
} else {
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$db = ADONewConnection('mysql'); # eg 'mysql' or 'postgres'
$db->debug = false;
$db->Connect($database_host, $database_user, $database_pass, $database_db);
$query="select id from member where email = '$address'";
$dbresults = &$db->Execute($query);
if ($dbresults->fields['id'] != "") {
$valid_email = -1;
}
}
return($valid_email);
}
if ($mode==paypalverify) {
// do loops of refresh stuff...when valid then create..
if (!$verifycounter) { $verifycounter=0; }
$purchasesquery="select * from purchases where invoice='$invoice'";
$dbpurchases = &$db->Execute($purchasesquery);
$notdone = 1;
if (($pendingstatus=$dbpurchases->fields['status']) != "Pending") { $notdone=0; }
if ($verifycounter >= 12) { $notdone=0; }
while ($notdone) {
$refreshtimeleft=60-($verifycounter*5);
if (ereg(".*MSIE.*",$HTTP_SERVER_VARS["HTTP_USER_AGENT"]))
{
$verifycounter++;
# If IE use refresh
die ("
NoCat PayPal IPN Confirm
");
}
else
{
# if not IE use server push
$mozilla_browser=1;
$sep = "---DMZSPayPalWait---";
if ($verifycounter==0) {
header("Content-Type: multipart/x-mixed-replace;boundary=$sep");
print "$sep\n";
}
print "Content-Type: text/html\n\n";
echo "";
echo "";
echo "";
echo "NoCat PayPal IPN Confirm";
echo "";
echo "";
echo "
";
print "\n$sep\n";
flush();
sleep(5);
}
$dbpurchases = &$db->Execute($purchasesquery);
$verifycounter++;
if (($pendingstatus=$dbpurchases->fields['status']) != "Pending") { $notdone=0; }
if ($verifycounter >= 12) { $notdone=0; }
}
if ($mozilla_browser) { print "Content-Type: text/html\n\n"; }
}
if (isset($IOC_response_code)) {
if ($IOC_response_code==0) {
//update payment with auth code (IOC_authorization_code, and IOC_authorization_amount)
$query = "update purchases set payment_status='APPROVED',status='APPROVED',settle_amount='$IOC_authorization_amount',payment_type='CC',payer_email='$email',payer_id='$login',ccauth='$IOC_authorization_code' where invoice='$invoice'";
$dbresults = &$db->Execute($query);
$pendingstatus="Completed";
} else { $mode= "choosepayment"; }
}
if ($pendingstatus == "Completed") {
$query="insert into member (created,login,email,pass,name,lastname,url,timeleft,description,expiredate,expirebycalendar,totalday,active,address,city,state,zip,nodemac,purchasedat,planid,cclastauth) values('$datetime','$login','$email','$password','$name','$lastname','$url','$timeleft','$description','$expiredate','$expirebycalendar','$totalday','1','$address','$city','$state','$zip','$gatewaymac','$gatewaymac','$planid',now())";
$dbresults = &$db->Execute($query);
// Insert Group
$query="insert into network (created,login,network) values('$datetime','$login','NoCat_Wireless_User')";
$dbresults = &$db->Execute($query);
// update member id in purchases
$query="select id from member where login='$login'";
$dbresults= &$db->Execute($query);
$memberid=$dbresults->fields['id'];
$query = "update purchases set memberid='$memberid' where invoice='$invoice'";
$dbresults= &$db->Execute($query);
if ($automaticrenew=="Y") {
update_cc($memberid,$ecom_payment_card_name,$ecom_payment_card_number,$ecom_payment_card_expdate_month,$ecom_payment_card_expdate_year,$ecom_payment_card_verification);
} else {
update_cc($memberid); // update with blank #
}
// redirect to logon page...
// if new account from website, not AP
if ($nodemac == "b0:b0:b0:b0:b0:b0") {
die ("
NoCat New Account Confirm
Welcome to NoCat Wireless Network. Use your account at any NoCat Location
");
} else {
die ("
NoCat New Account Logon
Your NoCat Account is now activated. Within 5 seconds you will now be taken back to logon page.
");
}
}
?>
NoCat Service New Account Create
if ($mode!="newacct"): ?>
endif; ?>
if ($mode!="newacct") {
echo "";
} else {
echo "";
}
?>
if ($mode==paypalverify):
switch ($pendingstatus) {
case "Pending":
echo "Payment Still Pending. Probably a problem with PayPal. Call NoCat ";
$pendingreason=$dbpurchases->fields['paypalpendingreason'];
$query="select description from paypalpendingreason where reason='$pendingreason'";
$dbresultspending = &$db->Execute($query);
echo "Reason from Paypal: ".$dbresultspending->fields['description']." ";
//echo "Check IPN Status Again
\n";
break;
case "Failed":
echo "Payment Failed. Please try another payment method ";
break;
case "Denied":
echo "Payment Denied. Please try another payment method ";
break;
}
$mode="enterpaypal";
endif;
if ($IOC_reject_description) {
echo "".urldecode($IOC_reject_description)."";
$invoice=$IOC_merchant_order_id;
echo " Invoice: $invoice canceled\n";
// update invoice record status to CANCELED
$query = "update purchases set status='CANCELED',rejdesc='$IOC_reject_description' where invoice='$invoice'";
$dbcancelpurchase = &$db->Execute($query);
unset($invoice);
unset($IOC_reject_description);
$mode="choosepayment";
}
if ($mode=="paypalcanceled" ):
echo "Invoice: $invoice canceled\n";
// update invoice record status to CANCELED
$query = "update purchases set status='CANCELED' where invoice='$invoice'";
$dbcancelpurchase = &$db->Execute($query);
unset($invoice);
$mode="newacct";
endif;
if ($mode=="newacctverify"):
$mode="createuser";
if (!$planid) { echo "Choose a plan "; $mode="newacct";}
if ($agree!="on") { echo "You need to aggre with Terms & Conditions".$agree." "; $mode="newacct";}
else echo " ";
endif;
if ($mode=="newacct"):
?>
NoCat Privacy Policy
endif;
if ($mode=="verifyuser"):
// check if acct exists. if exists & not active confirm user/pass
// if exists and no confirm, go back to createuser
// set mode to checkcc
//$mode="surepayenterpayment"; // if using surepay credit card
//$mode="enterpaypal";
$mode="choosepayment";
if (!$login) { echo "Enter Login ID "; $mode="createuser";}
if (strlen($login) < 3) { echo "Login ID needs to be more than 3 characters "; $mode="createuser"; }
if (!loginok($login)) { echo "Login ID Already in use, Please enter another "; $mode="createuser";}
if (!$password) { echo "Enter Password "; $mode="createuser";}
if (strlen($password) < 3) { echo "Password needs to be more than 3 characters "; $mode="createuser"; }
if (!$pwverify) { echo "Enter Verify Password "; $mode="createuser";}
if ($password != $pwverify) { echo "Entered Passwords do not match "; $mode="createuser";}
if (!$name) { echo "Enter Your First Name "; $mode="createuser";}
if (!$lastname) { echo "Enter Your Last Name "; $mode="createuser";}
if (!$email) { echo "Enter Email Address "; $mode="createuser";}
if (!($email_stats=validate_email($email))) {echo "Enter Valid Email Address "; $mode="createuser"; }
if ($email_stats == -1) {echo "Email Address Already in use, choose another "; $mode="createuser"; }
if (!$address) { echo "Enter Your Address "; $mode="createuser";}
if (!$city) { echo "Enter City "; $mode="createuser";}
if (!$state) { echo "Enter State "; $mode="createuser";}
if (!$zip) { echo "Enter Zipcode "; $mode="createuser";}
if ($mode == "createuser") echo " ";
endif;
if ($mode=="createuser"):
?>
endif;
// Set timeleft, totalday, expiredate & expirebycalendar for new accts -- by planid
// -- expirebycalendar values:
// -99 never expire
// 0 expire on time left
// 1 expire on expiredate specified
// 2 expire after # days specified
// 3 expire by # days, but convered to expiredate specified
// 4 expire by # hours
// 5 expire by # hours, but converted to expiredate specified
// -- timeframe values:
// 0 unlimited
// 1 hour
// 2 day
// 3 week
// 4 month
// 5 quarter
// 6 year
// need to fix so it goes by calendar days from date of purchase...not this hack
if (($mode == "surepayverifycredit") || ($mode == "verifypaypal") || ($mode == "enterpaypal") || ($mode == "choosepayment")) {
$query = "select timeframe,lengthtime from accounttype where id='$planid'";
$dbpayment = &$db->Execute($query);
switch ($dbpayment->fields['timeframe']) {
case 0:
$expirebycalendar = -99;
break;
case 1:
$expirebycalendar = 4;
$timeleft = $dbpayment->fields['lengthtime'];
break;
case 2:
$expirebycalendar = 2;
$totalday = $dbpayment->fields['lengthtime'];
break;
case 3:
$expirebycalendar = 2;
$totalday = 7 * $dbpayment->fields['lengthtime'];
break;
case 4:
$expirebycalendar = 2;
$totalday = 30 * $dbpayment->fields['lengthtime'];
break;
case 5:
$expirebycalendar = 2;
$totalday = 90 * $dbpayment->fields['lengthtime'];
break;
case 6:
$expirebycalendar = 2;
$totalday = 365 * $dbpayment->fields['lengthtime'];
break;
}
}
if ($mode=="choosepayment"):
?>
endif;
if ($mode=="surepayverifycredit"):
$quantity='1';
$tax='0.00';
$mode="logon";
if (!$ccnumber) { echo "Enter Credit Card # "; $mode="surepayenterpayment";}
if (!$expiremonth) { echo "Enter Expiration Month "; $mode="surepayenterpayment";}
if (!$expireyear) { echo "Enter Expiration Year "; $mode="surepayenterpayment";}
ini_set('max_execution_time','120');
include('admin/include/sausurepay.php');
//$ssp = new sausp(false,'19796','dmz5ccp455');
$ssp = new sausp(false,'1001','password');
if ($ssp->err) { echo "".$ssp->err." "; $mode="surepayenterpayment";}
$ordernum = numaccts()+1;
$auth = $ssp->add_auth(
array(
'ordernumber' => $ordernum,
'ecommerce' => 'true',
'ecommercecode' => '07',
'ipaddress' => $REMOTE_ADDR,
'shippingcost' => '0.00USD',
'taxamount' => '0.00USD',
'referringurl' => $HTTP_REFERER,
'browsertype' => $HTTP_USER_AGENT
)
);
if ($ssp->err) { echo "".$ssp->err." "; $mode="surepayenterpayment";}
$ssp->add_shipping_address(
$auth,
array(
'fullname' => $name,
'address1' => $address,
'address2' => 'NO',
'city' => $city,
'state' => $state,
'zip' => $zip,
'country' => 'NO',
'phone' => 'NO',
'email' => $email
)
);
if ($ssp->err) { echo "".$ssp->err." "; $mode="surepayenterpayment";}
$ccmonstr=$expiremonth."/".$expireyear;
$creditcard = $ssp->add_creditcard(
$auth,
$ccnumber,
$ccmonstr,
$cvv2code,
'0'
);
if ($ssp->err) { echo "".$ssp->err." "; $mode="surepayenterpayment";}
$ssp->add_billing_address(
$creditcard,
array(
'fullname' => $name,
'address1' => $address,
'address2' => 'NO',
'city' => $city,
'state' => $state,
'zip' => $zip,
'country' => 'NO',
'phone' => 'NO',
'email' => $email
)
);
if ($ssp->err) { echo "".$ssp->err." "; $mode="surepayenterpayment";}
$item = $ssp->add_lineitem (
$auth,
$quantity,
$sku,
$descr,
$cost,
$tax
);
if ($ssp->err) { echo "".$ssp->err." "; $mode="surepayenterpayment";}
// TODO add cafe user at
//$ssp->add_option($item,'purchasedat',$cafe);
//if ($ssp->err) { echo "".$ssp->err." "; $mode="surepayenterpayment";}
$ssp->prepare_request();
if ($ssp->err) { echo "".$ssp->err." "; $mode="surepayenterpayment";}
$ssp->submit_request();
if ($ssp->err) { echo "".$ssp->err." "; $mode="surepayenterpayment";}
$responsecount = $ssp->parse_response();
if ($ssp->err) { echo "".$ssp->err." "; $mode="surepayenterpayment";}
if (!$responsecount) { echo "CC Verification Error "; $mode="surepayenterpayment";}
$auths = $ssp->auths();
if ($ssp->err) { echo "".$ssp->err." "; $mode="surepayenterpayment";}
//list($key,$order)=each($auths[0]);
while (list($key,$order)=each($auths)) {
//echo "
\n";
if ($ssp->auth_failure($order)) { echo "".$ssp->auth_text($order)." "; $mode="surepayenterpayment";}
//if ($ssp->err) { echo "".$ssp->err." "; $mode="surepayenterpayment";}
}
unset($ssp);
if ($mode == "surepayenterpayment") echo " ";
else {
// store CC encrypted in db and create account information (clean input)
// TODO have access code....
$newpass = nocat_crypt($password);
$query="insert into member (created,login,email,pass,name,lastname,url,description,expiredate,expirebycalendar,totalday,redirect,nodemac,purchasedat) values('$datetime','$login','$email','$newpass','$name','$lastname','$url','$timeleft','$description','$expiredate','$expirebycalendar','$totalday','$redirect','$gatewaymac','$gatewaymac')";
//$dbresults = &$db->Execute($query);
// Insert Group
$query="insert into network (created,login,network) values('$datetime','$login','Nocat_Wireless_User')";
//$dbresults = &$db->Execute($query);
}
endif;
if ($mode=="surepayenterpayment"):
?>
endif;
//if ($mode=="enterpaypal"):
if ($mode=="payinvoice"):
// Create inactive account/payment, display 'invoice' with paypal buynow button.
// success will activate account in background and send to newuser page that will test/refresh/test/.. until acct activated
// then redirect to logon page (prepopulated...refresh & authed..)
// failure will send to newuser page that will confirm user acct is inactive & go to 'new account' page
$newpass = nocat_crypt($password);
$query = "select timeframe,lengthtime,description,price from accounttype where id='$planid'";
$dbpayments = &$db->Execute($query);
$query="select name,description,account,surcharge,surcharge_percent,notify,return_ok,return_cancel from paymenttype where id='$paymentid'";
$paymentgateway = &$db->Execute($query);
$query="select id from purchases where invoice='$invoice'";
$dbprepurchase = &$db->Execute($query);
if ($dbprepurchase->fields['id']) {
$query="update purchases set name='$login',nodemac='$gatewaymac',status='Pending' where invoice='$invoice'";
} else {
$query="insert into purchases (invoice,nodemac,planid, expirebycalendar,timeleft,totalday,login,password,name,lastname,email,address,city,state,zip,url,description,redirect,mac,token,gateway,gatewaymac,timeout) values('$invoice','$gatewaymac','$planid','$expirebycalendar','$timeleft','$totalday','$login','$newpass','$name','$lastname','$email','$address','$city','$state','$zip','$url','$description','$redirect','$mac','$token','$gateway','$gatewaymac','$timeout')";
}
$dbpurchases = &$db->Execute($query);
echo "Invoice: ".$invoice."";
echo "