File: /www/wwwroot/wwwshoopermcom/application/controllers/Cart_controller.php
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Cart_controller extends Home_Core_Controller
{
/*
* Payment Types
*
* 1. sale: Product purchases
* 2. membership: Membership purchases
* 3. promote: Promote purchases
*
*/
public function __construct()
{
parent::__construct();
$this->session_cart_items = $this->cart_model->get_sess_cart_items();
$this->cart_model->calculate_cart_total($this->session_cart_items);
}
/**
* Cart
*/
public function cart()
{
$data['title'] = trans("shopping_cart");
$data['description'] = trans("shopping_cart") . " - " . $this->app_name;
$data['keywords'] = trans("shopping_cart") . "," . $this->app_name;
$data['cart_items'] = $this->session_cart_items;
$data['cart_total'] = $this->cart_model->get_sess_cart_total();
$data['cart_has_physical_product'] = $this->cart_model->check_cart_has_physical_product();
$this->load->view('partials/_header', $data);
$this->load->view('cart/cart', $data);
$this->load->view('partials/_footer');
}
/**
* Add to Cart
*/
public function add_to_cart()
{
$product_id = $this->input->post('product_id', true);
$is_ajax = $this->input->post('is_ajax', true);
$product = $this->product_model->get_active_product($product_id);
if (!empty($product)) {
if ($product->status != 1) {
$this->session->set_flashdata('product_details_error', trans("msg_error_cart_unapproved_products"));
} else {
$this->cart_model->add_to_cart($product);
if (empty($is_ajax)) {
redirect(generate_url("cart"));
}
}
}
if (empty($is_ajax)) {
redirect($this->agent->referrer());
} else {
$data = array(
'result' => 1,
'product_count' => get_cart_product_count()
);
echo json_encode($data);
}
}
/**
* Add to Cart qQuote
*/
public function add_to_cart_quote()
{
$quote_request_id = $this->input->post('id', true);
if (!empty($this->cart_model->add_to_cart_quote($quote_request_id))) {
redirect(generate_url("cart"));
}
redirect($this->agent->referrer());
}
/**
* Remove from Cart
*/
public function remove_from_cart()
{
$cart_item_id = $this->input->post('cart_item_id', true);
$this->cart_model->remove_from_cart($cart_item_id);
}
/**
* Update Cart Product Quantity
*/
public function update_cart_product_quantity()
{
$product_id = $this->input->post('product_id', true);
$cart_item_id = $this->input->post('cart_item_id', true);
$quantity = $this->input->post('quantity', true);
$this->cart_model->update_cart_product_quantity($product_id, $cart_item_id, $quantity);
}
/**
* Coupon Code Post
*/
public function coupon_code_post()
{
$coupon_code = $this->input->post('coupon_code', true);
$result = $this->cart_model->apply_coupon($coupon_code, $this->session_cart_items);
if (empty($result)) {
$this->session->set_flashdata('form_data', ['coupon_code' => $coupon_code]);
}
redirect(generate_url("cart"));
}
/**
* Shipping
*/
public function shipping()
{
$this->cart_model->validate_cart();
$data['title'] = trans("shopping_cart");
$data['description'] = trans("shopping_cart") . " - " . $this->app_name;
$data['keywords'] = trans("shopping_cart") . "," . $this->app_name;
$data['cart_items'] = $this->cart_model->get_sess_cart_items();
$data['mds_payment_type'] = 'sale';
if (empty($data['cart_items'])) {
redirect(generate_url("cart"));
}
//check shipping status
if ($this->product_settings->marketplace_shipping != 1) {
redirect(generate_url("cart"));
exit();
}
//check guest checkout
if (empty($this->auth_check) && $this->general_settings->guest_checkout != 1) {
redirect(generate_url("cart"));
exit();
}
//check auth for digital products
if (!$this->auth_check && $this->cart_model->check_cart_has_digital_product() == true) {
$this->session->set_flashdata('error', trans("msg_digital_product_register_error"));
redirect(generate_url("register"));
exit();
}
//check physical products
if ($this->cart_model->check_cart_has_physical_product() == false) {
redirect(generate_url("cart"));
exit();
}
$data['cart_total'] = $this->cart_model->get_sess_cart_total();
if ($data['cart_total']->is_stock_available != 1) {
redirect(generate_url("cart"));
exit();
}
$state_id = 0;
if ($this->auth_check) {
$data["shipping_addresses"] = $this->profile_model->get_shipping_addresses($this->auth_user->id);
$first_id = 0;
if (!empty($data["shipping_addresses"]) && !empty($data["shipping_addresses"][0])) {
$first_id = $data["shipping_addresses"][0]->id;
}
$data['selected_shipping_address_id'] = $first_id;
$data['selected_billing_address_id'] = $first_id;
$data['selected_same_address_for_billing'] = 1;
if (!empty($data["shipping_addresses"][0]->state_id)) {
$state_id = $data["shipping_addresses"][0]->state_id;
}
if (!empty($this->session->userdata('mds_cart_shipping'))) {
$selected_shipping = $this->session->userdata('mds_cart_shipping');
if (!empty($selected_shipping->user_id) && $selected_shipping->user_id == $this->auth_user->id) {
if (!empty($selected_shipping->shipping_address_id)) {
$data['selected_shipping_address_id'] = $selected_shipping->shipping_address_id;
}
if (!empty($selected_shipping->billing_address_id)) {
$data['selected_billing_address_id'] = $selected_shipping->billing_address_id;
}
if (!empty($selected_shipping->use_same_address_for_billing)) {
$data['selected_same_address_for_billing'] = $selected_shipping->use_same_address_for_billing;
}
$selected_address = $this->profile_model->get_shipping_address_by_id($data['selected_shipping_address_id']);
if (!empty($selected_address)) {
$state_id = $selected_address->state_id;
}
}
}
} else {
$mds_cart_shipping = get_sess_data('mds_cart_shipping');
if (!empty($mds_cart_shipping)) {
if (!empty($mds_cart_shipping->guest_shipping_address) && item_count($mds_cart_shipping->guest_shipping_address) > 0) {
if (!empty($mds_cart_shipping->guest_shipping_address['state_id'])) {
$state_id = $mds_cart_shipping->guest_shipping_address['state_id'];
}
}
}
}
if (!empty($state_id)) {
$data["shipping_methods"] = $this->shipping_model->get_seller_shipping_methods_array($data['cart_items'], $state_id);
}
$data['selected_shipping_method_ids'] = array();
if (!empty($this->session->userdata('mds_selected_shipping_method_ids'))) {
$data['selected_shipping_method_ids'] = $this->session->userdata('mds_selected_shipping_method_ids');
}
//cart seller ids
$data['cart_seller_ids'] = null;
if (!empty($this->session->userdata('mds_array_cart_seller_ids'))) {
$data['cart_seller_ids'] = $this->session->userdata('mds_array_cart_seller_ids');
}
$this->load->view('partials/_header', $data);
if ($this->auth_check) {
$this->load->view('cart/shipping_information', $data);
} else {
$this->load->view('cart/shipping_information_guest', $data);
}
$this->load->view('partials/_footer');
}
/**
* Shipping Post
*/
public function shipping_post()
{
$cart_shipping = new stdClass();
$cart_shipping->total_cost = 0;
$cart_shipping->use_same_address_for_billing = $this->input->post('use_same_address_for_billing', true);
if ($this->auth_check) {
$cart_shipping->user_id = $this->auth_user->id;
$cart_shipping->shipping_address_id = $this->input->post('shipping_address_id', true);
$cart_shipping->billing_address_id = $this->input->post('billing_address_id', true);
$cart_shipping->guest_shipping_address = null;
$cart_shipping->guest_billing_address = null;
if ($cart_shipping->use_same_address_for_billing == 1) {
$cart_shipping->billing_address_id = $cart_shipping->shipping_address_id;
}
$cart_shipping->is_guest = false;
} else {
$cart_shipping->user_id = 0;
$cart_shipping->guest_shipping_address = $this->cart_model->set_guest_shipping_address();
$cart_shipping->guest_billing_address = $this->cart_model->set_guest_billing_address();
if ($cart_shipping->use_same_address_for_billing == 1) {
$cart_shipping->guest_billing_address = $cart_shipping->guest_shipping_address;
}
$cart_shipping->is_guest = true;
}
$result = $this->shipping_model->calculate_cart_shipping_total_cost();
if (!empty($result) && $result['is_valid'] != 1) {
$this->session->set_flashdata('error', trans("msg_error"));
redirect($this->agent->referrer());
exit();
}
$data['cart_total'] = $this->cart_model->get_sess_cart_total();
if (!empty($data['cart_total']) && !empty($result['total_cost'])) {
$data['cart_total']->shipping_cost = $result['total_cost'];
$cart_shipping->total_cost = $result['total_cost'];
$this->session->set_userdata('mds_shopping_cart_total', $data['cart_total']);
}
$this->session->set_userdata('mds_cart_shipping', $cart_shipping);
redirect(generate_url("cart", "payment_method"));
exit();
}
/**
* Payment Method
*/
public function payment_method()
{
$data['title'] = trans("shopping_cart");
$data['description'] = trans("shopping_cart") . " - " . $this->app_name;
$data['keywords'] = trans("shopping_cart") . "," . $this->app_name;
$payment_type = input_get('payment_type');
if ($payment_type != "membership" && $payment_type != "promote") {
$payment_type = "sale";
}
if ($payment_type == "sale") {
$this->cart_model->validate_cart();
$data['vendor_cash_on_delivery'] = 1;
//sale payment
$data['cart_items'] = $this->cart_model->get_sess_cart_items();
if (!empty($data['cart_items'])) {
foreach ($data['cart_items'] as $item) {
$vendor = get_user($item->seller_id);
if (!empty($vendor)) {
if ($vendor->cash_on_delivery != 1) {
$data['vendor_cash_on_delivery'] = 0;
}
}
}
}
$data['mds_payment_type'] = "sale";
if ($data['cart_items'] == null) {
redirect(generate_url("cart"));
}
//check auth for digital products
if (!$this->auth_check && $this->cart_model->check_cart_has_digital_product() == true) {
$this->session->set_flashdata('error', trans("msg_digital_product_register_error"));
redirect(generate_url("register"));
exit();
}
$data['cart_total'] = $this->cart_model->get_sess_cart_total();
$user_id = null;
if ($this->auth_check) {
$user_id = $this->auth_user->id;
}
$data['cart_has_physical_product'] = $this->cart_model->check_cart_has_physical_product();
$data['cart_has_digital_product'] = $this->cart_model->check_cart_has_digital_product();
$this->cart_model->unset_sess_cart_payment_method();
$data['show_shipping_cost'] = 1;
} elseif ($payment_type == 'membership') {
//membership payment
if ($this->general_settings->membership_plans_system != 1) {
redirect(lang_base_url());
exit();
}
$data['mds_payment_type'] = 'membership';
$plan_id = $this->session->userdata('modesy_selected_membership_plan_id');
if (empty($plan_id)) {
redirect(lang_base_url());
exit();
}
$data['plan'] = $this->membership_model->get_plan($plan_id);
if (empty($data['plan'])) {
redirect(lang_base_url());
exit();
}
} elseif ($payment_type == 'promote') {
//promote payment
if ($this->general_settings->promoted_products != 1) {
redirect(lang_base_url());
}
$data['mds_payment_type'] = 'promote';
$data['promoted_plan'] = $this->session->userdata('modesy_selected_promoted_plan');
if (empty($data['promoted_plan'])) {
redirect(lang_base_url());
}
}
$this->load->view('partials/_header', $data);
$this->load->view('cart/payment_method', $data);
$this->load->view('partials/_footer');
}
/**
* Payment Method Post
*/
public function payment_method_post()
{
$mds_payment_type = $this->input->post('mds_payment_type', true);
//validate payment method
$array_methods = array();
$gateways = get_active_payment_gateways();
if (!empty($gateways)) {
foreach ($gateways as $gateway) {
array_push($array_methods, html_escape($gateway->name_key));
}
}
if ($this->payment_settings->bank_transfer_enabled) {
array_push($array_methods, 'bank_transfer');
}
//check vendor enabled cash on delivery
$vendor_cash_on_delivery = 1;
$cart_items = $this->cart_model->get_sess_cart_items();
if (!empty($cart_items)) {
foreach ($cart_items as $item) {
$vendor = get_user($item->seller_id);
if (!empty($vendor)) {
if ($vendor->cash_on_delivery != 1) {
$vendor_cash_on_delivery = 0;
}
}
}
}
if ($this->payment_settings->cash_on_delivery_enabled && $mds_payment_type == "sale" && $vendor_cash_on_delivery == 1 && empty($this->cart_model->check_cart_has_digital_product())) {
array_push($array_methods, 'cash_on_delivery');
}
$payment_option = $this->input->post('payment_option', true);
if (!in_array($payment_option, $array_methods)) {
$this->session->set_flashdata('error', trans("msg_error"));
redirect(generate_url("cart", "payment_method"));
exit();
}
$this->cart_model->set_sess_cart_payment_method();
$redirect = lang_base_url();
if ($mds_payment_type == "sale") {
$redirect = generate_url("cart", "payment");
} elseif ($mds_payment_type == 'membership') {
$transaction_number = 'bank-' . generate_transaction_number();
$this->session->set_userdata('mds_membership_bank_transaction_number', $transaction_number);
$redirect = generate_url("cart", "payment") . "?payment_type=membership";
} elseif ($mds_payment_type == 'promote') {
$transaction_number = 'bank-' . generate_transaction_number();
$this->session->set_userdata('mds_promote_bank_transaction_number', $transaction_number);
$redirect = generate_url("cart", "payment") . "?payment_type=promote";
}
redirect($redirect);
}
/**
* Payment
*/
public function payment()
{
$data['title'] = trans("shopping_cart");
$data['description'] = trans("shopping_cart") . " - " . $this->app_name;
$data['keywords'] = trans("shopping_cart") . "," . $this->app_name;
$data['mds_payment_type'] = "sale";
//check guest checkout
if (empty($this->auth_check) && $this->general_settings->guest_checkout != 1) {
redirect(generate_url("cart"));
exit();
}
//check is set cart payment method
$data['cart_payment_method'] = $this->cart_model->get_sess_cart_payment_method();
if (empty($data['cart_payment_method'])) {
redirect(generate_url("cart", "payment_method"));
}
$payment_type = input_get('payment_type');
if ($payment_type != "membership" && $payment_type != "promote") {
$payment_type = "sale";
}
if ($payment_type == "sale") {
$this->cart_model->validate_cart();
//sale payment
$data['cart_items'] = $this->cart_model->get_sess_cart_items();
if ($data['cart_items'] == null) {
redirect(generate_url("cart"));
}
$data['cart_total'] = $this->cart_model->get_sess_cart_total();
$data['cart_has_physical_product'] = $this->cart_model->check_cart_has_physical_product();
$obj_amount = $this->cart_model->convert_currency_by_payment_gateway($data['cart_total']->total, "sale");
$data['total_amount'] = $obj_amount->total;
$data['currency'] = $obj_amount->currency;
if (filter_var($data['total_amount'], FILTER_VALIDATE_INT) === false) {
$data['total_amount'] = number_format($data['total_amount'], 2, ".", "");
}
//set payment session
if (!empty($data['cart_items'])) {
$this->session->set_userdata('mds_shopping_cart_final', $data['cart_items']);
}
if (!empty($data['cart_total'])) {
$this->session->set_userdata('mds_shopping_cart_total_final', $data['cart_total']);
}
$data['show_shipping_cost'] = 1;
} elseif ($payment_type == 'membership') {
//membership payment
if ($this->general_settings->membership_plans_system != 1) {
redirect(lang_base_url());
exit();
}
$data['mds_payment_type'] = 'membership';
$plan_id = $this->session->userdata('modesy_selected_membership_plan_id');
if (empty($plan_id)) {
redirect(lang_base_url());
exit();
}
$data['plan'] = $this->membership_model->get_plan($plan_id);
if (empty($data['plan'])) {
redirect(lang_base_url());
exit();
}
//total amount
$price = $data['plan']->price;
if ($this->payment_settings->currency_converter != 1) {
$price = get_price($price, 'decimal');
}
$obj_amount = $this->cart_model->convert_currency_by_payment_gateway($price, "membership");
$data['total_amount'] = $obj_amount->total;
$data['currency'] = $obj_amount->currency;
$data['transaction_number'] = $this->session->userdata('mds_membership_bank_transaction_number');
$data['cart_total'] = null;
} elseif ($payment_type == 'promote') {
//promote payment
if ($this->general_settings->promoted_products != 1) {
redirect(lang_base_url());
}
$data['mds_payment_type'] = 'promote';
$data['promoted_plan'] = $this->session->userdata('modesy_selected_promoted_plan');
if (empty($data['promoted_plan'])) {
redirect(lang_base_url());
}
//total amount
$obj_amount = $this->cart_model->convert_currency_by_payment_gateway($data['promoted_plan']->total_amount, "promote");
$data['total_amount'] = $obj_amount->total;
$data['currency'] = $obj_amount->currency;
$data['transaction_number'] = $this->session->userdata('mds_promote_bank_transaction_number');
$data['cart_total'] = null;
}
$this->load->view('partials/_header', $data);
$this->load->view('cart/payment', $data);
$this->load->view('partials/_footer');
}
/**
* Payment with Paypal
*/
public function paypal_payment_post()
{
$payment_id = $this->input->post('payment_id', true);
$this->load->library('paypal');
//validate the order
if ($this->paypal->get_order($payment_id)) {
$data_transaction = array(
'payment_method' => "PayPal",
'payment_id' => $payment_id,
'currency' => $this->input->post('currency', true),
'payment_amount' => $this->input->post('payment_amount', true),
'payment_status' => $this->input->post('payment_status', true),
);
$mds_payment_type = $this->input->post('mds_payment_type', true);
//add order
$response = $this->execute_payment($data_transaction, $mds_payment_type, lang_base_url());
if ($response->result == 1) {
$this->session->set_flashdata('success', $response->message);
echo json_encode([
'result' => 1,
'redirect_url' => $response->redirect_url
]);
} else {
$this->session->set_flashdata('error', $response->message);
echo json_encode([
'result' => 0
]);
}
} else {
$this->session->set_flashdata('error', trans("msg_error"));
echo json_encode([
'result' => 0
]);
}
}
/**
* Payment with Stripe
*/
public function stripe_payment_post()
{
$stripe = get_payment_gateway('stripe');
if (empty($stripe)) {
$this->session->set_flashdata('error', "Payment method not found!");
echo json_encode([
'result' => 0
]);
exit();
}
$payment_session = $this->session->userdata('mds_payment_cart_data');
if (empty($payment_session)) {
$this->session->set_flashdata('error', trans("invalid_attempt"));
echo json_encode([
'result' => 0
]);
exit();
}
$paymentObject = $this->input->post('paymentObject', true);
if (!empty($paymentObject)) {
$paymentObject = json_decode($paymentObject);
}
$clientSecret = $this->session->userdata('mds_stripe_client_secret');
if (!empty($paymentObject) && $paymentObject->client_secret == $clientSecret) {
$data_transaction = array(
'payment_method' => $stripe->name,
'payment_id' => $paymentObject->id,
'currency' => strtoupper($paymentObject->currency),
'payment_amount' => get_price($paymentObject->amount, 'decimal'),
'payment_status' => "Succeeded"
);
//add order
$response = $this->execute_payment($data_transaction, $payment_session->payment_type, lang_base_url());
if ($response->result == 1) {
$this->session->set_flashdata('success', $response->message);
echo json_encode([
'result' => 1,
'redirect_url' => $response->redirect_url
]);
} else {
$this->session->set_flashdata('error', $response->message);
echo json_encode([
'result' => 0
]);
}
} else {
$this->session->set_flashdata('error', trans("msg_error"));
echo json_encode([
'result' => 0
]);
}
@$this->session->unset_userdata('mds_stripe_client_secret');
}
/**
* Payment with PayStack
*/
public function paystack_payment_post()
{
$this->load->library('paystack');
$data_transaction = array(
'payment_method' => "PayStack",
'payment_id' => $this->input->post('payment_id', true),
'currency' => $this->input->post('currency', true),
'payment_amount' => get_price($this->input->post('payment_amount', true), 'decimal'),
'payment_status' => $this->input->post('payment_status', true),
);
if (empty($this->paystack->verify_transaction($data_transaction['payment_id']))) {
$this->session->set_flashdata('error', 'Invalid transaction code!');
echo json_encode([
'result' => 0
]);
} else {
$mds_payment_type = $this->input->post('mds_payment_type', true);
//add order
$response = $this->execute_payment($data_transaction, $mds_payment_type, lang_base_url());
if ($response->result == 1) {
$this->session->set_flashdata('success', $response->message);
echo json_encode([
'result' => 1,
'redirect_url' => $response->redirect_url
]);
} else {
$this->session->set_flashdata('error', $response->message);
echo json_encode([
'result' => 0
]);
}
}
}
/**
* Payment with Razorpay
*/
public function razorpay_payment_post()
{
$this->load->library('razorpay');
$data_transaction = array(
'payment_method' => "Razorpay",
'payment_id' => $this->input->post('payment_id', true),
'razorpay_order_id' => $this->input->post('razorpay_order_id', true),
'razorpay_signature' => $this->input->post('razorpay_signature', true),
'currency' => $this->input->post('currency', true),
'payment_amount' => get_price($this->input->post('payment_amount', true), 'decimal'),
'payment_status' => 'Succeeded',
);
if (empty($this->razorpay->verify_payment_signature($data_transaction))) {
$this->session->set_flashdata('error', 'Invalid signature passed!');
echo json_encode([
'result' => 0
]);
} else {
$mds_payment_type = $this->input->post('mds_payment_type', true);
//add order
$response = $this->execute_payment($data_transaction, $mds_payment_type, lang_base_url());
if ($response->result == 1) {
$this->session->set_flashdata('success', $response->message);
echo json_encode([
'result' => 1,
'redirect_url' => $response->redirect_url
]);
} else {
$this->session->set_flashdata('error', $response->message);
echo json_encode([
'result' => 0
]);
}
}
}
/**
* Payment with Flutterwave
*/
public function flutterwave_payment_post()
{
$flutterwave = get_payment_gateway('flutterwave');
if (empty($flutterwave)) {
$this->session->set_flashdata('error', "Payment method not found!");
$this->redirect_back_to_payment(lang_base_url());
}
$payment_session = $this->session->userdata('mds_payment_cart_data');
if (empty($payment_session)) {
$this->session->set_flashdata('error', trans("invalid_attempt"));
$this->redirect_back_to_payment(lang_base_url());
}
$transaction_id = input_get('transaction_id');
$tx_ref = input_get('tx_ref');
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.flutterwave.com/v3/transactions/" . $transaction_id . "/verify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json",
"Authorization: Bearer " . $flutterwave->secret_key
),
));
$curlResponse = curl_exec($curl);
curl_close($curl);
$responseObj = json_decode($curlResponse);
if (!empty($responseObj) && isset($responseObj->status) && $responseObj->status == 'success' && $payment_session->mds_payment_token == $tx_ref) {
$data_transaction = array(
'payment_method' => $flutterwave->name,
'payment_id' => $transaction_id,
'currency' => isset($responseObj->data->currency) ? $responseObj->data->currency : 'unset',
'payment_amount' => isset($responseObj->data->amount) ? $responseObj->data->amount : 0,
'payment_status' => "Succeeded"
);
//add order
$response = $this->execute_payment($data_transaction, $payment_session->payment_type, lang_base_url());
if ($response->result == 1) {
$this->session->set_flashdata('success', $response->message);
redirect($response->redirect_url);
} else {
$this->session->set_flashdata('error', $response->message);
redirect($response->redirect_url);
}
} else {
$this->session->set_flashdata('error', trans("msg_error"));
$this->redirect_back_to_payment($lang_base_url);
}
}
/**
* Payment with Iyzico
*/
public function iyzico_payment_post()
{
$lang = input_get("lang");
$lang_base_url = lang_base_url();
if ($lang != $this->selected_lang->short_form) {
$lang_base_url = base_url() . $lang . "/";
}
$iyzico = get_payment_gateway('iyzico');
if (empty($iyzico)) {
$this->session->set_flashdata('error', "Payment method not found!");
$this->redirect_back_to_payment($lang_base_url);
}
require_once(APPPATH . 'third_party/iyzipay/vendor/autoload.php');
require_once(APPPATH . 'third_party/iyzipay/vendor/iyzico/iyzipay-php/IyzipayBootstrap.php');
$token = $this->input->post('token', true);
$conversation_id = $this->input->get('conversation_id', true);
$payment_type = $this->input->get('payment_type', true);
IyzipayBootstrap::init();
$options = new \Iyzipay\Options();
$options->setApiKey($iyzico->public_key);
$options->setSecretKey($iyzico->secret_key);
if ($iyzico->environment == "sandbox") {
$options->setBaseUrl("https://sandbox-api.iyzipay.com");
} else {
$options->setBaseUrl("https://api.iyzipay.com");
}
$request = new \Iyzipay\Request\RetrieveCheckoutFormRequest();
$request->setLocale(\Iyzipay\Model\Locale::TR);
$request->setConversationId($conversation_id);
$request->setToken($token);
$checkoutForm = \Iyzipay\Model\CheckoutForm::retrieve($request, $options);
if ($checkoutForm->getPaymentStatus() == "SUCCESS") {
$data_transaction = array(
'payment_method' => "Iyzico",
'payment_id' => $checkoutForm->getPaymentId(),
'currency' => $checkoutForm->getCurrency(),
'payment_amount' => $checkoutForm->getPrice(),
'payment_status' => "Succeeded"
);
//add order
$response = $this->execute_payment($data_transaction, $payment_type, $lang_base_url);
if ($response->result == 1) {
$this->session->set_flashdata('success', $response->message);
redirect($response->redirect_url);
} else {
$this->session->set_flashdata('error', $response->message);
redirect($response->redirect_url);
}
} else {
$this->session->set_flashdata('error', trans("msg_error"));
$this->redirect_back_to_payment($lang_base_url);
}
}
/**
* Payment with Midtrans
*/
public function midtrans_payment_post()
{
$midtrans = get_payment_gateway('midtrans');
if (empty($midtrans)) {
$this->session->set_flashdata('error', "Payment method not found!");
echo json_encode([
'result' => 0
]);
exit();
}
$payment_session = $this->session->userdata('mds_payment_cart_data');
if (empty($payment_session)) {
$this->session->set_flashdata('error', trans("invalid_attempt"));
echo json_encode([
'result' => 0
]);
exit();
}
$transaction_id = $this->input->post('transaction_id', true);
$curl = curl_init();
$curlURL = "https://api.sandbox.midtrans.com/v2/" . $transaction_id . "/status";
if ($midtrans->environment == "production") {
$curlURL = "https://api.midtrans.com/v2/" . $transaction_id . "/status";
}
curl_setopt_array($curl, array(
CURLOPT_URL => $curlURL,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Accept: application/json",
"Content-Type: application/json",
"Authorization: Basic " . base64_encode($midtrans->secret_key)
],
));
$curlResponse = curl_exec($curl);
curl_close($curl);
$responseObj = json_decode($curlResponse);
if (!empty($responseObj) && $responseObj->status_code == 200 && $responseObj->order_id == $payment_session->mds_payment_token) {
$data_transaction = array(
'payment_method' => $midtrans->name,
'payment_id' => $transaction_id,
'currency' => "IDR",
'payment_amount' => isset($responseObj->gross_amount) ? $responseObj->gross_amount : 0,
'payment_status' => "Succeeded"
);
//add order
$response = $this->execute_payment($data_transaction, $payment_session->payment_type, lang_base_url());
if ($response->result == 1) {
$this->session->set_flashdata('success', $response->message);
echo json_encode([
'result' => 1,
'redirect_url' => $response->redirect_url
]);
} else {
$this->session->set_flashdata('error', $response->message);
echo json_encode([
'result' => 0
]);
}
} else {
$this->session->set_flashdata('error', trans("msg_error"));
echo json_encode([
'result' => 0
]);
}
}
/**
* Payment with Mercado Pago
*/
public function mercado_pago_payment_post()
{
$lang = input_get("mds_lang");
$lang_base_url = lang_base_url();
if ($lang != $this->selected_lang->short_form) {
$lang_base_url = base_url() . $lang . "/";
}
$mercado_pago = get_payment_gateway('mercado_pago');
if (empty($mercado_pago)) {
$this->session->set_flashdata('error', "Payment method not found!");
$this->redirect_back_to_payment($lang_base_url);
}
$payment_session = $this->session->userdata('mds_payment_cart_data');
if (empty($payment_session)) {
$this->session->set_flashdata('error', trans("invalid_attempt"));
$this->redirect_back_to_payment($lang_base_url);
}
require_once "application/third_party/mercado-pago/vendor/autoload.php";
MercadoPago\SDK::setAccessToken($mercado_pago->secret_key);
$mds_sess_id = input_get("mds_sess_id");
$payment_id = input_get("payment_id");
//check payment id added before
$is_new = true;
$row = $this->db->where('payment_id', clean_slug($payment_id))->where('payment_method', "Mercado Pago")->get('transactions')->row();
$row_mem = $this->db->where('payment_id', clean_slug($payment_id))->where('payment_method', "Mercado Pago")->get('membership_transactions')->row();
$row_promo = $this->db->where('payment_id', clean_slug($payment_id))->where('payment_method', "Mercado Pago")->get('promoted_transactions')->row();
if (!empty($row) || !empty($row_mem) || !empty($row_promo)) {
$this->session->set_flashdata('error', trans("invalid_attempt"));
$this->redirect_back_to_payment($lang_base_url);
}
if (!empty($mds_sess_id) && !empty($payment_id) && ($mds_sess_id == $payment_session->mds_payment_token)) {
$payment = MercadoPago\Payment::find_by_id($payment_id);
if (!empty($payment) && $payment->status == "approved" && $payment->transaction_amount >= $payment_session->total_amount) {
$data_transaction = array(
'payment_method' => "Mercado Pago",
'payment_id' => $payment_id,
'currency' => $payment_session->currency,
'payment_amount' => $payment->transaction_amount,
'payment_status' => "Succeeded"
);
//add order
$response = $this->execute_payment($data_transaction, $payment_session->payment_type, $lang_base_url);
if ($response->result == 1) {
$this->session->set_flashdata('success', $response->message);
redirect($response->redirect_url);
exit();
} else {
$this->session->set_flashdata('error', $response->message);
redirect($response->redirect_url);
exit();
}
}
}
$this->session->set_flashdata('error', trans("msg_error"));
$this->redirect_back_to_payment($lang_base_url);
}
/**
* Execute Sale Payment
*/
public function execute_payment($data_transaction, $payment_type, $base_url)
{
//response object
$response = new stdClass();
$response->result = 0;
$response->message = "";
$response->redirect_url = "";
$data_transaction["payment_status"] = "payment_received";
if ($payment_type == 'sale') {
//add order
$order_id = $this->order_model->add_order($data_transaction);
$order = $this->order_model->get_order($order_id);
if (!empty($order)) {
//decrease product quantity after sale
$this->order_model->decrease_product_stock_after_sale($order->id);
//send email
if ($this->general_settings->send_email_buyer_purchase == 1) {
$email_data = array(
'email_type' => 'new_order',
'order_id' => $order_id
);
$this->session->set_userdata('mds_send_email_data', json_encode($email_data));
}
//set response and redirect URLs
$response->result = 1;
$response->redirect_url = $base_url . get_route("order_details", true) . $order->order_number;
if ($order->buyer_id == 0) {
$this->session->set_userdata('mds_show_order_completed_page', 1);
$response->redirect_url = $base_url . get_route("order_completed", true) . $order->order_number;
} else {
$response->message = trans("msg_order_completed");
}
} else {
//could not added to the database
$response->message = trans("msg_payment_database_error");
$response->result = 0;
$response->redirect_url = $base_url . get_route("cart", true) . get_route("payment");
}
} elseif ($payment_type == 'membership') {
$plan_id = $this->session->userdata('modesy_selected_membership_plan_id');
$plan = null;
if (!empty($plan_id)) {
$plan = $this->membership_model->get_plan($plan_id);
}
if (!empty($plan)) {
//add user membership plan
$this->membership_model->add_user_plan($data_transaction, $plan, $this->auth_user->id);
//add transaction
$this->membership_model->add_membership_transaction($data_transaction, $plan);
//set response and redirect URLs
$response->result = 1;
$response->redirect_url = $base_url . get_route("membership_payment_completed") . "?method=gtw";
} else {
//could not added to the database
$response->message = trans("msg_payment_database_error");
$response->result = 0;
$response->redirect_url = $base_url . get_route("cart", true) . get_route("payment") . "?payment_type=membership";
}
} elseif ($payment_type == 'promote') {
$promoted_plan = $this->session->userdata('modesy_selected_promoted_plan');
if (!empty($promoted_plan)) {
//add to promoted products
$this->promote_model->add_to_promoted_products($promoted_plan);
//add transaction
$this->promote_model->add_promote_transaction($data_transaction);
//reset cache
reset_cache_data_on_change();
reset_user_cache_data($this->auth_user->id);
//set response and redirect URLs
$response->result = 1;
$response->redirect_url = $base_url . get_route("promote_payment_completed") . "?method=gtw&product_id=" . $promoted_plan->product_id;
} else {
//could not added to the database
$response->message = trans("msg_payment_database_error");
$response->result = 0;
$response->redirect_url = $base_url . get_route("cart", true) . get_route("payment") . "?payment_type=promote";
}
}
//reset session for the payment
@$this->session->unset_userdata('mds_payment_cart_data');
//return response
return $response;
}
/**
* Payment with Bank Transfer
*/
public function bank_transfer_payment_post()
{
$mds_payment_type = $this->input->post('mds_payment_type', true);
if ($mds_payment_type == 'membership') {
$plan_id = $this->session->userdata('modesy_selected_membership_plan_id');
$plan = null;
if (!empty($plan_id)) {
$plan = $this->membership_model->get_plan($plan_id);
}
if (!empty($plan)) {
$data_transaction = array(
'payment_method' => 'Bank Transfer',
'payment_status' => 'awaiting_payment',
'payment_id' => $this->session->userdata('mds_membership_bank_transaction_number')
);
//add user membership plan
$this->membership_model->add_user_plan($data_transaction, $plan, $this->auth_user->id);
//add transaction
$this->membership_model->add_membership_transaction_bank($data_transaction, $plan);
redirect(generate_url("membership_payment_completed") . "?method=bank_transfer&transaction_number=" . $data_transaction['payment_id']);
}
$this->session->set_flashdata('error', trans("msg_error"));
redirect(generate_url("cart", "payment") . "?payment_type=membership");
} elseif ($mds_payment_type == 'promote') {
$promoted_plan = $this->session->userdata('modesy_selected_promoted_plan');
if (!empty($promoted_plan)) {
$transaction_number = $this->session->userdata('mds_promote_bank_transaction_number');
//add transaction
$this->promote_model->add_promote_transaction_bank($promoted_plan, $transaction_number);
$type = $this->session->userdata('mds_promote_product_type');
if (empty($type)) {
$type = "new";
}
redirect(generate_url("promote_payment_completed") . "?method=bank_transfer&transaction_number=" . $transaction_number . "&product_id=" . $promoted_plan->product_id);
}
$this->session->set_flashdata('error', trans("msg_error"));
redirect(generate_url("cart", "payment") . "?payment_type=promote");
} else {
//add order
$order_id = $this->order_model->add_order_offline_payment("Bank Transfer");
$order = $this->order_model->get_order($order_id);
if (!empty($order)) {
//decrease product quantity after sale
$this->order_model->decrease_product_stock_after_sale($order->id);
//send email
if ($this->general_settings->send_email_buyer_purchase == 1) {
$email_data = array(
'email_type' => 'new_order',
'order_id' => $order_id
);
$this->session->set_userdata('mds_send_email_data', json_encode($email_data));
}
if ($order->buyer_id == 0) {
$this->session->set_userdata('mds_show_order_completed_page', 1);
redirect(generate_url("order_completed") . "/" . $order->order_number);
} else {
$this->session->set_flashdata('success', trans("msg_order_completed"));
redirect(generate_url("order_details") . "/" . $order->order_number);
}
}
$this->session->set_flashdata('error', trans("msg_error"));
redirect(generate_url("cart", "payment"));
}
}
/**
* Cash on Delivery
*/
public function cash_on_delivery_payment_post()
{
//add order
$order_id = $this->order_model->add_order_offline_payment("Cash On Delivery");
$order = $this->order_model->get_order($order_id);
if (!empty($order)) {
//decrease product quantity after sale
$this->order_model->decrease_product_stock_after_sale($order->id);
//send email
if ($this->general_settings->send_email_buyer_purchase == 1) {
$email_data = array(
'email_type' => 'new_order',
'order_id' => $order_id
);
$this->session->set_userdata('mds_send_email_data', json_encode($email_data));
}
if ($order->buyer_id == 0) {
$this->session->set_userdata('mds_show_order_completed_page', 1);
redirect(generate_url("order_completed") . "/" . $order->order_number);
} else {
$this->session->set_flashdata('success', trans("msg_order_completed"));
redirect(generate_url("order_details") . "/" . $order->order_number);
}
}
$this->session->set_flashdata('error', trans("msg_error"));
redirect(generate_url("cart", "payment"));
}
/**
* Order Completed
*/
public function order_completed($order_number)
{
$data['title'] = trans("msg_order_completed");
$data['description'] = trans("msg_order_completed") . " - " . $this->app_name;
$data['keywords'] = trans("msg_order_completed") . "," . $this->app_name;
$data['order'] = $this->order_model->get_order_by_order_number($order_number);
if (empty($data['order'])) {
redirect(lang_base_url());
}
if (empty($this->session->userdata('mds_show_order_completed_page'))) {
redirect(lang_base_url());
}
$this->load->view('partials/_header', $data);
$this->load->view('cart/order_completed', $data);
$this->load->view('partials/_footer');
}
/**
* Membership Payment Completed
*/
public function membership_payment_completed()
{
$data['title'] = trans("msg_payment_completed");
$data['description'] = trans("msg_payment_completed") . " - " . $this->app_name;
$data['keywords'] = trans("payment") . "," . $this->app_name;
$transaction_insert_id = $this->session->userdata('mds_membership_transaction_insert_id');
if (empty($transaction_insert_id)) {
redirect(lang_base_url());
}
$data["transaction"] = $this->membership_model->get_membership_transaction($transaction_insert_id);
if (empty($data["transaction"])) {
redirect(lang_base_url());
exit();
}
$data["method"] = $this->input->get('method');
$data["transaction_number"] = $this->input->get('transaction_number');
$this->load->view('partials/_header', $data);
$this->load->view('cart/membership_payment_completed', $data);
$this->load->view('partials/_footer');
}
/**
* Promote Payment Completed
*/
public function promote_payment_completed()
{
$data['title'] = trans("msg_payment_completed");
$data['description'] = trans("msg_payment_completed") . " - " . $this->app_name;
$data['keywords'] = trans("payment") . "," . $this->app_name;
$transaction_insert_id = $this->session->userdata('mds_promoted_transaction_insert_id');
if (empty($transaction_insert_id)) {
redirect(lang_base_url());
}
$data["transaction"] = $this->promote_model->get_promotion_transaction($transaction_insert_id);
if (empty($data["transaction"])) {
redirect(lang_base_url());
exit();
}
$data["method"] = $this->input->get('method');
$data["transaction_number"] = $this->input->get('transaction_number');
$this->load->view('partials/_header', $data);
$this->load->view('cart/promote_payment_completed', $data);
$this->load->view('partials/_footer');
}
//get shipping method by location
public function get_shipping_methods_by_location()
{
$data = array(
'result' => 0,
'html_content' => ""
);
$state_id = $this->input->post('state_id', true);
$cart_items = $this->session_cart_items;
if (!empty($state_id)) {
$vars = array(
"shipping_methods" => $this->shipping_model->get_seller_shipping_methods_array($cart_items, $state_id)
);
$html_content = $this->load->view('cart/_shipping_methods', $vars, true);
$data['result'] = 1;
$data['html_content'] = $html_content;
}
echo json_encode($data);
}
//redirect back to the cart payment
public function redirect_back_to_payment($base_url = "")
{
if (empty($base_url)) {
$base_url = base_url();
}
redirect($base_url . get_route("cart", true) . get_route("payment"));
exit();
}
}