https://t.me/RX1948
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/indolok.id/application/controllers/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/indolok.id/application/controllers/Midtrans.php
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Midtrans extends Public_controller {

	private $id_order = NULL; 
	
	function __construct() {
		parent::__construct();	
		$this->load->model('order_m');  
	}
	
	//when payment is success
	public function receive_veritrans_notification() {

		//Midtrans IP address allowed only
		/* $allowlist = array(
		    '103.208.23.0/24',
			'182.253.221.152/32',
			'103.58.103.177'
		);

		if(!in_array($_SERVER['REMOTE_ADDR'], $allowlist)){
		    show_404();
		}  */

		require_once APPPATH . 'third_party/Veritrans.php';
		
		$this->db->select('veritrans_server_key, veritrans_sandbox_server_key, veritrans_production_mode')->from('configuration')->where('id_configuration', 1);
		$veritrans = $this->db->get()->row();
		$production_mode = $veritrans->veritrans_production_mode; 

		if($production_mode == 'true') {
			Veritrans_Config::$isProduction = true;
			Veritrans_Config::$serverKey = $veritrans->veritrans_server_key;
		} else {
			Veritrans_Config::$isProduction = false;
			Veritrans_Config::$serverKey = $veritrans->veritrans_sandbox_server_key;
		}

		$notif = new Veritrans_Notification();

		$transaction = $notif->transaction_status;
		$type = $notif->payment_type;

		$order_id_array = explode('-', $notif->order_id);
		$order_id = (int) trim($order_id_array[0]);

		$this->id_order = $order_id;
		$fraud = $notif->fraud_status;

		$data = array(
			'log' => serialize($notif),
			'order_id' => $order_id
		);

		if($notif->va_numbers[0]->va_number) {
			$data['va_number'] = $notif->va_numbers[0]->va_number;
		} elseif($notif->permata_va_number) {
			$data['va_number'] = $notif->permata_va_number;			
		}
		$this->db->insert('midtrans_log', $data);	

		//insert va_number into orders table
		if($notif->va_numbers[0]->va_number || $notif->permata_va_number) {
			
			if($notif->va_numbers[0]->va_number) {

				$va_data['va_number'] = $notif->va_numbers[0]->va_number;
				$va_data['payment_method'] = 'Bank Transfer BCA';

			} elseif($notif->permata_va_number) {

				$va_data['va_number'] = $notif->permata_va_number;		
				$va_data['payment_method'] = 'Bank Transfer Permata';	
			}
			$this->db->where('id_orders', $order_id);
			$this->db->update('orders', $va_data);
		}
		
		switch($transaction) { 

			case 'capture':
			// For credit card transaction, we need to check whether transaction is challenge by FDS or not
			if ($type == 'credit_card') {

				if($fraud == 'challenge') {
					
					// TODO set payment status in merchant's database to 'Challenge by FDS'
					// TODO merchant should decide whether this transaction is authorized or not in MAP
					$data = array(
						'payment_status_message' => ucwords($transaction) . '. Fraud Status:' . $fraud,
						'payment_method' => $type
					);

					$this->db->where('id_orders', (int) $order_id);
					$this->db->update('orders', $data);

					echo "Transaction order_id: " . $order_id ." is challenged by FDS";
				
				} else {
					
					//Fraud status accept and transaction capture. Means payment is success
					//check payment status must not be 4 (process) or 5 (delivered)
					$this->db->select('payment_status')->from('orders')->where('id_orders', (int) $order_id);
					$current_payment_status = $this->db->get()->row()->payment_status;

					if($current_payment_status != 4 && $current_payment_status != 5) {

						// TODO set payment status in merchant's database to 'Success'
						$data = array(
							'payment_status' => 3, //paid
							'payment_status_message' => $transaction,
							'payment_confirm' => 1,
							'payment_date' => $notif->transaction_time,	
							'payment_method' => $type,
							'payment_type' => 'midtrans'
						);

						$this->db->where('id_orders', (int) $order_id);
						$this->db->update('orders', $data);

						//prevent adding point reward twice. Get midtrans_midtrans_already_process_status 
						$this->db->select('midtrans_process_finish')->from('orders')->where('id_orders', $order_id);
						$midtrans_process_finish = $this->db->get()->row()->midtrans_process_finish;

						if($midtrans_process_finish == 'no') {

							//update current point rewards
							//get customer_id
							$this->db->select('customer_id')->from('orders')->where('id_orders', $order_id);
							$customer_id = (int) $this->db->get()->row()->customer_id;

							//get customer current point
							$this->db->select('current_pointreward')->from('customers')->where('id_customers', $customer_id);
							$current_point = (int) $this->db->get()->row()->current_pointreward;

							//get add point from order
							$this->db->select('plus_reward')->from('orders')->where('id_orders', $order_id);
							$rewards = $this->db->get()->row();
							$plus_point = (int) $rewards->plus_reward;

							$updated_point = $current_point + $plus_point;

							//update point reward
							$data = array(
								'current_pointreward' => $updated_point
							);
							$this->db->where('id_customers', $customer_id);
							$this->db->update('customers', $data);

							//change status of midtrans_process_finish to yes
							$order_data = array(
								'midtrans_process_finish' => 'yes'
							);
							$this->db->where('id_orders', $order_id);
							$this->db->update('orders', $order_data);

							//----SEND EMAIL TO CUSTOMER 
							//get customer data
							$customer_id = $this->db->select('customer_id')->from('orders')->where('id_orders',$order_id)->get()->row()->customer_id;
							
							$this->db->select('name,phone,type, email')->from('customers')->where('id_customers', $customer_id);
							$data['customer_name'] = $this->db->get()->row();

							//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;

							//get order data
							$this->db->select('*')->from('orders')->where('id_orders', $order_id);
							$order = $this->db->get()->row();	

							$this->load->model('configuration_m');
							$this->load->model('order_m');
							$this->load->model('order_detail_m');

							$data['emails'] = $this->configuration_m->get_emails();  
							
							$data['title'] = 'Order Confirmation'; 

							//get order detail and customer detail
							$data['order'] = $this->order_m->get_order($order_id);
							$data['order_details'] = $this->order_detail_m->get_orders_detail($order_id); 

							//get vouchers detail
							if($order->redeemed_voucher_code != NULL) {
							  	$data['chosen_voucher_code'] = $order->redeemed_voucher_code;
							  	$data['chosen_voucher_type'] = $order->redeemed_voucher_type;
								$data['chosen_voucher_discount'] = $order->redeemed_voucher_value;
								$data['redeemed_voucher_amount'] = $order->redeemed_voucher_amount;
							 }   

							 //get shipping fee total
							 $data['carrier_name'] = $order->shipping_type;
							 $data['total_shipping_fee'] = $order->shipping_fee; 

							 //add tax to email, if exist..
							 if($order->ppn > 0) {
								$data['tax'] = $order->ppn;
							 }

							 //add point reward to email, if exist..
							 if($order->minus_reward > 0) {
								$data['chosen_point'] = $order->minus_reward;
								$data['chosen_point_discount'] = $order->minus_reward_amount;
							 }

							$this->load->library('email');
							//get email setting 
							$config['protocol'] = 'smtp';
							$config['smtp_crypto'] = 'tls'; 
							$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'] = 'utf-8';
							$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($data['customer_name']->email); 
							$this->email->cc($data['emails']->from_email); 
							$this->email->subject('Order Confirmation'); 
						
							$email = $this->load->view('email/indonesian/bank_transfer_indo', $data, TRUE); 
							$this->email->message($email);	    
							$this->email->send();  
							//----end send email 
						}

						echo "Transaction order_id: " . $order_id ." successfully captured using " . $type;
					}
				}
			} 

			break;

			case 'settlement':

				if ($type != 'credit_card') {

					//check payment status must not be 4 (process) or 5 (delivered)
					$this->db->select('payment_status')->from('orders')->where('id_orders', (int) $order_id);
					$current_payment_status = $this->db->get()->row()->payment_status;

					if($current_payment_status != 4 && $current_payment_status != 5) {
						
						$data = array(
							'payment_status' => 3, //paid
							'payment_status_message' => $transaction,
							'payment_confirm' => 1,
							'payment_date' => $notif->transaction_time,	
							'payment_type' => 'midtrans',
						);

						$this->db->where('id_orders', (int) $order_id);
						$this->db->update('orders', $data);

						//update current point rewards
						//get customer_id
						$this->db->select('customer_id')->from('orders')->where('id_orders', $order_id);
						$customer_id = (int) $this->db->get()->row()->customer_id;

						//get customer current point
						$this->db->select('current_pointreward')->from('customers')->where('id_customers', $customer_id);
						$current_point = (int) $this->db->get()->row()->current_pointreward;

						//get add point from order
						$this->db->select('plus_reward')->from('orders')->where('id_orders', $order_id);
						$rewards = $this->db->get()->row();
						$plus_point = (int) $rewards->plus_reward;

						$updated_point = $current_point + $plus_point;

						//update point reward
						$data = array(
							'current_pointreward' => $updated_point
						);
						$this->db->where('id_customers', $customer_id);
						$this->db->update('customers', $data);
						
						echo "Transaction order_id: " . $order_id ." successfully transfered using " . $type;
					}
				}

			break;

			case 'pending':
				// TODO set payment status in merchant's database to 'Pending'
				$data = array(
					'payment_status' => 1, //not paid
					'payment_status_message' => $transaction,
					'payment_confirm' => 0,
					'payment_type' => 'midtrans'
				);

				$this->db->where('id_orders', (int) $order_id);
				$this->db->update('orders', $data);

				if($type == 'bank_transfer') {

					//get order content
					$this->db->select('*')->from('orders')->where('id_orders', $order_id);
					$order_data = $this->db->get()->row();

					$finalshippingfee = 0;
					$calculate_finalshippingfee = $order_data->shipping_fee - $order_data->free_shipping_fee;
					if($calculate_finalshippingfee > 0){
						$finalshippingfee = $calculate_finalshippingfee;
					}

					$grand_total = (($order_data->total_amount - $order_data->redeemed_voucher_amount - $order_data->minus_reward_amount) + ($finalshippingfee)); 

					//get customer id
					$customer_id = $order_data->customer_id;

					//get customer handphone
					$this->db->select('phone')->from('customers')->where('id_customers', $customer_id);
					$phone = $this->db->get()->row()->phone;

					//get va_number from log
					$this->db->select('va_number')->from('midtrans_log')->where('order_id', $order_id);
					$va_number = $this->db->get()->row()->va_number;

					//send va number to sms
					//send sms code to user's phone by sms gateway..
					$url = 'http://gateway.siskomdigital.com:12010/cgi-bin/sendsms';

					if($notif->va_numbers[0]->bank) {

						$params = array( 'gw-username' => 'oky18003', 'gw-password' => '1qa2ws4r', 'gw-to' => '62' . $phone, 'gw-from' => 'Farmaku.com', 'gw-text' => 'Mohon transfer Rp. ' . number_format($grand_total) . ' ke ' . ucwords($notif->va_numbers[0]->bank) . ' Virtual Account ' .  $va_number . ' untuk pesanan Farmaku.com No Order ' . $order_id . ' ,valid selama 24 jam. Cek email untuk detail pesanan.',
							'gw-coding' => '1', 'gw-dlr-url' => base_url() . 'sms_receiver',
							'gw-dlr-mask' => '1'
						);

					} elseif($notif->permata_va_number) {

						$params = array( 'gw-username' => 'oky18003', 'gw-password' => '1qa2ws4r', 'gw-to' => '62' . $phone, 'gw-from' => 'Farmaku.com', 'gw-text' => 'Mohon transfer Rp. ' . number_format($grand_total) . ' ke ' . 'Permata' . ' Virtual Account ' .  $va_number . ' untuk pesanan Farmaku.com No Order ' . $order_id . ', valid selama 24 jam. Cek email untuk detail pesanan.',
							'gw-coding' => '1', 'gw-dlr-url' => base_url() . 'sms_receiver',
							'gw-dlr-mask' => '1'
						);
					}

					$ch = curl_init();
					curl_setopt($ch, CURLOPT_URL, $url);
					curl_setopt($ch, CURLOPT_POST, true);
					curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
					curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
					curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
					$response = curl_exec($ch);
					curl_close ($ch);
					//echo $response;
				}
				
				echo "Transaction order_id: " . $order_id ." pending using " . $type;

				break;

			case 'deny':

				//check payment status must not be 4 (process) or 5 (delivered)
				$this->db->select('payment_status')->from('orders')->where('id_orders', (int) $order_id);
				$current_payment_status = $this->db->get()->row()->payment_status;

				if($current_payment_status != 4 && $current_payment_status != 5) {

					$data = array(
						'payment_status' => 1, //not paid
						'payment_status_message' => $transaction,
						'payment_confirm' => 0
					);
					$this->db->where('id_orders', (int) $order_id);
					$this->db->update('orders', $data);
				}

				break;

			case 'expired':
			case 'cancel':

				$data = array(
					'payment_status_message' => ucwords($transaction),
					'payment_method' => $type
				);

				$this->db->where('id_orders', (int) $order_id);
				$this->db->update('orders', $data);
				
				echo "order_id: " . $order_id . " Method " . $type . " status " . $transaction;

			break;

		}
		
	}	

	public function veritrans_payment_success() {
		
		$order_id =  $this->session->userdata('midtrans_order_id');

		$this->db->select('*');
		$this->db->from('orders');
		$this->db->where('id_orders',$order_id);
		$this->data['order'] = $this->db->get()->row();

		$this->db->select('*');
		$this->db->from('orders_detail');
		$this->db->where('orders_id', $this->data['order']->id_orders);
		$orders_detail = $this->db->get()->result();	

		$this->data['owa'] = 'no';
		foreach($orders_detail as $item) {

			//get product item 
			$this->db->select('product_type')->from('products')->where('id_products', $item->item_id);
			$product_type_id = $this->db->get()->row()->product_type;

			if($product_type_id == 1) {
				$this->data['owa'] = 'yes';
			}
			break;
		}

		if($this->session->userdata('site_lang') == 'english') {
			$this->lang->load('order_history', 'english');
		} else {
			$this->lang->load('order_history', 'indonesian');
		}

		$this->cart->destroy();	

		//get SEO
		$this->data_header['browser_title'] = 'Midtrans Payment Success'; 
		$this->data_header['meta_description'] = 'Midtrans Payment Success';
		$this->data_header['meta_keywords'] = 'Midtrans Payment Success';
		
		$this->load->view("themes/$this->theme_no/header", $this->data_header);
		$this->load->view('veritrans_result/success',$this->data);
		$this->load->view("themes/$this->theme_no/footer", $this->data_footer); 
	} 

	public function veritrans_payment_pending() {

		$order_id =  $this->session->userdata('midtrans_order_id');

		$this->db->select('*');
		$this->db->from('orders');
		$this->db->where('id_orders',$order_id);
		$this->data['order'] = $this->db->get()->row();

		$this->db->select('*');
		$this->db->from('orders_detail');
		$this->db->where('orders_id', $this->data['order']->id_orders);
		$orders_detail = $this->db->get()->result();

		//get va number
		$this->db->select('va_number')->from('midtrans_log')->where('order_id', $order_id);
		$this->data['va_number'] =	$this->db->get()->row()->va_number;

		$this->data['owa'] = 'no';
		foreach($orders_detail as $item) {

			//get product item 
			$this->db->select('product_type')->from('products')->where('id_products', $item->item_id);
			$product_type_id = $this->db->get()->row()->product_type;

			if($product_type_id == 1) {
				$this->data['owa'] = 'yes';
			}
			break;
		}

		if($this->session->userdata('site_lang') == 'english') {
			$this->lang->load('order_history', 'english');
		} else {
			$this->lang->load('order_history', 'indonesian');
		}

		$this->cart->destroy();	

		//get SEO
		$this->data_header['browser_title'] = 'Midtrans Payment Pending'; 
		$this->data_header['meta_description'] = 'Midtrans Payment Pending';
		$this->data_header['meta_keywords'] = 'Midtrans Payment Pending';

		$this->load->view("themes/$this->theme_no/header", $this->data_header);
		$this->load->view('veritrans_result/pending',$this->data);
		$this->load->view("themes/$this->theme_no/footer", $this->data_footer); 
	}


	public function veritrans_payment_unfinish() {

		$this->cart->destroy();	

		//get SEO
		$this->data_header['browser_title'] = 'Midtrans Payment Unfinish'; 
		$this->data_header['meta_description'] = 'Midtrans Payment Unfinish';
		$this->data_header['meta_keywords'] = 'Midtrans Payment Unfinish';

		$this->load->view("themes/$this->theme_no/header", $this->data_header);
		$this->load->view('veritrans_result/unfinish');
		$this->load->view("themes/$this->theme_no/footer", $this->data_footer); 
	}


	public function veritrans_payment_error() {

		$this->cart->destroy();	

		//get SEO
		$this->data_header['browser_title'] = 'Midtrans Payment Error'; 
		$this->data_header['meta_description'] = 'Midtrans Payment Error';
		$this->data_header['meta_keywords'] = 'Midtrans Payment Error';

		$this->load->view("themes/$this->theme_no/header", $this->data_header);
		$this->load->view('veritrans_result/error');
		$this->load->view("themes/$this->theme_no/footer", $this->data_footer); 
	}  

	private function destroy_session_data() {

		if($this->session->userdata('customer')['customer_type'] == 'guest') {
			$this->session->unset_userdata('customer');	
		}

		//DESTROY CART AND UNSET SOME SESSION, BUT NOT CUSTOMER SESSION
		$this->cart->destroy();	
		$this->session->unset_userdata('midtrans_order_id');
		$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_categoryproduct_promo');
		$this->session->unset_userdata('redeemed_voucher_amount');
		$this->session->unset_userdata('total_shipping_fee'); 
		$this->session->unset_userdata('carrier'); 
		$this->session->unset_userdata('carrier_name'); 
		$this->session->unset_userdata('summary_message');
		$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('tax');
		$this->session->unset_userdata('productpage_to_cart');
		$this->session->unset_userdata('choose_dropship_status');
		$this->session->unset_userdata('destination_latitude');  
		$this->session->unset_userdata('destination_longitude');
		$this->session->unset_userdata('current_viewed_category_id');
		$this->session->unset_userdata('shipping_cart');
		$this->session->unset_userdata('prescription_uniqid');
	}
	
}

https://t.me/RX1948 - 2025