function commerce_sagepay_paypal_submit_form_validate in Drupal Commerce SagePay Integration 7
Payment method callback: checkout form submission.
File
- modules/
commerce_sagepay_paypal/ includes/ commerce_sagepay_paypal.inc, line 18
Code
function commerce_sagepay_paypal_submit_form_validate($payment_method, $pane_form, $pane_values, &$order, $charge) {
// Wrap the order for easier access to data.
$wrapper = entity_metadata_wrapper('commerce_order', $order);
$total = commerce_line_items_total($wrapper->commerce_line_items);
// Add tax if we have sales tax in the order.
$total['amount'] = $wrapper->commerce_order_total->amount
->value();
// Load customer profile.
$profile = commerce_customer_profile_load($order->commerce_customer_billing[LANGUAGE_NONE][0]['profile_id']);
// Get user billing address.
$billing_address = $profile->commerce_customer_address[LANGUAGE_NONE][0];
// Get user delivery address.
$delivery_address = NULL;
if (isset($order->commerce_customer_shipping)) {
$delivery_profile = commerce_customer_profile_load($order->commerce_customer_shipping[LANGUAGE_NONE][0]['profile_id']);
$delivery_address = $delivery_profile->commerce_customer_address[LANGUAGE_NONE][0];
}
$settings = array();
$data = _commerce_sagepay_encrypted_order($settings, $order, $total, $billing_address, $delivery_address, SAGEPAY_PAYPAL, $pane_values);
// Create a POST to send to SagePay.
$post = '';
foreach ($data as $name => $value) {
$post .= urlencode($name) . '=' . urlencode($value) . '&';
}
// Chop off the last &.
$post = substr($post, 0, -1);
// Determine the correct url based on the transaction mode.
switch (variable_get(SAGEPAY_SETTING_TRANSACTION_MODE)) {
case SAGEPAY_TXN_MODE_LIVE:
$server_url = SAGEPAY_DIRECT_SERVER_LIVE;
break;
case SAGEPAY_TXN_MODE_TEST:
$server_url = SAGEPAY_DIRECT_SERVER_TEST;
break;
case SAGEPAY_TXN_MODE_SHOWPOST:
$server_url = SAGEPAY_DIRECT_SERVER_SHOWPOST;
break;
case SAGEPAY_TXN_MODE_SIMULATION:
$server_url = SAGEPAY_DIRECT_SERVER_SIMULATION;
break;
default:
$server_url = SAGEPAY_DIRECT_SERVER_SIMULATION;
}
drupal_alter('sagepay_url', $server_url, $pane_values);
// Send post.
$response = _commerce_sagepay_request_post($server_url, $post);
// Collect additional data to store in the transaction.
$response['Amount'] = $wrapper->commerce_order_total->amount
->value();
$result = commerce_sagepay_process_response($payment_method, $order, $response);
$paypal_redirect = $response['PayPalRedirectURL'];
if ($paypal_redirect) {
drupal_goto($paypal_redirect);
}
else {
$result = FALSE;
}
return $result;
}