function commerce_amex_refund_transaction in Commerce American Express Payment Gateway (Amex) 7
Refund a transaction
Parameters
object $capture_transaction: Transaction to be refunded
decimal $amount: Ammount to be refunded as a decimal
Return value
boolean
1 call to commerce_amex_refund_transaction()
- commerce_amex_refund_form_submit in includes/
commerce_amex.admin.inc - Submit handler: process a prior authorization capture via AIM.
File
- ./
commerce_amex.module, line 1122 - Implements American Express payment gateway for use in Drupal Commerce.
Code
function commerce_amex_refund_transaction($capture_transaction, $amount) {
$return = FALSE;
$instance_id = $capture_transaction->instance_id;
$payment_method = commerce_payment_method_instance_load($instance_id);
$auth_transaction_id = $capture_transaction->data->order->reference;
$transaction = commerce_payment_transaction_new('amex_hosted', $capture_transaction->order_id);
$transaction->amount = -commerce_currency_decimal_to_amount($amount, $capture_transaction->currency_code);
$transaction->currency_code = $capture_transaction->currency_code;
$transaction->status = COMMERCE_PAYMENT_STATUS_PENDING;
$transaction->instance_id = $payment_method['instance_id'];
$transaction->remote_id = $capture_transaction->remote_id;
commerce_payment_transaction_save($transaction);
$data = new stdClass();
$data->apiOperation = 'REFUND';
$data->order['reference'] = $auth_transaction_id;
$data->transaction['amount'] = $amount;
$data->transaction['currency'] = $transaction->currency_code;
$data->transaction['reference'] = $transaction->transaction_id;
$data->sourceOfFunds['session'] = $transaction->remote_id;
$data->sourceOfFunds['type'] = 'CARD';
$url = $payment_method['settings']['txn_url'] . AMEX_TXN_PATH . $payment_method['settings']['merchant_id'] . '/order/' . (10000000000 + $auth_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 = 'Refunded';
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;
}
commerce_payment_transaction_save($transaction);
return $return;
}