function _uc_cybersource_post_charge in Ubercart 5
Same name and namespace in other branches
- 6.2 payment/uc_cybersource/uc_cybersource.module \_uc_cybersource_post_charge()
- 7.3 payment/uc_cybersource/uc_cybersource.module \_uc_cybersource_post_charge()
1 call to _uc_cybersource_post_charge()
- uc_cybersource_charge in payment/
uc_cybersource/ uc_cybersource.module
File
- payment/
uc_cybersource/ uc_cybersource.module, line 290 - A module used for CyberSource's Silent Order POST method of payment.
Code
function _uc_cybersource_post_charge($order, $amount, $data, $cc_type, $country) {
// Check for cURL support.
if (!function_exists('curl_init')) {
drupal_set_message(t('Cybersource requires cURL. Please talk to your system administrator to get this configured.'));
return array(
'success' => FALSE,
);
}
// Include the HOP.php per the module instructions.
$hop = drupal_get_path('module', 'uc_cybersource') . '/HOP.php';
if (!file_exists($hop)) {
drupal_set_message(t('Silent Order POST requires the HOP.php provided by CyberSource.'));
return array(
'success' => FALSE,
);
}
require_once $hop;
$request = array(
'billTo_firstName' => $order->billing_first_name,
'billTo_lastName' => $order->billing_last_name,
'billTo_street1' => $order->billing_street1,
'billTo_city' => $order->billing_city,
'billTo_country' => $country[0]['country_iso_code_2'],
'billTo_state' => uc_get_zone_code($order->billing_zone),
'billTo_postalCode' => $order->billing_postal_code,
'billTo_email' => $order->primary_email,
'card_accountNumber' => $order->payment_details['cc_number'],
'card_cardType' => $cc_type,
'card_expirationMonth' => $order->payment_details['cc_exp_month'],
'card_expirationYear' => $order->payment_details['cc_exp_year'],
);
if (variable_get('uc_credit_cvv_enabled', TRUE)) {
$request['card_cvNumber'] = $order->payment_details['cc_cvv'];
}
$currency = variable_get('uc_cybersource_currency', 'usd');
$merchantID = getMerchantID();
$timestamp = getmicrotime();
$data = $merchantID . $amount . $currency . $timestamp;
$pub = getPublicKey();
$serialNumber = getSerialNumber();
$pub_digest = hopHash($data, $pub);
$request['amount'] = $amount;
$request['currency'] = $currency;
$request['merchantID'] = $merchantID;
$request['orderNumber'] = $order_id;
$request['orderPage_timestamp'] = $timestamp;
$request['orderPage_ignoreAVS'] = variable_get('uc_cybersource_avs', 'true') == 'true' ? 'false' : 'true';
$request['orderPage_signaturePublic'] = $pub_digest;
$request['orderPage_version'] = '4';
$request['orderPage_serialNumber'] = $serialNumber;
$request['orderPage_transactionType'] = variable_get('uc_cybersource_transaction_type', 'sale');
$data = '';
while (list($key, $value) = each($request)) {
$data .= $key . '=' . urlencode(ereg_replace(',', '', $value)) . '&';
}
$data = substr($data, 0, -1);
if (variable_get('uc_cybersource_server', 'test') == 'test') {
$url = 'https://orderpagetest.ic3.com/hop/ProcessOrder.do';
}
else {
$url = 'https://orderpage.ic3.com/hop/ProcessOrder.do';
}
$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, 0);
curl_setopt($ch, CURLOPT_NOPROGRESS, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
$response = curl_exec($ch);
if ($error = curl_error($ch)) {
watchdog('uc_cybersource', $error, WATCHDOG_ERROR);
}
curl_close($ch);
if (preg_match_all('`name=".+" value=".+"`', $response, $pairs) > 0) {
for ($i = 0; $i < count($pairs[0]); $i++) {
list($name, $value) = explode('" value="', substr($pairs[0][$i], 6, strlen($pairs[0][$i]) - 7));
$nvp[$name] = $value;
}
// Create the order and payment ledger comments.
$o_comment = t('<b>Credit card !type:</b> !amount<br /><b>Decision: @decision</b><br /><b>Reason:</b> !reason', array(
'!type' => variable_get('uc_cybersource_transaction_type', 'sale'),
'!amount' => uc_currency_format($nvp['orderAmount']),
'@decision' => $nvp['decision'],
'!reason' => _parse_cs_reason_code($nvp['reasonCode']),
));
$p_comment = t('!id<br />!decision, Reason: !reason', array(
'!id' => $nvp['orderPage_serialNumber'],
'!decision' => $nvp['decision'],
'!reason' => $nvp['reasonCode'],
));
if (!empty($nvp['ccAuthReply_avsCode'])) {
$o_comment .= t('<br /><b>AVS:</b> !avs', array(
'!avs' => _parse_cs_avs_code($nvp['ccAuthReply_avsCode']),
));
$p_comment .= t(', AVS: @avs', array(
'@avs' => $nvp['ccAuthReply_avsCode'],
));
}
if (!empty($nvp['ccAuthReply_cvCode'])) {
$o_comment .= t('<br /><b>CVV:</b> !cvv', array(
'!cvv' => _parse_cs_cvv_code($nvp['ccAuthReply_cvCode']),
));
$p_comment .= t(', CVV: @cvv', array(
'@cvv' => $nvp['ccAuthReply_cvCode'],
));
}
uc_order_comment_save($order_id, $user->uid, $o_comment, 'admin');
if ($nvp['decision'] == 'ACCEPT') {
$result = array(
'success' => TRUE,
'comment' => $p_comment,
'message' => $o_comment,
'uid' => $user->uid,
);
}
else {
$result = array(
'success' => FALSE,
'comment' => $p_comment,
'message' => $o_comment,
'uid' => $user->uid,
);
}
}
else {
$result = array(
'success' => FALSE,
'message' => t('No response returned from CyberSource.'),
);
}
return $result;
}