You are here

function _commerce_robokassa_transaction_load in Commerce robokassa 7.2

Payment transaction load helper.

Commerce robokassa 7.x-2.x send transaction GUID as shp_trx_id custom parameter.

Parameters

int $inv_id: Robokassa InvId value.

int $shp_trx_id: Commerce transaction GUID for 7.x-2.x, empty for 7.x-1.x.

float $amount: Payed order amount for 7.x-1.x compatibility.

object $payment_method: Payment method object user on transaction creation for 7.x-1.x compatibility.

Return value

object|bool Commerce payment transaction object or FALSE otherwise.

2 calls to _commerce_robokassa_transaction_load()
commerce_robokassa_status in ./commerce_robokassa.module
Page callback: commerce_robokassa/%commerce_robokassa_pm/%.
_commerce_robokassa_validate_post in ./commerce_robokassa.module
Helper to validate robokassa $_POST data.

File

./commerce_robokassa.module, line 128
Drupal Commerce Robokassa payment method.

Code

function _commerce_robokassa_transaction_load($inv_id, $shp_trx_id = FALSE, $amount = 0, $payment_method = FALSE) {
  if (!is_numeric($inv_id)) {
    return FALSE;
  }

  // Transaction key 'order_id' used for 7.x-1.x transactions.
  // Transaction key 'remote_id' used for 7.x-2.x transactions.
  $transaction_key = $shp_trx_id ? 'remote_id' : 'order_id';
  $transaction_key_val = $shp_trx_id ? $shp_trx_id : $inv_id;
  $query = new EntityFieldQuery();
  $query
    ->entityCondition('entity_type', 'commerce_payment_transaction')
    ->propertyCondition($transaction_key, $transaction_key_val)
    ->propertyCondition('payment_method', 'commerce_robokassa')
    ->range(0, 1);
  $result = $query
    ->execute();
  if (!isset($result['commerce_payment_transaction'])) {
    if (!$shp_trx_id) {
      $order = commerce_order_load($inv_id);
      $order_wrapper = entity_metadata_wrapper('commerce_order', $order);
      $currency_code = $order_wrapper->commerce_order_total->currency_code
        ->value();
      $amount = commerce_currency_decimal_to_amount($amount, $currency_code);
      $charge = array(
        'amount' => $amount,
        'currency_code' => $currency_code,
      );
      return commerce_robokassa_transaction($payment_method, $order, $charge);
    }
    return FALSE;
  }
  $transaction_ids = array_keys($result['commerce_payment_transaction']);
  $entities = entity_load('commerce_payment_transaction', $transaction_ids);
  return reset($entities);
}