insanebear Developer Od Poland Člen od okt 2014 insanebear 13 jan 2015 13:22 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.
litecart Main Crew Od Sweden Člen od feb 2013 litecart 14 jan 2015 01:16 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'); }
insanebear Developer Od Poland Člen od okt 2014 insanebear 14 jan 2015 08:37 Ok. Stupid rookie mistake ;) I save the order first, then I passed the data and it should be the other way ;)
litecart Main Crew Od Sweden Člen od feb 2013 litecart 14 jan 2015 10:08 We are all rookies without that cup of coffee in the morning. :)