/** * process callback */ function paymentProcess($order_id, $crypt) { //hack for changing white space to + sign $crypt = str_replace(' ', '+', $crypt); require_once 'models/ecommerce/ecommerce_order.php'; $Order = new ecommerce_order(); //decode crypt $decoded = self::decryptAes($crypt, ECOMMERCE_TRANSACTION_PROTX_PASSWORD); //explode protx data parse_str($decoded, $response); $this->msgProtxStatus($response['Status']); $order_data = $Order->getOrder($order_id); $transaction_data['order_id'] = $order_data['id']; $transaction_data['pg_data'] = serialize($response); $transaction_data['currency_code'] = GLOBAL_DEFAULT_CURRENCY; if (is_numeric($response['Amount'])) { $transaction_data['amount'] = $response['Amount']; } else { $transaction_data['amount'] = 0; } $transaction_data['created'] = date('c'); $transaction_data['type'] = 'protx'; if ($response['Status'] == 'OK') { $transaction_data['status'] = 1; } else { $transaction_data['status'] = 0; } /** * insert */ if ($id = $this->Transaction->insert($transaction_data)) { // in payment_success must be everytime Status OK if ($response['Status'] == 'OK') { $Order->setStatus($order_id, 1); //send email to admin require_once 'models/common/common_email.php'; $EmailForm = new common_email(); $_Onxshop_Request = new Onxshop_Request("component/ecommerce/order_detail~order_id={$order_data['id']}~"); $order_data['order_detail'] = $_Onxshop_Request->getContent(); //this allows use customer data and company data in the mail template //is passed as DATA to template in common_email->_format $GLOBALS['common_email']['transaction'] = $transaction_data; $GLOBALS['common_email']['order'] = $order_data; if (!$EmailForm->sendEmail('new_order_paid', 'n/a', $order_data['client']['customer']['email'], $order_data['client']['customer']['first_name'] . " " . $order_data['client']['customer']['last_name'])) { msg('ecommerce_transaction: Cant send email.', 'error', 2); } if ($Order->conf['mail_to_address']) { if (!$EmailForm->sendEmail('new_order_paid', 'n/a', $Order->conf['mail_to_address'], $Order->conf['mail_to_name'])) { msg('ecommerce_transaction: Cant send email.', 'error', 2); } } } else { $Order->setStatus($order_id, 5); } return $id; } else { //to be sure... if ($response['Status'] == 'OK') { msg("Payment for order {$order_id} was successfully Authorised, but I cant save the transaction TxAuthNo {$pg_data['TxAuthNo']}!", 'error'); } msg("payment/protx: cannot insert serialized pg_data: {$transaction_data['pg_data']}", 'error'); return false; } }
/** * main action */ public function mainAction() { /** * check */ if (is_numeric($this->GET['id'])) { $order_id = $this->GET['id']; } else { return false; } /** * initialise */ require_once 'models/ecommerce/ecommerce_order.php'; $Order = new ecommerce_order(); /** * save */ if (isset($_POST['save'])) { //get order detail $order_data = $Order->getDetail($order_id); //prepare data for update $order_data['note_backoffice'] = $_POST['order']['note_backoffice']; //update order data if (!$Order->updateOrder($order_data)) { msg("Cannot update order data (Order ID {$order_id})", 'error'); } //update order status (warning: order status change can trigger other events affection order_data) if ($order_data['status'] != $_POST['order']['status']) { $order_data['status'] = $_POST['order']['status']; if (!$Order->setStatus($order_id, $_POST['order']['status'])) { msg("Cannot update order status (Order ID {$order_id})", 'error'); } onxshopGoTo("/backoffice/orders/{$order_id}/detail"); } } /** * get full detail (including relations) */ $full_order_data = $Order->getOrder($order_id); // status $status = $Order->conf['status']; // parse select box foreach ($status as $key => $s) { $s1['id'] = $key; $s1['name'] = $s; if ($s1['id'] == $full_order_data['status']) { $s1['selected'] = 'selected="selected"'; } else { $s1['selected'] = ''; } $this->tpl->assign('STATUS', $s1); $this->tpl->parse('content.status'); } // parse log foreach ($full_order_data['log'] as $log) { $log['name'] = $status[$log['status']]; $this->tpl->assign('STATUS', $log); $this->tpl->parse('content.log'); } if ($full_order_data['note_customer'] == '') { $full_order_data['note_customer'] = "n/a."; } $this->tpl->assign('ORDER', $full_order_data); /** * ACL */ if (!preg_match("/-warehouse\$/", $_SESSION['authentication']['username'])) { $this->tpl->parse('content.customer_detail'); $this->tpl->parse('content.accounting_detail'); } return true; }
/** * process callback */ function paymentProcess($order_id, $pg_data) { require_once 'models/ecommerce/ecommerce_order.php'; $Order = new ecommerce_order(); // check if $pg_data['VendorTxCode'] = $_GET['order_id'] //$this->msgProtxStatus($pg_data['Status']); $order_data = $Order->getOrder($order_id); //print_r($order_data); /** * optional: process payment method only if status = 0 unpaid or 5 failed payment * (better to save transaction every time) */ //if (!$this->checkOrderStatusValidForPayment($order_data['status'])) return false; $transaction_data['order_id'] = $order_data['id']; $transaction_data['pg_data'] = serialize($pg_data); $transaction_data['currency_code'] = GLOBAL_DEFAULT_CURRENCY; if (is_numeric($pg_data['authCost'])) { $transaction_data['amount'] = $pg_data['authCost']; } else { $transaction_data['amount'] = 0; } $transaction_data['created'] = date('c'); $transaction_data['type'] = 'worldpay'; if ($pg_data['transStatus'] == 'Y') { $transaction_data['status'] = 1; } else { $transaction_data['status'] = 0; } /** * check installation id */ if ($pg_data['installation'] != ECOMMERCE_TRANSACTION_WORLDPAY_INSID) { msg("payment/worldpay: wrong installation id {$pg_data['installation']}, serialized pg_data: {$transaction_data['pg_data']}", 'error'); return false; } /** * insert */ if ($id = $this->Transaction->insert($transaction_data)) { // in payment_success must be everytime Status OK if ($pg_data['transStatus'] == 'Y') { $Order->setStatus($order_id, 1); //send email to admin require_once 'models/common/common_email.php'; $EmailForm = new common_email(); $_Onxshop_Request = new Onxshop_Request("component/ecommerce/order_detail~order_id={$order_data['id']}~"); $order_data['order_detail'] = $_Onxshop_Request->getContent(); //this allows use customer data and company data in the mail template //is passed as DATA to template in common_email->_format $GLOBALS['common_email']['transaction'] = $transaction_data; $GLOBALS['common_email']['order'] = $order_data; if (!$EmailForm->sendEmail('new_order_paid', 'n/a', $order_data['client']['customer']['email'], $order_data['client']['customer']['first_name'] . " " . $order_data['client']['customer']['last_name'])) { msg("ecommerce_transaction: Can't send email.", 'error', 2); } if ($Order->conf['mail_to_address']) { if (!$EmailForm->sendEmail('new_order_paid', 'n/a', $Order->conf['mail_to_address'], $Order->conf['mail_to_name'])) { msg('ecommerce_transaction: Cant send email.', 'error', 2); } } /** * cancel immediatelly if it was only a test */ if ($pg_data['testMode'] == 100) { $Order->setStatus($order_id, 4); msg("Order #{$order_id} has been cancelled, because Worldpay testMode was active."); } } else { $Order->setStatus($order_id, 5); } return $id; } else { //to be sure... if ($pg_data['Status'] == 'OK') { msg("Payment for order {$order_id} was successfully Authorised, but I cant save the transaction id {$pg_data['transId']}!", 'error'); } msg("payment/worldpay: cannot insert serialized pg_data: {$transaction_data['pg_data']}", 'error'); return false; } }
/** * processNilPayment */ public function processNilPayment($order_data) { if (!is_array($order_data)) { return false; } if ($order_data['basket']['total'] > 0) { return false; } require_once 'models/ecommerce/ecommerce_order.php'; $EcommerceOrder = new ecommerce_order(); $EcommerceOrder->setCacheAble(false); //mark as payed $log_data_id = $EcommerceOrder->setStatus($order_data['id'], 1); return $log_data_id; }
/** * process callback */ function paymentProcess($order_id, $crypt) { //hack for changing white space to + sign $crypt = str_replace(' ', '+', $crypt); require_once 'models/ecommerce/ecommerce_order.php'; $Order = new ecommerce_order(); require_once 'lib/protx.functions.php'; //decode crypt $pg_data_x = simpleXor(base64Decode($crypt), ECOMMERCE_TRANSACTION_PROTX_PASSWORD); //explode protx data $pg_data = getToken($pg_data_x); /** * PROTX: * vpstxid [int] * avscv2 [int] * txauthno[int] * vpsstatus[int] */ /* $pg_data_x = explode('&', $pg_data_x); for ($i=1; $i<count($pg_data_x); $i++) { $param = explode('=', $pg_data_x[$i]); $pg_data[$param[0]] = $param[1]; } */ //print_r($pg_data); // check if $pg_data['VendorTxCode'] = $_GET['order_id'] $this->msgProtxStatus($pg_data['Status']); $order_data = $Order->getOrder($order_id); //print_r($order_data); /** * optional: save only orders in valid status */ /* if ($order_data['status'] == 1 || $order_data['status'] == 2 || $order_data['status'] == 3 || $order_data['status'] == 4) { msg("Ecommerce_transaction: Order in status New (paid), Dispatched, Completed, Cancelled", 'error', 2); msg("This order (id=$order_id) was already paid before.", 'error'); } */ $transaction_data['order_id'] = $order_data['id']; $transaction_data['pg_data'] = serialize($pg_data); $transaction_data['currency_code'] = GLOBAL_DEFAULT_CURRENCY; if (is_numeric($pg_data['Amount'])) { $transaction_data['amount'] = $pg_data['Amount']; } else { $transaction_data['amount'] = 0; } $transaction_data['created'] = date('c'); $transaction_data['type'] = 'protx'; if ($pg_data['Status'] == 'OK') { $transaction_data['status'] = 1; } else { $transaction_data['status'] = 0; } /** * insert */ if ($id = $this->Transaction->insert($transaction_data)) { // in payment_success must be everytime Status OK if ($pg_data['Status'] == 'OK') { $Order->setStatus($order_id, 1); //send email to admin require_once 'models/common/common_email.php'; $EmailForm = new common_email(); $_Onxshop_Request = new Onxshop_Request("component/ecommerce/order_detail~order_id={$order_data['id']}~"); $order_data['order_detail'] = $_Onxshop_Request->getContent(); //this allows use customer data and company data in the mail template //is passed as DATA to template in common_email->_format $GLOBALS['common_email']['transaction'] = $transaction_data; $GLOBALS['common_email']['order'] = $order_data; if (!$EmailForm->sendEmail('new_order_paid', 'n/a', $order_data['client']['customer']['email'], $order_data['client']['customer']['first_name'] . " " . $order_data['client']['customer']['last_name'])) { msg('ecommerce_transaction: Cant send email.', 'error', 2); } if ($Order->conf['mail_to_address']) { if (!$EmailForm->sendEmail('new_order_paid', 'n/a', $Order->conf['mail_to_address'], $Order->conf['mail_to_name'])) { msg('ecommerce_transaction: Cant send email.', 'error', 2); } } } else { $Order->setStatus($order_id, 5); } return $id; } else { //to be sure... if ($pg_data['Status'] == 'OK') { msg("Payment for order {$order_id} was successfully Authorised, but I cant save the transaction TxAuthNo {$pg_data['TxAuthNo']}!", 'error'); } msg("payment/protx: cannot insert serialized pg_data: {$transaction_data['pg_data']}", 'error'); return false; } }