You are here

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

Menu callback.

1 string reference to 'commerce_amex_update_transaction'
commerce_amex_menu in ./commerce_amex.module
Implements hook_menu

File

includes/commerce_amex.admin.inc, line 227
Administrative forms for the Amex module.

Code

function commerce_amex_update_transaction($order, $transaction) {
  if ($transaction->payment_method == 'amex_hosted' && $transaction->status == COMMERCE_PAYMENT_STATUS_AMEX_REVIEW) {
    $payment_method = commerce_payment_method_instance_load($transaction->instance_id);
    $url = $payment_method['settings']['txn_url'] . AMEX_TXN_PATH . $payment_method['settings']['merchant_id'] . '/order/' . (10000000000 + $transaction->transaction_id) . '/transaction/' . $transaction->transaction_id;
    $result = _commerce_amex_get_request($url, $payment_method['settings']['password']);
    if (isset($result->result) && $result->result == 'SUCCESS' && isset($result->response->risk->reviewResult)) {
      switch ($result->response->risk->reviewResult) {
        case 'ORDER_RELEASED':
          switch ($payment_method['settings']['txn_type']) {
            case AMEX_OP_AUTH:
              $transaction->status = COMMERCE_PAYMENT_STATUS_PENDING;
              break;
            case AMEX_OP_PAY:
              $transaction->status = COMMERCE_PAYMENT_STATUS_SUCCESS;
          }
          $transaction->remote_status = $result->response->gatewayCode;
          $transaction->message = $result->response->acquirerMessage;
          drupal_set_message(t('Transaction has been RELEASED'));
          break;
        case 'ORDER_CANCELLED':
          $transaction->status = COMMERCE_PAYMENT_STATUS_AMEX_CANCELED;
          $transaction->remote_status = $result->response->risk->reviewResult;
          $transaction->message = $result->response->acquirerMessage;
          drupal_set_message(t('Transaction has been CANCELED'));
          break;
        default:
          drupal_set_message(t('Transaction is still in REVIEW'));
          break;
      }
      $transaction->payload = $result;
      $transaction = commerce_payment_transaction_save($transaction);
    }
    else {
      $transaction = _commerce_amex_error_process($result, $transaction);
    }
  }
  drupal_goto('admin/commerce/orders/' . $order->order_id . '/payment');
}