function confirmation() {
global $_POST;
if (MODULE_PAYMENT_ISECURE_USD_USE_CVV == 'True') {
$confirmation = array(//'title' => MODULE_PAYMENT_ISECURE_USD_TEXT_CATALOG_TITLE, // Redundant
'fields' => array(array('title' => MODULE_PAYMENT_ISECURE_USD_TEXT_CREDIT_CARD_TYPE,
'field' => $this->cc_card_type),
array('title' => MODULE_PAYMENT_ISECURE_USD_TEXT_CREDIT_CARD_OWNER,
'field' => $_POST['isecure_usd_cc_owner']),
array('title' => MODULE_PAYMENT_ISECURE_USD_TEXT_CREDIT_CARD_NUMBER,
'field' => substr($this->cc_card_number, 0, 4) . str_repeat('X', (strlen($this->cc_card_number) - 8)) . substr($this->cc_card_number, -4)),
array('title' => MODULE_PAYMENT_ISECURE_USD_TEXT_CREDIT_CARD_EXPIRES,
'field' => strftime('%B, %Y', mktime(0,0,0,$_POST['isecure_usd_cc_expires_month'], 1, '20' . $_POST['isecure_usd_cc_expires_year']))),
array('title' => MODULE_PAYMENT_ISECURE_USD_TEXT_CVV,
'field' => $_POST['isecure_usd_cc_cvv'])));
} else {
$confirmation = array(//'title' => MODULE_PAYMENT_ISECURE_USD_TEXT_CATALOG_TITLE, // Redundant
'fields' => array(array('title' => MODULE_PAYMENT_ISECURE_USD_TEXT_CREDIT_CARD_TYPE,
'field' => $this->cc_card_type),
array('title' => MODULE_PAYMENT_ISECURE_USD_TEXT_CREDIT_CARD_OWNER,
'field' => $_POST['isecure_usd_cc_owner']),
array('title' => MODULE_PAYMENT_ISECURE_USD_TEXT_CREDIT_CARD_NUMBER,
'field' => substr($this->cc_card_number, 0, 4) . str_repeat('X', (strlen($this->cc_card_number) - 8)) . substr($this->cc_card_number, -4)),
array('title' => MODULE_PAYMENT_ISECURE_USD_TEXT_CREDIT_CARD_EXPIRES,
'field' => strftime('%B, %Y', mktime(0,0,0,$_POST['isecure_usd_cc_expires_month'], 1, '20' . $_POST['isecure_usd_cc_expires_year'])))));
}
return $confirmation;
}
/**
* Build the data and actions to process when the "Submit" button is pressed on the order-confirmation screen.
* This sends the data to the payment gateway for processing.
* (These are hidden fields on the checkout confirmation page)
*
* @return string
*/
function process_button() {
$process_button_string = zen_draw_hidden_field('cc_owner', $_POST['isecure_usd_cc_owner']) .
zen_draw_hidden_field('cc_expires', $this->cc_expiry_month . substr($this->cc_expiry_year, -2)) .
zen_draw_hidden_field('cc_type', $this->cc_card_type) .
zen_draw_hidden_field('cc_number', $this->cc_card_number);
if (MODULE_PAYMENT_ISECURE_USD_USE_CVV == 'True') {
$process_button_string .= zen_draw_hidden_field('cc_cvv', $_POST['isecure_usd_cc_cvv']);
}
$process_button_string .= zen_draw_hidden_field(zen_session_name(), zen_session_id());
return $process_button_string;
return false;
}
/**
* Store the CC info to the order and process any results that come back from the payment gateway
*
*/
function before_process() {
global $_POST, $response, $db, $order, $messageStack;
// DATA PREPARATION SECTION
unset($submit_data); // Cleans out any previous data stored in the variable
// Create a string that contains a listing of products ordered for the description field
$description = '';
for ($i=0; $i<sizeof($order->products); $i++) {
$description .= $order->products[$i]['name'] . '(qty: ' . $order->products[$i]['qty'] . ') + ';
}
// Remove the last "\n" from the string
$description = substr($description, 0, -2);
// Create a variable that holds the order time
$order_time = date("F j, Y, g:i a");
// Calculate the next expected order id
$last_order_id = $db->Execute("select * from " . TABLE_ORDERS . " order by orders_id desc limit 1");
$new_order_id = $last_order_id->fields['orders_id'];
$new_order_id = ($new_order_id + 1);
// Populate an array that contains all of the data to be sent to Authorize.net
$submit_data = array(
'x_login' => MODULE_PAYMENT_ISECURE_USD_LOGIN, // The login name is assigned by authorize.net
'x_relay_response' => 'FALSE', // AIM uses direct response, not relay response
'x_delim_data' => 'TRUE', // The default delimiter is a comma
'x_version' => '3.1', // 3.1 is required to use CVV codes
'x_amount' => number_format($order->info['total'], 2),
'x_card_num' => $_POST['cc_number'],
'x_exp_date' => $_POST['cc_expires'],
'x_card_code' => $_POST['cc_cvv'],
'x_cust_id' => $_SESSION['customer_id'],
'x_invoice_num' => (MODULE_PAYMENT_ISECURE_USD_TESTMODE == 'Test' ? 'TEST-' : '') . $new_order_id,
'x_first_name' => $order->billing['firstname'],
'x_last_name' => $order->billing['lastname'],
'x_company' => $order->billing['company'],
'x_address' => $order->billing['street_address'],
'x_city' => $order->billing['city'],
'x_state' => $order->billing['state'],
'x_zip' => $order->billing['postcode'],
'x_country' => $order->billing['country']['title'],
'x_phone' => $order->customer['telephone'],
'x_email' => $order->customer['email_address'],
'x_ship_to_first_name' => $order->delivery['firstname'],
'x_ship_to_last_name' => $order->delivery['lastname'],
'x_ship_to_address' => $order->delivery['street_address'],
'x_ship_to_city' => $order->delivery['city'],
'x_ship_to_state' => $order->delivery['state'],
'x_ship_to_zip' => $order->delivery['postcode'],
'x_ship_to_country' => $order->delivery['country']['title'],
'x_description' => $description,
// Merchant defined variables go here
'Date' => $order_time,
'IP' => $_SERVER['REMOTE_ADDR'],
'Session' => zen_session_id());
// Our Test status switch
switch (MODULE_PAYMENT_ISECURE_USD_TESTMODE) {
case 'Test Mode - Declined': $test_status = '{TESTD}'; break;
case 'Test Mode - Approved': $test_status = '{TEST}'; break;
case 'LIVE':
default: $testmode = ''; break;
}
// concatenate the submission data and put into $data variable
while(list($key, $value) = each($submit_data)) {
$data .= $key . '=' . urlencode(ereg_replace(',', '', $value)) . '&';
}
// Remove the last "&" from the string
$data = substr($data, 0, -1);
// prepare a copy of submitted data for error-reporting purposes
$reportable_submit_data = $submit_data;
$reportable_submit_data['x_login'] = '*******';
$reportable_submit_data['x_tran_key'] = '*******';
$reportable_submit_data['x_card_num'] = '*******' . substr($reportable_submit_data['x_card_num'], -4);
$reportable_submit_data['x_card_code'] = '*******';
// SEND DATA BY CURL SECTION
// Post order info data to Internet Secure, make sure you have cURL support installed
unset($response);
$url = 'https://secure.internetsecure.com/process.cgi';
if (AUTHORIZENET_DEVELOPER_MODE == 'on') $url = 'https://secure.internetsecure.com/process.cgi';
if (AUTHORIZENET_DEVELOPER_MODE == 'certify') $url = 'https://secure.internetsecure.com/process.cgi';
$reportable_submit_data['url'] = $url;
// The commented line below is an alternate connection method
//exec("/usr/bin/curl -d \"$data\" $url", $response);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); /* compatibility for SSL communications on some Windows servers (IIS 5.0+) */
if (CURL_PROXY_REQUIRED == 'True') {
$proxy_tunnel_flag = (defined('CURL_PROXY_TUNNEL_FLAG') && strtoupper(CURL_PROXY_TUNNEL_FLAG) == 'FALSE') ? false : true;
curl_setopt ($ch, CURLOPT_HTTPPROXYTUNNEL, $proxy_tunnel_flag);
curl_setopt ($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt ($ch, CURLOPT_PROXY, CURL_PROXY_SERVER_DETAILS);
}
$authorize = curl_exec($ch);
$commError = curl_error($ch);
$commInfo = @curl_getinfo($ch);
curl_close ($ch);
$response = split('\,', $authorize);
$response_code = explode(',', $response[0]);
$response_text = explode(',', $response[3]);
$transaction_id = explode(',', $response[6]);
$authorization_type = explode(',', $response[11]);
$auth_code = explode(',', $response[4]);
$this->auth_code = $auth_code[0];
$this->transaction_id = $transaction_id[0];
// Parse the response code and text for custom error display
$x_response_code = $response_code[0];
$x_response_text = $response_text[0] . ($commError == '' ? '' : 'Communications Error - Please notify webmaster. ');
// If the response code is not 1 (approved) then redirect back to the payment page with the appropriate error message
if ($x_response_code != '1') {
$messageStack->add_session('checkout_payment', $x_response_text . ' - ' . MODULE_PAYMENT_ISECURE_USD_TEXT_DECLINED_MESSAGE, 'error');
zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL', true, false));
}
}
/**
* Post-process activities.
*
* @return boolean
*/
function after_process() {
global $insert_id, $db;
$db->Execute("insert into " . TABLE_ORDERS_STATUS_HISTORY . " (comments, orders_id, orders_status_id, date_added) values ('Credit Card payment. AUTH: " . $this->auth_code . ". TransID: " . $this->transaction_id . ".' , '". (int)$insert_id . "','" . $this->order_status . "', now() )");
return false;
}
/**
* Used to display error message details
*
* @return array
*/
function get_error() {
global $_GET;
$error = array('title' => MODULE_PAYMENT_ISECURE_USD_TEXT_ERROR,
'error' => stripslashes(urldecode($_GET['error'])));
return $error;
}
/**
* Check to see whether module is installed
*
* @return boolean
*/
function check() {
global $db;
if (!isset($this->_check)) {
$check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_ISECURE_USD_STATUS'");
$this->_check = $check_query->RecordCount();
}
return $this->_check;
}
/**
* Install the payment module and its configuration settings
*
*/
function install() {
global $db;
$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable Internet Secure-USD Module', 'MODULE_PAYMENT_ISECURE_USD_STATUS', 'True', 'Do you want to accept Internet Secure payments via the Merchant Direct Method?', '6', '0', 'zen_cfg_select_option(array(\'True\', \'False\'), ', now())");
$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Login ID', 'MODULE_PAYMENT_ISECURE_USD_LOGIN', '0', 'Your USD Merchant ID assigned by Internet Secure', '6', '0', now())");
// Future: set_function, use_function ... 'zen_cfg_password_input(', 'zen_cfg_password_display'
$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added)
values ('Transaction Mode', 'MODULE_PAYMENT_ISECURE_USD_TESTMODE', 'Test or Live', 'Transaction mode to use for the InternetSecure service', '6', '11', 'zen_cfg_select_option(array(\'Test Mode - Declined\', \'Test Mode - Approved\', \'LIVE\'), ', now())");
$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Request CVV Number', 'MODULE_PAYMENT_ISECURE_USD_USE_CVV', 'True', 'Do you want to ask the customer for the card\'s CVV number', '6', '0', 'zen_cfg_select_option(array(\'True\', \'False\'), ', now())");
$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort order of display.', 'MODULE_PAYMENT_ISECURE_USD_SORT_ORDER', '0', 'Sort order of display. Lowest is displayed first.', '6', '0', now())");
$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Payment Zone', 'MODULE_PAYMENT_ISECURE_USD_ZONE', '0', 'If a zone is selected, only enable this payment method for that zone.', '6', '2', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())");
$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, use_function, date_added) values ('Set Order Status', 'MODULE_PAYMENT_ISECURE_USD_ORDER_STATUS_ID', '0', 'Set the status of orders made with this payment module to this value', '6', '0', 'zen_cfg_pull_down_order_statuses(', 'zen_get_order_status_name', now())");
}
/**
* Remove the module and all its settings
*
*/
function remove() {
global $db;
$db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
}
/**
* Internal list of configuration keys used for configuration of the module
*
* @return array
*/
function keys() {
return array('MODULE_PAYMENT_ISECURE_USD_STATUS', 'MODULE_PAYMENT_ISECURE_USD_LOGIN', 'MODULE_PAYMENT_ISECURE_USD_TESTMODE', 'MODULE_PAYMENT_ISECURE_USD_USE_CVV', 'MODULE_PAYMENT_ISECURE_USD_SORT_ORDER', 'MODULE_PAYMENT_ISECURE_USD_ZONE', 'MODULE_PAYMENT_ISECURE_USD_ORDER_STATUS_ID');
}
}
?>
Bookmarks