You are here

function commerce_amex_capture_transaction in Commerce American Express Payment Gateway (Amex) 7

Capture an autorised payment.

Parameters

unknown $order:

unknown $auth_transaction:

unknown $amount:

Return value

boolean

1 call to commerce_amex_capture_transaction()
commerce_amex_capture_form_submit in includes/commerce_amex.admin.inc
Submit handler: process a prior authorization capture via AIM.

File

./commerce_amex.module, line 917
Implements American Express payment gateway for use in Drupal Commerce.

Code

function commerce_amex_capture_transaction($auth_transaction, $amount) {
  $return = FALSE;
  $instance_id = $auth_transaction->instance_id;
  $payment_method = commerce_payment_method_instance_load($instance_id);
  $transaction = commerce_payment_transaction_new('amex_hosted', $auth_transaction->order_id);
  $transaction->amount = commerce_currency_decimal_to_amount($amount, $auth_transaction->currency_code);
  $transaction->currency_code = $auth_transaction->currency_code;
  $transaction->status = COMMERCE_PAYMENT_STATUS_PENDING;
  $transaction->instance_id = $payment_method['instance_id'];
  $transaction->remote_id = $auth_transaction->remote_id;
  commerce_payment_transaction_save($transaction);
  $data = new stdClass();
  $data->apiOperation = AMEX_OP_CAPTURE;
  $data->order['reference'] = $auth_transaction->transaction_id;
  $data->transaction['amount'] = $amount;
  $data->transaction['currency'] = $transaction->currency_code;
  $data->transaction['reference'] = $transaction->transaction_id;
  $url = $payment_method['settings']['txn_url'] . AMEX_TXN_PATH . $payment_method['settings']['merchant_id'] . '/order/' . (10000000000 + $auth_transaction->transaction_id) . '/transaction/' . $transaction->transaction_id;
  $result = _commerce_amex_put_request($url, $payment_method['settings']['password'], $data);
  $transaction->payload = $result;
  switch ($result->result) {
    case 'SUCCESS':
      $transaction->status = COMMERCE_PAYMENT_STATUS_SUCCESS;
      $transaction->remote_status = $result->response->gatewayCode;
      $transaction->message = 'Captured';
      $auth_transaction->amount = $auth_transaction->amount - $transaction->amount;
      drupal_set_message(t('Transaction was processed succesfully'));
      $return = TRUE;
      break;
    case 'PENDING':
      $transaction->status = COMMERCE_PAYMENT_STATUS_PENDING;
      $transaction->remote_status = $result->response->gatewayCode;
      $transaction->message = $result->response->acquirerMessage;
      drupal_set_message(t('Transaction pending'));
      $return = TRUE;
      break;
    case 'FAILURE':
      $transaction->status = COMMERCE_PAYMENT_STATUS_FAILURE;
      $transaction->remote_status = $result->response->gatewayCode;
      $transaction->message = $result->response->acquirerMessage;
      break;
    case 'UNKNOWN':
      drupal_set_message(t('There was a problem processing your transaction. Your credit/debit card was not charged. Please try again later.'), 'error');
      break;
    case 'ERROR':
      $transaction = _commerce_amex_error_process($result, $transaction);
      break;
  }
  if ($auth_transaction->amount == 0) {
    $auth_transaction->status = COMMERCE_PAYMENT_STATUS_SUCCESS;
  }
  commerce_payment_transaction_save($transaction);
  commerce_payment_transaction_save($auth_transaction);
  return $return;
}