Server : Apache/2.4.18 (Ubuntu) System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 User : oppastar ( 1041) PHP Version : 7.0.33-0ubuntu0.16.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, Directory : /var/www/kamariallee.com/public_html/application/controllers/ |
Upload File : |
<?php if (!defined('BASEPATH')) { exit('No direct script access allowed'); } class Payment_guest extends Public_Controller { private $curTotalShippingFee = 0; //Ipay88 private $ipay88ApiUrl = null; private $ipay88MerchantCode = null; private $ipay88MerchantKey = null; private $ipay88RedirectUrl = null; private $ipay88KamariCallbackUrl = null; private $ipay88KamariRedirectUrl = null; private $ipay88KamariResponseUrl = null; public function __construct() { parent::__construct(); $this->load->model('customer_m'); $this->load->model('order_m'); $this->load->model('order_detail_m'); $this->load->model('configuration_m'); $this->load->library('cart'); $this->load->helper('rajaongkir'); $this->load->library('form_validation'); $config = $this->db->select( 'ipay88_url, ipay88_merchantcode, ipay88_merchantkey, ipay88_redirect_url, ipay88_kamari_callback_url, ipay88_kamari_redirect_url, ipay88_kamari_response_url') ->from('configuration') ->where('id_configuration', 1) ->get() ->row_array(); $this->ipay88ApiUrl = $config['ipay88_url']; $this->ipay88MerchantCode = $config['ipay88_merchantcode']; $this->ipay88MerchantKey = $config['ipay88_merchantkey']; $this->ipay88RedirectUrl = $config['ipay88_redirect_url']; $this->ipay88KamariCallbackUrl = $config['ipay88_kamari_callback_url']; $this->ipay88KamariRedirectUrl = $config['ipay88_kamari_redirect_url']; $this->ipay88KamariResponseUrl = $config['ipay88_kamari_response_url']; } public function index() { if (!$this->cart->contents()) { redirect('cart'); } if (!$this->session->userdata('shipping_details')) { redirect('shipping_guest'); } $total_amount = $this->getOrderInfo(); $data['grand_total'] = $total_amount['grand_total']; $data['subtotals'] = $total_amount['subtotals']; $data['shipping'] = $total_amount['shipping']; $data['total_shipping_fee'] = $total_amount['total_shipping_fee']; //get SEO $this->db->select('website_name, meta_keywords, bank')->from('configuration')->where('id_configuration', 1); $website_name = $this->db->get()->row(); $data['bank_account'] = $website_name->bank; $this->data_header['browser_title'] = ucwords($website_name->website_name) . ' - Checkout'; $this->data_header['meta_description'] = ucwords($website_name->website_name) . ' - Checkout'; $this->data_header['meta_keywords'] = $website_name->meta_keywords; $this->load->view('template/header', $this->data_header); $this->load->view('payment_guest', $data); $this->load->view('template/footer', $this->data_footer); } private function getOrderInfo() { //calculate grand total $data['grand_total'] = 0; $data['subtotals'] = 0; $total_weight_gram = 0; foreach($this->cart->contents() as $item) { $data['subtotals'] = $data['subtotals'] + $item['subtotal']; if(isset($item['options']['greetingcard_price_int'])) { $data['subtotals'] = $data['subtotals'] + $item['options']['greetingcard_price_int']; } if(isset($item['options']['chosenHeelsTypePrice'])) { $data['subtotals'] = $data['subtotals'] + ($item['qty'] * $item['options']['chosenHeelsTypePrice']); } if(isset($item['options']['chosenHeelsHeightPrice'])) { $data['subtotals'] = $data['subtotals'] + ($item['qty'] * $item['options']['chosenHeelsHeightPrice']); } if(isset($item['options']['chosenPlatformStylePrice'])) { $data['subtotals'] = $data['subtotals'] + ($item['qty'] * $item['options']['chosenPlatformStylePrice']); } if(isset($item['options']['chosenPlatformHeightPrice'])) { $data['subtotals'] = $data['subtotals'] + ($item['qty'] * $item['options']['chosenPlatformHeightPrice']); } if(isset($item['options']['chosenInitialEngravedPrice'])) { $data['subtotals'] = $data['subtotals'] + ($item['qty'] * $item['options']['chosenInitialEngravedPrice']); } //get product weight $this->db->select('weight')->from('product_details')->where('product_id', $item['id'])->where('sku', $item['options']['sku']); $item_weight = $this->db->get()->row()->weight * $item['qty']; $total_weight_gram = $total_weight_gram + $item_weight; } //get customer shipping address detail $data['shipping'] = $this->session->userdata('shipping_details'); //calculate shipping fee //get active carrier from configuration table.. // $this->db->select('jne_reg, jne_yes, jne_oke, tiki_eco, tiki_reg, tiki_ons, pos_regular, pos_express, rpx_regular, rpx_retail, shop_delivery, shopdelivery_duration, shopdelivery_fee')->from('configuration')->where('id_configuration', 1); // $data['active_carrier'] = $this->db->get()->row(); // $data['shopdelivery_duration'] = $data['active_carrier']->shopdelivery_duration; //get subdistrict shop ID from configuration table $this->db->select('shop_subdistrict_id')->from('configuration')->where('id_configuration', 1); $shop_subdistrict_id = (int) $this->db->get()->row()->shop_subdistrict_id; //shipping to indonesia //shipping to outside indonesia // $this->session->set_userdata('carrier', 'jne'); // $this->session->set_userdata('carrier_name', 'JNE REGULAR'); if($data['shipping']->shipping_id_province == 6) { $data['carrier'] = 'jne_yes'; } else { $data['carrier'] = 'jne_regular'; } //get subdistrict destination ID $destination_subdistrict_id = (int) $data['shipping']['shipping_id_subdistrict']; //set shipping switch ($data['carrier']) { case 'jne_regular': $data['total_shipping_fee'] = $this->get_carrier_cost('jne', 'JNE REGULAR', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'REG', 'CTC'); break; case 'jne_yes': $data['total_shipping_fee'] = $this->get_carrier_cost('jne', 'JNE YES', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'YES', 'CTCYES'); break; case 'jne_oke': $data['total_shipping_fee'] = $this->get_carrier_cost('jne', 'JNE OKE', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'OKE'); break; case 'tiki_reg': $data['total_shipping_fee'] = $this->get_carrier_cost('tiki', 'TIKI REGULAR', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'REG'); break; case 'tiki_ons': $data['total_shipping_fee'] = $this->get_carrier_cost('tiki', 'TIKI ONS', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'ONS'); break; case 'tiki_eco': $data['total_shipping_fee'] = $this->get_carrier_cost('tiki', 'TIKI ECO', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'ECO'); break; case 'pos_regular': $data['total_shipping_fee'] = $this->get_carrier_cost('pos', 'POS KILAT KHUSUS', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'Surat Kilat Khusus'); break; case 'pos_express': $data['total_shipping_fee'] = $this->get_carrier_cost('pos', 'POS EXPRESS', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'Express Next Day'); break; case 'rpx_regular': $data['total_shipping_fee'] = $this->get_carrier_cost('rpx', 'RPX REGULAR', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'RGP'); break; case 'rpx_retail': $data['total_shipping_fee'] = $this->get_carrier_cost('rpx', 'RPX RETAIL', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'REP'); break; case 'shop_delivery': $this->session->set_userdata('carrier', 'shop_delivery'); $this->session->set_userdata('carrier_name', 'SHOP DELIVERY'); $data['total_shipping_fee'] = $data['active_carrier']->shopdelivery_fee; break; default: if($this->session->userdata('carrier')) { if($this->session->userdata('carrier_name') == 'JNE REGULAR') { $data['total_shipping_fee'] = $this->get_carrier_cost('jne', 'JNE REGULAR', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'REG', 'CTC'); } elseif($this->session->userdata('carrier_name') == 'JNE YES') { $data['total_shipping_fee'] = $this->get_carrier_cost('jne', 'JNE YES', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'YES', 'CTCYES'); break; } elseif($this->session->userdata('carrier_name') == 'JNE OKE') { $data['total_shipping_fee'] = $this->get_carrier_cost('jne', 'JNE OKE', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'OKE'); break; } elseif($this->session->userdata('carrier_name') == 'TIKI REGULAR') { $data['total_shipping_fee'] = $this->get_carrier_cost('tiki', 'TIKI REGULAR', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'REG'); break; } elseif($this->session->userdata('carrier_name') == 'TIKI ONS') { $data['total_shipping_fee'] = $this->get_carrier_cost('tiki', 'TIKI ONS', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'ONS'); break; } elseif($this->session->userdata('carrier_name') == 'TIKI ECO') { $data['total_shipping_fee'] = $this->get_carrier_cost('tiki', 'TIKI ECO', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'ECO'); break; } elseif($this->session->userdata('carrier_name') == 'POS KILAT KHUSUS') { $data['total_shipping_fee'] = $this->get_carrier_cost('pos', 'POS KILAT KHUSUS', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'Surat Kilat Khusus'); break; } elseif($this->session->userdata('carrier_name') == 'POS EXPRESS') { $data['total_shipping_fee'] = $this->get_carrier_cost('pos', 'POS EXPRESS', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'Express Next Day'); break; } elseif($this->session->userdata('carrier_name') == 'RPX REGULAR') { $data['total_shipping_fee'] = $this->get_carrier_cost('rpx', 'RPX REGULAR', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'RGP'); break; } elseif($this->session->userdata('carrier_name') == 'RPX RETAIL') { $data['total_shipping_fee'] = $this->get_carrier_cost('rpx', 'RPX RETAIL', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'REP'); break; } elseif($this->session->userdata('carrier_name') == 'SHOP DELIVERY') { $this->session->set_userdata('carrier', 'shop_delivery'); $this->session->set_userdata('carrier_name', 'SHOP DELIVERY'); $data['total_shipping_fee'] = $data['active_carrier']->shopdelivery_fee; break; } } else { if($data['active_carrier']->jne_reg == 1) { $data['total_shipping_fee'] = $this->get_carrier_cost('jne', 'JNE REGULAR', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'REG', 'CTC'); break; } elseif($data['active_carrier']->jne_yes == 1) { $data['total_shipping_fee'] = $this->get_carrier_cost('jne', 'JNE YES', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'YES', 'CTCYES'); break; } elseif($data['active_carrier']->jne_oke == 1) { $data['total_shipping_fee'] = $this->get_carrier_cost('jne', 'JNE OKE', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'OKE'); break; } elseif($data['active_carrier']->tiki_reg == 1) { $data['total_shipping_fee'] = $this->get_carrier_cost('tiki', 'TIKI REGULAR', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'REG'); break; } elseif($data['active_carrier']->tiki_ons == 1) { $data['total_shipping_fee'] = $this->get_carrier_cost('tiki', 'TIKI ONS', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'ONS'); break; } elseif($data['active_carrier']->tiki_eco == 1) { $data['total_shipping_fee'] = $this->get_carrier_cost('tiki', 'TIKI ECO', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'ECO'); break; } elseif($data['active_carrier']->pos_regular == 1) { $data['total_shipping_fee'] = $this->get_carrier_cost('pos', 'POS KILAT KHUSUS', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'Surat Kilat Khusus'); break; } elseif($data['active_carrier']->pos_express == 1) { $data['total_shipping_fee'] = $this->get_carrier_cost('pos', 'POS EXPRESS', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'Express Next Day'); break; } elseif($data['active_carrier']->rpx_regular == 1) { $data['total_shipping_fee'] = $this->get_carrier_cost('rpx', 'RPX REGULAR', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'RGP'); break; } elseif($data['active_carrier']->rpx_retail == 1) { $data['total_shipping_fee'] = $this->get_carrier_cost('rpx', 'RPX RETAIL', $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, 'REP'); break; } elseif($data['active_carrier']->shop_delivery == 1) { $this->session->set_userdata('carrier', 'shop_delivery'); $this->session->set_userdata('carrier_name', 'SHOP DELIVERY'); $data['total_shipping_fee'] = $data['active_carrier']->shopdelivery_fee; break; } } } //check if product has international custom order, then shipping fee == 0 $cart = $this->cart->contents(); $international_custom_shipping = false; foreach ($cart as $item) { //get product international_custom_order status $this->db->select('international_custom_order')->from('products')->where('id_products', (int) $item['id']); $is_international = $this->db->get()->row()->international_custom_order; if($is_international == 'yes') { $international_custom_shipping = true; break; } } if($international_custom_shipping) { $data['total_shipping_fee'] = 0; } $this->curTotalShippingFee = $data['total_shipping_fee']; $data['grand_total'] = $data['subtotals'] + $data['total_shipping_fee'] - $this->session->userdata('chosen_point_discount'); if($this->session->userdata('chosen_voucher_type') == 'amount') { $data['grand_total'] = $data['grand_total'] - $this->session->userdata('chosen_voucher_discount'); $this->session->set_userdata('redeemed_voucher_amount', $this->session->userdata('chosen_voucher_discount')); } elseif($this->session->userdata('chosen_voucher_type') == 'percentage') { $data['grand_total'] = $data['grand_total'] - ($data['product_grand_total'] * $this->session->userdata('chosen_voucher_discount')/100); $this->session->set_userdata('redeemed_voucher_amount', $data['product_grand_total'] * $this->session->userdata('chosen_voucher_discount')/100); } else { //voucher type is free shipping //do nothing... } return $data; } private function get_carrier_cost($carrier, $carrier_name, $shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, $service_code1, $service_code2 = null) { $this->session->set_userdata('carrier', $carrier); $this->session->set_userdata('carrier_name', $carrier_name); $rajaongkir_cost = get_rajaongkir_ongkos($shop_subdistrict_id, $destination_subdistrict_id, $total_weight_gram, $carrier); // echo '<pre>'; // print_r($rajaongkir_cost); // echo '</pre>'; // exit; //check if weight is zero. If zero, then rajaongkir cannot proceed.. if($total_weight_gram > 0) { //check which key has carrier name if($service_code2 != NULL) { if(isset($rajaongkir_cost['rajaongkir'])) { if(count($rajaongkir_cost['rajaongkir']['results'][0]['costs']) != 0) { foreach($rajaongkir_cost['rajaongkir']['results'][0]['costs'] as $key => $result) { if($result['service'] == $service_code1 || $result['service'] == $service_code2) { $total_shipping_fee = $result['cost'][0]['value']; break; } else { $total_shipping_fee = NULL; //service is not available } } } else { $total_shipping_fee = NULL; //service is not available } } else { $total_shipping_fee = NULL; //service is not available } } else { if(count($rajaongkir_cost['rajaongkir']['results'][0]['costs']) != 0) { foreach($rajaongkir_cost['rajaongkir']['results'][0]['costs'] as $key => $result) { if($result['service'] == $service_code1) { $total_shipping_fee = $result['cost'][0]['value']; break; } else { $total_shipping_fee = NULL; //service is not available } } } else { $total_shipping_fee = NULL; //service is not available } } } else { //total weight gram is zero $total_shipping_fee = NULL; //service is not available } return $total_shipping_fee; } public function process_payment() { if (!isset($_POST['process_payment'])) { redirect('payment_guest'); } switch ($this->input->post('payment_option')) { default: case 'manual transfer': $data['payment_type'] = 'bank transfer'; $data['payment_id'] = 0; break; case 'credit card': $data['payment_type'] = 'credit card'; $data['payment_id'] = 105; break; case 'BNI VA': $data['payment_type'] = 'BNI VA'; $data['payment_id'] = 83; break; case 'BRI VA': $data['payment_type'] = 'BRI VA'; $data['payment_id'] = 84; break; case 'CIMB VA': $data['payment_type'] = 'CIMB VA'; $data['payment_id'] = 86; break; case 'Mandiri VA': $data['payment_type'] = 'Mandiri VA'; $data['payment_id'] = 119; break; case 'Permata VA': $data['payment_type'] = 'Permata VA'; $data['payment_id'] = 112; break; case 'Maybank VA': $data['payment_type'] = 'Maybank VA'; $data['payment_id'] = 9; break; case 'OVO': $data['payment_type'] = 'OVO'; $data['payment_id'] = 63; break; case 'Shopee Pay': $data['payment_type'] = 'Shopee Pay'; $data['payment_id'] = 76; break; case 'Dana': $data['payment_type'] = 'Dana'; $data['payment_id'] = 77; break; case 'Qris': $data['payment_type'] = 'Qris'; $data['payment_id'] = 78; break; } $this->insertNewOrder($data['payment_type'], $data['payment_id']); //send email $this->sendEmail($data['payment_type'], $data['payment_id']); //SEO browser title and meta details homepage $this->db->select('browser_title, meta_description, meta_keywords') ->from('configuration')->where('id_configuration', 1); $website_name = $this->db->get()->row(); $this->data_header['browser_title'] = $website_name->browser_title; $this->data_header['meta_description'] = $website_name->meta_description; $this->data_header['meta_keywords'] = $website_name->meta_keywords; $this->load->view('template/header', $this->data_header); $this->load->view('banktransfer.php', $data); $this->load->view('template/footer', $this->data_footer); $this->destroySessionData(); } private function sendEmail($payment_type, $payment_id) { $data = array(); $data['payment_type'] = $payment_type; $data['payment_id'] = $payment_id; //get customer name $data['customer_name'] = $this->session->userdata('shipping_name'); //get website data $this->db->select('logo, from_email, website_name, email_smtp_host, email_smtp_port, email_smtp_password, email_smtp') ->from('configuration')->where('id_configuration', 1); $website_data = $this->db->get()->row(); $data['logo'] = $website_data->logo; $data['website_name'] = $website_data->website_name; $data['emails'] = $this->configuration_m->get_emails(); $data['bank'] = $this->configuration_m->get_bank(); $data['title'] = 'Payment'; //get order detail and customer detail $data['order'] = $this->order_m->get_order($this->session->userdata('order_id')); $data['order_details'] = $this->order_detail_m->get_orders_detail($this->session->userdata('order_id')); //get vouchers detail if ($this->session->userdata('chosen_voucher_code')) { $data['chosen_voucher_code'] = $this->session->userdata('chosen_voucher_code'); $data['chosen_voucher_type'] = $this->session->userdata('chosen_voucher_type'); $data['chosen_voucher_discount'] = $this->session->userdata('chosen_voucher_discount'); $data['redeemed_voucher_amount'] = $this->session->userdata('redeemed_voucher_amount'); } //get shipping fee total $data['carrier_name'] = $this->session->userdata('carrier_name'); $data['total_shipping_fee'] = $this->curTotalShippingFee; //add tax to email, if exist.. if($this->session->userdata('tax')) { $data['tax'] = $this->session->userdata('tax'); } //add point reward to email, if exist.. if($this->session->userdata('chosen_point')) { $data['chosen_point'] = $this->session->userdata('chosen_point'); $data['chosen_point_discount'] = $this->session->userdata('chosen_point_discount'); } $data['guest_account'] = true; $data['email'] = $this->session->userdata('shipping_details')['shipping_email']; $this->load->library('email'); //get email setting $config['protocol'] = 'smtp'; $config['smtp_host'] = $website_data->email_smtp_host; $config['smtp_port'] = $website_data->email_smtp_port; $config['smtp_user'] = $website_data->email_smtp; $config['smtp_pass'] = $website_data->email_smtp_password; $config['mailtype'] = 'html'; $config['charset'] = 'iso-8859-1'; $config['wordwrap'] = true; $config['newline'] = "\r\n"; //use double quotes to comply with RFC 822 standard $this->email->initialize($config); $this->email->from($data['emails']->from_email, $data['emails']->website_name); $this->email->to($this->session->userdata('shipping_details')['shipping_email']); $this->email->cc($data['emails']->from_email); $this->email->subject('Order Confirmation'); $email = $this->load->view('email/payment', $data, true); $this->email->message($email); $this->email->send(); //----end send email } private function insertNewOrder($payment_type, $payment_id) { $order_info = $this->getOrderInfo(); $grand_total = $order_info['grand_total']; $shipping = $order_info['shipping']; $total_shipping_fee = $order_info['total_shipping_fee']; $this->db->trans_start(); //insert new order to orders table $data = array( 'total_amount' => (int) $grand_total, 'payment_type' => $payment_type, 'recipient_name' => $shipping['shipping_name'], 'address' => $shipping['shipping_address'], 'country' => 'Indonesia', 'postcode' => $shipping['shipping_postcode'], 'phone' => $shipping['shipping_phone'], 'email' => $shipping['shipping_email'], 'order_date' => date('Y-m-d H:i:s'), 'shipping_type' => $this->session->userdata('carrier_name'), 'shipping_fee' => $total_shipping_fee, ); //add purchase notes if ($this->session->userdata('purchase_notes')) { $data['purchase_notes'] = $this->session->userdata('purchase_notes'); } //add voucher if ($this->session->userdata('chosen_voucher_code')) { $data['redeemed_voucher_code'] = $this->session->userdata('chosen_voucher_code'); $data['redeemed_voucher_amount'] = $this->session->userdata('redeemed_voucher_amount'); } //add tax if($this->session->userdata('tax')) { $data['ppn'] = $this->session->userdata('tax'); } //add point rewards if($this->session->userdata('add_point_reward')) { $data['plus_reward'] = $this->session->userdata('add_point_reward'); } //minus point rewards if($this->session->userdata('minus_point_reward')) { $data['minus_reward'] = $this->session->userdata('minus_point_reward'); $data['minus_reward_amount'] = $this->session->userdata('chosen_point_discount'); } //get district & province $data['district'] = $shipping['shipping_district']; $data['subdistrict'] = $shipping['shipping_subdistrict']; $data['province'] = $shipping['shipping_province']; //insert to orders table $data['order_id'] = $this->order_m->save($data, $id = null); //put order_id into session, to use for email or payment return page $this->session->set_userdata('order_id', $data['order_id']); //insert new order details to order details table $cart_items = $this->cart->contents(); foreach ($cart_items as $cart_item) { $item_data = array( 'orders_id' => (int) $data['order_id'], 'item_id' => (int) $cart_item['id'], 'item_name' => $cart_item['name'], 'item_price' => (int) $cart_item['price'], 'quantity' => (int) $cart_item['qty'], 'subtotal' => (int) $cart_item['price'] * (int) $cart_item['qty'], 'sku' => $cart_item['options']['sku'], 'attributes' => $cart_item['options']['size'] ); $attributes = array(); $attributes['color'] = $cart_item['options']['color']; $attributes['size'] = $cart_item['options']['size']; if(isset($cart_item['options']['greetingcard_text'])) { $attributes['greetingcard_text'] = $cart_item['options']['greetingcard_text']; $attributes['greetingcard_price_int'] = $cart_item['options']['greetingcard_price_int']; } if(isset($cart_item['options']['chosenHeelsType'])) { $attributes['chosenHeelsType'] = $cart_item['options']['chosenHeelsType']; $attributes['chosenHeelsTypePrice'] = $cart_item['options']['chosenHeelsTypePrice']; } if(isset($cart_item['options']['chosenHeelsHeight'])) { $attributes['chosenHeelsHeight'] = $cart_item['options']['chosenHeelsHeight']; $attributes['chosenHeelsHeightPrice'] = $cart_item['options']['chosenHeelsHeightPrice']; } if(isset($cart_item['options']['chosenPlatformStyle'])) { $attributes['chosenPlatformStyle'] = $cart_item['options']['chosenPlatformStyle']; $attributes['chosenPlatformStylePrice'] = $cart_item['options']['chosenPlatformStylePrice']; } if(isset($cart_item['options']['chosenPlatformHeight'])) { $attributes['chosenPlatformHeight'] = $cart_item['options']['chosenPlatformHeight']; $attributes['chosenPlatformHeightPrice'] = $cart_item['options']['chosenPlatformHeightPrice']; } if(isset($cart_item['options']['chosenInitialEngraved'])) { $attributes['chosenInitialEngraved'] = $cart_item['options']['chosenInitialEngraved']; $attributes['chosenInitialEngravedPrice'] = $cart_item['options']['chosenInitialEngravedPrice']; $attributes['chosenInitialEngravedImage'] = $cart_item['options']['chosenInitialEngravedImage']; } $item_data['attributes'] = json_encode($attributes); $this->order_detail_m->save($item_data, $id = null); //DEDUCT VOUCHERS FROM VOUCHER TABLE if ($this->session->userdata('chosen_voucher_code')) { $this->db->select('qty_ready')->from('vouchers') ->where('voucher_code', $this->session->userdata('chosen_voucher_code')); $qty_ready = $this->db->get()->row()->qty_ready; if ($qty_ready != null) { $new_qty_ready = $qty_ready - 1; $data = array( 'qty_ready' => $new_qty_ready, ); $this->db->where('voucher_code', $this->session->userdata('chosen_voucher_code')); $this->db->update('vouchers', $data); } } //UPDATE VOUCHER USER TABLE //get voucher id if ($this->session->userdata('chosen_voucher_code')) { $this->db->select('id_vouchers')->from('vouchers') ->where('voucher_code', $this->session->userdata('chosen_voucher_code')); $voucher_id = (int) $this->db->get()->row()->id_vouchers; //check if this voucher already been used before in voucher user table $this->db->select('id_voucher_users')->from('voucher_users') ->where('voucher_id', $voucher_id) ->where('customer_id', (int) $this->session->userdata('customer')['customer_id']); $count_voucher = $this->db->get()->num_rows(); if ($count_voucher == 0) { //voucher not exist yet, insert new voucher $data = array( 'voucher_id' => $voucher_id, 'customer_id' => (int) $this->session->userdata('customer')['customer_id'], 'voucher_used' => 1, ); $this->db->insert('voucher_users', $data); } else { //voucher already exist //get current used voucher quantity, and add 1 $this->db->select('id_voucher_users, voucher_used') ->from('voucher_users')->where('voucher_id', (int) $voucher_id) ->where('customer_id', (int) $this->session->userdata('customer')['customer_id']); $voucher_user = $this->db->get()->row(); $new_voucher_used = $voucher_user->voucher_used + 1; $data = array( 'voucher_used' => (int) $new_voucher_used, ); $this->db->where('id_voucher_users', $voucher_user->id_voucher_users); $this->db->update('voucher_users', $data); } } //DEDUCT CURRENT STOCK WITH PURCHASE QUANTITY //get current stock froms stocks table $this->db->select('stock'); $this->db->from('product_details'); $this->db->where('product_id', (int) $cart_item['id']); $this->db->where('sku', $cart_item['options']['sku']); $query = $this->db->get(); $stock = $query->row(); $current_stock = (int) $stock->stock; $new_item_stock = $current_stock - (int) $cart_item['qty']; $stock_data = array( 'stock' => $new_item_stock, ); //update the product item stock in database $this->db->where('product_id', (int) $cart_item['id']); $this->db->where('sku', $cart_item['options']['sku']); $this->db->update('product_details', $stock_data); } $this->db->trans_complete(); if($payment_id != 0) { $this->ipay88Processpayment($grand_total, $total_shipping_fee, $data['order_id'],$cart_items, $payment_id, $payment_type); } } //IPAY88 process payment private function ipay88Processpayment($amount, $total_shipping_fee, $refNo, $products, $payment_id, $payment_type) { //generate signature $signature = hash('sha256', '||' . $this->ipay88MerchantKey . '||' . $this->ipay88MerchantCode . '||' . $refNo . '||' . $amount . '||' . 'IDR' . '||'); $itemTransactions = array(); $sellers = array(); //add seller data to $sellers $seller_arr = array(); $seller_arr['Id'] = 'kamari'; $seller_arr['Name'] = 'Kamari Allee'; $seller_arr['LegalId'] = null; $seller_arr['SellerIdNumber'] = null; $seller_arr['Email'] = 'info@kamariallee.com'; $seller_arr['Url'] = 'www.kamariallee.com'; $seller_arr['address']['FirstName'] = 'Kamari'; $seller_arr['address']['LastName'] = 'Allee'; $seller_arr['address']['Address'] = 'Cluster Amerika Latin. Green Lake City'; $seller_arr['address']['City'] = 'Tangerang'; $seller_arr['address']['State'] = 'Banten'; $seller_arr['address']['PostalCode'] = '15147'; $seller_arr['address']['Phone'] = '081293359527'; $seller_arr['address']['CountryCode'] = 'IDN'; array_push($sellers, $seller_arr); //add products data to $itemTransactions foreach ($products as $cart_item) { $product_arr = array(); $product_arr['Id'] = $cart_item['id']; $product_arr['Name'] = $cart_item['name']; $product_arr['Quantity'] = $cart_item['qty']; $product_arr['Amount'] = (int) $cart_item['price'] * $cart_item['qty']; $product_arr['ParentType'] = 'SELLER'; $product_arr['ParentId'] = 'kamari'; array_push($itemTransactions, $product_arr); //add total shipping price to $itemTransactions array_push($itemTransactions, array( 'Id' => 'shipping-kamari', 'Name' => 'Shipping Fee', 'Quantity' => 1, 'Amount' => (int) $total_shipping_fee, 'ParentType' => 'SELLER', 'ParentId' => 'kamari' )); //get customer data //need name, phone, address, city, province, postcode (shipping address & billing address) $order = $this->db->select('recipient_name, address, district, subdistrict, province, postcode, phone, email') ->from ('orders') ->where('id_orders', $refNo)->get()->row_array(); $endpoint_url = $this->ipay88ApiUrl . 'ePayment/WebService/PaymentAPI/Checkout'; $request_body = array( 'APIVersion' => '2.0', 'MerchantCode' => $this->ipay88MerchantCode, 'PaymentId' => $payment_id, 'Currency' => 'IDR', 'RefNo' => $refNo, 'Amount' => $amount, 'ProdDesc' => 'shoes', 'RequestType' => 'REDIRECT', 'UserName' => ucwords($order['recipient_name']), 'UserEmail' => $order['email'], 'UserContact' => $order['phone'], 'Remark' => '', 'Lang' => 'iso-8859-1', 'ResponseURL' => $this->ipay88KamariResponseUrl, 'BackendURL' => $this->ipay88KamariCallbackUrl, 'Signature' => $signature, 'ItemTransactions' => $itemTransactions, 'BillingAddress' => array( 'FirstName' => ucwords($order['recipient_name']), 'LastName' => '', 'Address' => $order['address'], 'City' => $order['district'], 'State' => $order['province'], 'PostalCode' => $order['postcode'], 'Phone' => $order['phone'], 'CountryCode' => '1' ), 'Sellers' => $sellers ); $request_body['ShippingAddress']['FirstName'] = ucwords($order['recipient_name']); $request_body['ShippingAddress']['LastName'] = ''; $request_body['ShippingAddress']['Address'] = $order['address']; $request_body['ShippingAddress']['City'] = $order['district']; $request_body['ShippingAddress']['State'] = $order['province']; $request_body['ShippingAddress']['PostalCode'] = $order['postcode']; $request_body['ShippingAddress']['Phone'] = $order['phone']; $request_body['ShippingAddress']['CountryCode'] = '1'; $method = 'POST'; $headers = array(); $headers[] = 'Content-Type: application/json'; //store request log $request_data = array( 'ipay88_request_log' => json_encode(array( 'headers' => $headers, 'body' => $request_body )), ); $this->db->where('id_orders', $refNo); $this->db->update('orders', $request_data); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $endpoint_url ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_ENCODING, ''); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($request_body)); $result = curl_exec($ch); curl_close($ch); $response_data = json_decode($result); $response_data->redirect_url = $this->ipay88KamariRedirectUrl . '?url=' . $this->ipay88RedirectUrl . '&signature=' . $response_data->Signature . '&checkoutid=' . $response_data->CheckoutID; //store response log $update_data = array( 'ipay88_response_log' => $result ); $this->db->where('id_orders', $refNo); $this->db->update('orders', $update_data); //send email $this->sendEmail($payment_type, $payment_id); redirect($response_data->redirect_url); } } private function destroySessionData() { //DESTROY CART AND UNSET SOME SESSION, BUT NOT CUSTOMER SESSION $this->cart->destroy(); $this->session->unset_userdata('shipping_details'); $this->session->unset_userdata('grand_total'); $this->session->unset_userdata('recipient_name'); $this->session->unset_userdata('address'); $this->session->unset_userdata('id_district'); $this->session->unset_userdata('id_subdistrict'); $this->session->unset_userdata('id_province'); $this->session->unset_userdata('district'); $this->session->unset_userdata('subdistrict'); $this->session->unset_userdata('province'); $this->session->unset_userdata('country'); $this->session->unset_userdata('postcode'); $this->session->unset_userdata('phone'); $this->session->unset_userdata('order_id'); $this->session->unset_userdata('is_from_cart'); $this->session->unset_userdata('chosen_voucher_type'); $this->session->unset_userdata('chosen_voucher_discount'); $this->session->unset_userdata('chosen_voucher_code'); $this->session->unset_userdata('total_shipping_fee'); $this->session->unset_userdata('carrier'); $this->session->unset_userdata('carrier_name'); $this->session->unset_userdata('add_point_reward'); $this->session->unset_userdata('minus_point_reward'); $this->session->unset_userdata('chosen_point'); $this->session->unset_userdata('chosen_point_discount'); $this->session->unset_userdata('chosen_payment_type'); $this->session->unset_userdata('redeemed_voucher_amount'); $this->session->unset_userdata('tax'); $this->session->unset_userdata('purchase_notes'); } }