msgbartop
Greenville SC Web Management, Design and Implementation
msgbarbottom

02 Jan 11 Suregate.net Virtuemart Payment Class

Ok – after much delay, here is the highly anticipated first release:

<?php
/**
* The ps_suregate class, containing the payment processing code
*  for transactions with Suregate.net
*
* @version $Id: ps_suregate.php 2010-25-12
* @package VirtueMart
* @subpackage payment
* @copyright Copyright (C) 2009 created by: Soeren  - All rights reserved.
* Modified for Suregate.net by TheWebDoctor.us
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* VirtueMart is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See /administrator/components/com_virtuemart/COPYRIGHT.php for copyright notices and details.
*
* http://virtuemart.net
*/
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
class ps_suregate {
var $payment_code = "AN";
/*
* Show all configuration parameters for this payment method
* @returns boolean False when the Payment method has no configration
*/
function show_configuration() {
global $VM_LANG, $sess;
$db = new ps_DB;
$payment_method_id = vmGet( $_REQUEST, 'payment_method_id', null );
/** Read current Configuration ***/
require_once(CLASSPATH ."payment/".__CLASS__.".cfg.php");
?>
<table class="adminform">
<tr class="row0">
<td class="labelcell"><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_ENABLE_AUTORIZENET_TESTMODE') ?></td>
<td>
<select name="AN_TEST_REQUEST" class="inputbox" >
<option <?php if (AN_TEST_REQUEST == 'TRUE') echo "selected=\"selected\""; ?> value="TRUE"><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_YES') ?></option>
<option <?php if (AN_TEST_REQUEST == 'FALSE') echo "selected=\"selected\""; ?> value="FALSE"><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_NO') ?></option>
</select>
</td>
<td><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_ENABLE_AUTORIZENET_TESTMODE_EXPLAIN') ?>
</td>
</tr>
<tr class="row1">
<td class="labelcell">Suregate.net Server Hostname</td>
<td>
<input type="text" name="AN_HOSTNAME" value="<?php echo defined('AN_HOSTNAME') ? AN_HOSTNAME : 'https://secure.suregate.net:443/smartPayments/transact.asmx/ProcessCreditCard?' ?>" />
</td>
<td>Name of the Suregate.net Server, the requests are sent to. Default Value: <strong>https://secure.suregate.net:443/smartPayments/transact.asmx/ProcessCreditCard?</strong><br />
</td>
</tr>
<tr class="row0">
<td class="labelcell"><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_AUTORIZENET_USERNAME') ?></td>
<td>
<input type="text" name="AN_LOGIN" class="inputbox" value="<?php echo AN_LOGIN ?>" />
</td>
<td><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_AUTORIZENET_USERNAME_EXPLAIN') ?>
</td>
</tr>
<tr class="row1">
<td class="labelcell"><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_AUTORIZENET_KEY') ?></td>
<td>
<a class="button" id="changekey" href="<?php $sess->purl($_SERVER['PHP_SELF']."?
page=store.payment_method_keychange&pshop_mode=admin&payment_method_id=$payment_method_id") ?>" >
<?php echo $VM_LANG->_('PHPSHOP_CHANGE_TRANSACTION_KEY') ?><a/>
</td>
<td>&nbsp;</td>
</tr>
<tr class="row0">
<td class="labelcell"><?php echo $VM_LANG->_('PHPSHOP_PAYMENT_CVV2') ?></td>
<td>
<select name="AN_CHECK_CARD_CODE" class="inputbox">
<option <?php if (AN_CHECK_CARD_CODE == 'YES') echo "selected=\"selected\""; ?> value="YES">
<?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_YES') ?></option>
<option <?php if (AN_CHECK_CARD_CODE == 'NO') echo "selected=\"selected\""; ?> value="NO">
<?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_NO') ?></option>
</select>
</td>
<td><?php echo $VM_LANG->_('PHPSHOP_PAYMENT_CVV2_TOOLTIP') ?></td>
</tr>
<tr class="row1">
<td class="labelcell"><?php echo $VM_LANG->_('PHPSHOP_PAYMENT_AN_RECURRING') ?></td>
<td>
<select name="AN_RECURRING" class="inputbox">
<option <?php if (AN_RECURRING == 'YES') echo "selected=\"selected\""; ?> value="YES">
<?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_YES') ?></option>
<option <?php if (AN_RECURRING == 'NO') echo "selected=\"selected\""; ?> value="NO">
<?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_NO') ?></option>
</select>
</td>
<td><?php echo $VM_LANG->_('PHPSHOP_PAYMENT_AN_RECURRING_TOOLTIP') ?>
</td>
</tr>
<tr class="row0">
<td class="labelcell"><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_AUTORIZENET_AUTENTICATIONTYPE') ?></td>
<td>
<select name="AN_TYPE" class="inputbox">
<option <?php if (AN_TYPE == 'AUTH_CAPTURE') echo "selected=\"selected\""; ?> value="AUTH_CAPTURE">AUTH_CAPTURE</option>
<option <?php if (AN_TYPE == 'AUTH_ONLY') echo "selected=\"selected\""; ?> value="AUTH_ONLY">AUTH_ONLY</option>
</select>
</td>
<td><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_AUTORIZENET_AUTENTICATIONTYPE_EXPLAIN') ?>
</td>
</tr>
<tr><td colspan="3"><hr/></td></tr>
<tr class="row1">
<td class="labelcell"><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_PAYMENT_ORDERSTATUS_SUCC') ?></td>
<td>
<select name="AN_VERIFIED_STATUS" class="inputbox" >
<?php
$q = "SELECT order_status_name,order_status_code FROM #__{vm}_order_status ORDER BY list_order";
$db->query($q);
$order_status_code = Array();
$order_status_name = Array();
while ($db->next_record()) {
$order_status_code[] = $db->f("order_status_code");
$order_status_name[] =  $db->f("order_status_name");
}
for ($i = 0; $i < sizeof($order_status_code); $i++) {
echo "<option value=\"" . $order_status_code[$i];
if (AN_VERIFIED_STATUS == $order_status_code[$i])
echo "\" selected=\"selected\">";
else
echo "\">";
echo $order_status_name[$i] . "</option>\n";
}?>
</select>
</td>
<td><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_PAYMENT_ORDERSTATUS_SUCC_EXPLAIN') ?></td>
</tr>
<tr class="row0">
<td class="labelcell"><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_PAYMENT_ORDERSTATUS_FAIL') ?></td>
<td>
<select name="AN_INVALID_STATUS" class="inputbox" >
<?php
for ($i = 0; $i < sizeof($order_status_code); $i++) {
echo "<option value=\"" . $order_status_code[$i];
if (AN_INVALID_STATUS == $order_status_code[$i])
echo "\" selected=\"selected\">";
else
echo "\">";
echo $order_status_name[$i] . "</option>\n";
} ?>
</select>
</td>
<td><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_PAYMENT_ORDERSTATUS_FAIL_EXPLAIN') ?></td>
</tr>
<tr class="row1">
<td class="labelcell"><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_AUTORIZENET_RESPCODES') ?></td>
<td>
<select name="AN_SHOW_ERROR_CODE" class="inputbox">
<option <?php if (AN_SHOW_ERROR_CODE == 'YES') echo "selected=\"selected\""; ?> value="YES">
<?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_YES') ?></option>
<option <?php if (AN_SHOW_ERROR_CODE == 'NO') echo "selected=\"selected\""; ?> value="NO">
<?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_NO') ?></option>
</select>
</td>
<td><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_AUTORIZENET_RESPCODES_EXPLAIN') ?></td>
</tr>
<tr class="row0">
<td class="labelcell"><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_AUTORIZENET_EMAIL_MERCHANT') ?></td>
<td>
<select name="AN_EMAIL_MERCHANT" class="inputbox">
<option <?php if (AN_EMAIL_MERCHANT == 'YES') echo "selected=\"selected\""; ?> value="YES">
<?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_YES') ?></option>
<option <?php if (AN_EMAIL_MERCHANT == 'NO') echo "selected=\"selected\""; ?> value="NO">
<?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_NO') ?></option>
</select>
</td>
<td><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_AUTORIZENET_EMAIL_MERCHANT_EXPLAIN') ?></td>
</tr>
<tr class="row1">
<td class="labelcell"><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_AUTORIZENET_EMAIL_CUSTOMER') ?></td>
<td>
<select name="AN_EMAIL_CUSTOMER" class="inputbox">
<option <?php if (AN_EMAIL_CUSTOMER == 'YES') echo "selected=\"selected\""; ?> value="YES">
<?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_YES') ?></option>
<option <?php if (AN_EMAIL_CUSTOMER == 'NO') echo "selected=\"selected\""; ?> value="NO">
<?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_NO') ?></option>
</select>
</td>
<td><?php echo $VM_LANG->_('PHPSHOP_ADMIN_CFG_AUTORIZENET_EMAIL_CUSTOMER_EXPLAIN') ?></td>
</tr>
</table>
<?php
// return false if there's no configuration
return true;
}
function has_configuration() {
// return false if there's no configuration
return true;
}
/**
* Returns the "is_writeable" status of the configuration file
* @param void
* @returns boolean True when the configuration file is writeable, false when not
*/
function configfile_writeable() {
return is_writeable( CLASSPATH."payment/".__CLASS__.".cfg.php" );
}
/**
* Returns the "is_readable" status of the configuration file
* @param void
* @returns boolean True when the configuration file is writeable, false when not
*/
function configfile_readable() {
return is_readable( CLASSPATH."payment/".__CLASS__.".cfg.php" );
}
/**
* Writes the configuration file for this payment method
* @param array An array of objects
* @returns boolean True when writing was successful
*/
function write_configuration( &$d ) {
$my_config_array = array("AN_TEST_REQUEST" => $d['AN_TEST_REQUEST'],
"AN_LOGIN" => $d['AN_LOGIN'],
"AN_HOSTNAME" => $d['AN_HOSTNAME'],
"AN_TYPE" => $d['AN_TYPE'],
"AN_CHECK_CARD_CODE" => $d['AN_CHECK_CARD_CODE'],
"AN_VERIFIED_STATUS" => $d['AN_VERIFIED_STATUS'],
"AN_INVALID_STATUS" => $d['AN_INVALID_STATUS'],
"AN_RECURRING" => $d['AN_RECURRING'],
"AN_EMAIL_MERCHANT" => $d['AN_EMAIL_MERCHANT'],
"AN_EMAIL_CUSTOMER" => $d['AN_EMAIL_CUSTOMER'],
"AN_SHOW_ERROR_CODE" => $d['AN_SHOW_ERROR_CODE']
);
$config = "<?php\n";
$config .= "if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); \n\n";
foreach( $my_config_array as $key => $value ) {
$config .= "define ('$key', '$value');\n";
}
$config .= "?>";
if ($fp = fopen(CLASSPATH ."payment/".__CLASS__.".cfg.php", "w")) {
fputs($fp, $config, strlen($config));
fclose ($fp);
return true;
}
else {
return false;
}
}
/**************************************************************************
** name: process_payment()
** created by: Soeren
** description: process transaction with Suregate.net
** parameters: $order_number, the number of the order, we're processing here
**            $order_total, the total $ of the order
** returns:
***************************************************************************/
function process_payment($order_number, $order_total, &$d) {
global $vendor_mail, $vendor_currency, $VM_LANG, $vmLogger;
$database = new ps_DB;
$ps_vendor_id = $_SESSION["ps_vendor_id"];
$auth = $_SESSION['auth'];
$ps_checkout = new ps_checkout;
// Get the Configuration File for authorize.net
require_once(CLASSPATH ."payment/".__CLASS__.".cfg.php");
// connector class
require_once(CLASSPATH ."connectionTools.class.php");
// Get the Transaction Key securely from the database
$database->query( "SELECT ".VM_DECRYPT_FUNCTION."(payment_passkey,'".ENCODE_KEY."') as passkey FROM #__{vm}_payment_method
WHERE payment_class='".__CLASS__."'
AND payment_enabled = 'Y'" );
$transaction = $database->record[0];
if( empty($transaction->passkey)) {
$vmLogger->err( $VM_LANG->_('PHPSHOP_PAYMENT_ERROR',false).'. Technical Note: The required transaction key is empty! The payment method settings must be
reviewed.' );
return false;
}
// Get user billing information
$dbbt = new ps_DB;
$qt = "SELECT * FROM #__{vm}_user_info WHERE user_id=".$auth["user_id"]." AND address_type='BT'";
$dbbt->query($qt);
$dbbt->next_record();
$user_info_id = $dbbt->f("user_info_id");
if( $user_info_id != $d["ship_to_info_id"]) {
// Get user billing information
$dbst = new ps_DB;
$qt = "SELECT * FROM #__{vm}_user_info WHERE user_info_id='".$d["ship_to_info_id"]."' AND address_type='ST'";
$dbst->query($qt);
$dbst->next_record();
}
else {
$dbst = $dbbt;
}
// Option to send email to merchant from gateway
if (AN_EMAIL_MERCHANT == 'NO') {
$vendor_mail = "";
}
if (AN_EMAIL_CUSTOMER == 'YES') {
$email_customer = "TRUE";
} else {
$email_customer = "FALSE";
}
//Authnet vars to send
$formdata = array (
'UserName' => AN_LOGIN,
'Password' =>  $transaction->passkey,
'TransType'=> 'Sale',
'CardNum' => $_SESSION['ccdata']['order_payment_number'],
'ExpDate' => ($_SESSION['ccdata']['order_payment_expire_month']) . substr ($_SESSION['ccdata']['order_payment_expire_year'],2),
'Amount' => $order_total,
'MagData' => '',
'NameOnCard' => $_SESSION['ccdata']['order_payment_name'],
'InvNum' => substr($order_number, 0, 20),
'PNRef' => '',
'Zip' => substr($dbbt->f("zip"), 0, 20),
'Street' => substr($dbbt->f("address_1"), 0, 60),
'CVNum' => '',
'ExtData' => '',
);
//build the post string
$poststring = '';
foreach($formdata AS $key => $val){
$poststring .= urlencode($key) . "=" . urlencode($val) . "&";
}
// strip off trailing ampersand
$poststring = substr($poststring, 0, -1);
if (defined('AN_HOSTNAME')) {
$host = AN_HOSTNAME;
} else {
$host = 'https://secure.suregate.net:443/smartPayments/transact.asmx/ProcessCreditCard?';
}
$result = vmConnector::handleCommunication( "https://secure.suregate.net:443/smartPayments/transact.asmx/ProcessCreditCard?", $poststring );
if( !$result ) {
$vmLogger->err('The transaction could not be completed.' );
$vmLogger->notice( var_export($result,true) );
return false;
}
$response=new SimpleXMLElement($result);
// Approved - Success!
if ($response->Result=='0') {
$d["order_payment_log"] = $VM_LANG->_('PHPSHOP_PAYMENT_TRANSACTION_SUCCESS').": ";
$vmLogger->debug( $d['order_payment_log']);
return True;
}
// Payment Declined
elseif ($response->Result='12') {
if (AN_SHOW_ERROR_CODE == 'YES') {
$vmLogger->notice( var_export($result,true) );
}
$d["order_payment_log"] = $response;
return False;
}
}
}

24 Feb 10 Submit Your Ticket For Help!

We are very proud to introduce our Help Ticket System, our Online Help Desk today to most effectively provide IT Support and Web Design services to Greenville SC!

Register on our Trouble Ticket Page and Submit a New Ticket. We will contact you within 24 hours to submit our affordable proposal, after which The Web Doctor will go to work immediately to resolve your Small Business Computer or Website Issue!