Payment module problem

How to call public function verify() in public function transfer() ?

I don't have yet verification for my payments and i want to save order, reset cart, send email about new order and set order_status_id after click ""Place an order"" (and than go to payment)

I try something like this (in public function transfer()):

(...)
// Save order
  $order->save();

// Reset cart
  cart::reset();

// Send e-mails
  $order->email_order_copy($order->data['customer']['email']);
  foreach (explode(';', settings::get('email_order_copy')) as $email) {
    $order->email_order_copy($email);
  }

      $order->data['comments'][] = array(
        'text' => 'uid: '.$order->data['uid'],
      );

      $order->data['order_status_id'] = '6';

      return array(
        'action' => $dotpay_url,
        'method' => 'post',
        'fields' => $fields,
      );

...but it doesn't really works. The biggest problem is that order has status ""Unprocessed"" and if i place another order, the old one is overwritten.

Have a look at pages/order_process.inc.php

$payment = new mod_payment();

  if (count($payment->options()) > 0) {

    if ($payment_error = $payment->pre_check($order)) {
      notices::add('errors', $payment_error);
      header('Location: '. document::ilink('checkout'));
      exit;
    }

    if (isset($_POST['confirm_order'])) {

      if (!empty($_POST['comments'])) {
        $order->data['comments']['session']['text'] = $_POST['comments'];
      }

      if ($gateway = $payment->transfer($order)) {

        if (!empty($gateway['error'])) {
          notices::add('errors', $gateway['error']);
          header('Location: '. document::ilink('checkout'));
          exit;
        }

        switch (strtolower($gateway['method'])) {

          case 'post':
            echo ''. language::translate('title_redirecting', 'Redirecting') .'...' . PHP_EOL
               . '' . PHP_EOL;
            if (is_array($gateway['fields'])) {
              foreach ($gateway['fields'] as $key => $value) echo '  ' . functions::form_draw_hidden_field($key, $value) . PHP_EOL;
            } else {
              echo $gateway['fields'];
            }
            echo '' . PHP_EOL
               . '' . PHP_EOL;
            if (!empty($gateway['delay'])) {
              echo '  var t=setTimeout(function(){' . PHP_EOL
                 . '    document.forms[""gateway_form""].submit();' . PHP_EOL
                 . '  }, '. ($gateway['delay']*1000) .');' . PHP_EOL;
            } else {
              echo '  document.forms[""gateway_form""].submit();' . PHP_EOL;
            }
            echo '';
            exit;

          case 'html':
            echo $gateway['content'];
            require_once vmod::check(FS_DIR_HTTP_ROOT . WS_DIR_INCLUDES . 'app_footer.inc.php');
            exit;

          case 'get':
          default:
          header('Location: '. (!empty($gateway['action']) ? $gateway['action'] : document::ilink()));
          exit;
        }
      }
    }

  // Verify transaction
    $result = $payment->verify($order);

  // If payment error
    if (!empty($result['error'])) {
      notices::add('errors', $result['error']);
      header('Location: '. document::ilink('checkout'));
      exit;
    }

  // Set order status id
    if (isset($result['order_status_id'])) $order->data['order_status_id'] = $result['order_status_id'];

  // Set transaction id
    if (isset($result['transaction_id'])) $order->data['payment_transaction_id'] = $result['transaction_id'];
  }

In pages/ajax/checkout_summary.inc.php where we bake the session order object you can see how we recycle an unrocessed session order:

// Overwrite incompleted order in session
  if (!empty($order->data) && $order->data['customer']['id'] == customer::$data['id'] && empty($order->data['order_status_id'])) {
    $resume_id = $order->data['id'];
    $order = new ctrl_order('import_session');
    $order->data['id'] = $resume_id;
// New order based on session
  } else {
    $order = new ctrl_order('import_session');
  }

Ok. Stupid rookie mistake ;) I save the order first, then I passed the data and it should be the other way ;)

We are all rookies without that cup of coffee in the morning. :)

This thread has been closed due to long inactivity. Posting to it is not possible.
View code on GitHub