You are here

function commerce_paypal_checkout_refund_form_submit in Commerce PayPal 7.2

Submit handler: process a refund request.

File

modules/checkout/includes/commerce_paypal_checkout.admin.inc, line 251
Administrative forms for the Paypal Checkout module.

Code

function commerce_paypal_checkout_refund_form_submit($form, &$form_state) {
  $transaction = $form_state['transaction'];
  $payment_method = $form_state['payment_method'];
  $order = $form_state['order'];
  $order_wrapper = entity_metadata_wrapper('commerce_order', $order);
  $order_total = $order_wrapper->commerce_order_total
    ->value();
  $api_client = commerce_paypal_checkout_api_client($form_state['payment_method']['settings']);
  $amount = commerce_currency_decimal_to_amount($form_state['values']['amount'], $order_total['currency_code']);
  $params = array(
    'amount' => array(
      'value' => commerce_paypal_checkout_price_amount($amount, $transaction->currency_code),
      'currency_code' => $transaction->currency_code,
    ),
  );
  try {
    $response = $api_client
      ->refundPayment($transaction->remote_id, $params);

    // Not sure this can happen...
    if (strtolower($response['status']) != 'completed') {
      drupal_set_message(t('Refund failed'));
    }
    else {
      drupal_set_message(t('Refund for @amount issued successfully.', array(
        '@amount' => commerce_currency_format($amount, $transaction->currency_code),
      )));

      // Create a new transaction to record the credit.
      $credit_transaction = commerce_payment_transaction_new($payment_method['method_id'], $order->order_id);
      $credit_transaction->instance_id = $payment_method['instance_id'];
      $credit_transaction->remote_id = $response['id'];
      $credit_transaction->amount = $amount * -1;
      $credit_transaction->currency_code = $transaction->currency_code;
      $credit_transaction->payload[REQUEST_TIME] = $response;
      $credit_transaction->status = COMMERCE_PAYMENT_STATUS_SUCCESS;
      $credit_transaction->remote_status = COMMERCE_CREDIT_CREDIT;
      $credit_transaction->message = t('Refunded to @remote_id.', array(
        '@remote_id' => $transaction->remote_id,
      ));

      // Save the credit transaction.
      commerce_payment_transaction_save($credit_transaction);
    }
  } catch (PayPalCheckoutHttpException $exception) {
    watchdog_exception('commerce_paypal_checkout', $exception);
    drupal_set_message(t('Refund failed'));
  }
  $form_state['redirect'] = 'admin/commerce/orders/' . $order->order_id . '/payment';
}