public function do_payment($post_arr = '') { $error = array(); $allergies_content = ''; $post = $post_arr ? $post_arr : ci()->input->post(NULL, TRUE); extract($post); if (!$card_number) { $error[] = 'Please provide your card number.'; } if (!$exp_year and !$exp_month) { $error[] = 'Please provide your card\'s expiry date.'; } if (!$first_name) { $error[] = 'Please provide your billing first name'; } if (!$last_name) { $error[] = 'Please provide your billing last name'; } if (!$x_email) { $error[] = 'Please provide your billing email'; } if (!$x_address) { $error[] = 'Please provide your billing address'; } if (!$x_phone) { $error[] = 'Please provide your billing phone number'; } if (!$region) { $error[] = 'Please provide your billing state'; } if (!$x_city) { $error[] = 'Please provide your billing city'; } if (!$x_zip) { $error[] = 'Please provide your billing ZIP code'; } if (!@$alergy) { $error[] = 'Please answer if you have alergy'; } if (!($order_data = ci()->session->userdata('order'))) { $error[] = 'Wrong order'; } if (!($this->_authorization_code = ci()->session->userdata('authorization_code'))) { $error[] = 'Wrong transaction'; } if (@$login_type == 'register') { include_once APPPATH . 'controllers/users/login.php'; $_POST['username'] = $_POST['email']; $users = new Login(); $order['member_id'] = $users->registration(true); } elseif ($session = ci()->session->userdata('user')) { $order['member_id'] = ci()->get_user_session_data('member_id'); } if ($shipping_same_as_billing == 'n') { if (!$delivery_first_name) { $error[] = 'Please provide your delivery first name'; } if (!$delivery_last_name) { $error[] = 'Please provide your delivery last name'; } if (!$delivery_email) { $error[] = 'Please provide your delivery email'; } if (!$delivery_address) { $error[] = 'Please provide your delivery address'; } if (!$delivery_phone) { $error[] = 'Please provide your delivery phone number'; } if (!$store_region) { $error[] = 'Please provide your delivery state'; } if (!$delivery_city) { $error[] = 'Please provide your delivery city'; } if (!$delivery_zip) { $error[] = 'Please provide your delivery ZIP code'; } $order_data['shipping_name'] = $delivery_first_name . " " . $delivery_last_name; $order_data['shipping_email'] = $delivery_email; $order_data['shipping_address1'] = $delivery_address; $order_data['shipping_region'] = implode(', ', array(ci()->taxes_model->get_state($region), $x_city)); $order_data['shipping_phone'] = $delivery_phone; $order_data['shipping_postcode'] = $delivery_zip; } else { $order_data['shipping_name'] = $first_name . " " . $last_name; $order_data['shipping_email'] = $x_email; $order_data['shipping_address1'] = $x_address; $order_data['shipping_region'] = implode(', ', array(ci()->taxes_model->get_state($region), $x_city)); $order_data['shipping_phone'] = $x_phone; $order_data['shipping_postcode'] = $x_zip; } $exp_date = "{$exp_month}/{$exp_year}"; if (!isset($post['delivery_type'])) { $error[] = 'You can\'t order some of products in your state'; } else { $order_data['delivery_type'] = $post['delivery_type']; } foreach (ci()->cart->contents() as $k => $v) { $items_names[] = ($v['option']['opt'] ? $v['option']['product_options']->description[$v['option']['opt']] : '') . ' ' . $v['option']['product_title']; } if (!$error) { $this->set_gateway_data(@$store); require_once APPPATH . 'libraries/anet/AuthorizeNet.php'; $transaction = new AuthorizeNetAIM(ci()->system_settings['api_login_id'], ci()->system_settings['transaction_key']); $transaction->setSandbox((bool) ci()->system_settings['api_mode']); // we add shipping data $order_data['order_shipping_tax'] = $this->_getshipping($store_region); $order_data['order_tax'] = $this->getdelivery($x_zip, isset($deliver_option), 1); $order_data['order_total'] = $this->_get_grand_total(); // coupon check if ($coupon = ci()->session->userdata('coupon')) { $coupon_check = ci()->coupons_model->coupon_valid(@$coupon['coupon_code'], ci()->session->userdata('member_id')); if ($coupon_check['status'] == 'ok') { $order_data['order_total'] -= $coupon['amount']; $order_data['coupon_code'] = $coupon['coupon_code']; } } $transaction->amount = $order_data['order_total']; $transaction->auth_code = $this->_authorization_code; $order_data['billing_name'] = $first_name . " " . $last_name; $order_data['order_email'] = $x_email; $order_data['billing_address1'] = $x_address; $order_data['billing_region'] = implode(', ', array(ci()->taxes_model->get_state($region), $x_city)); $order_data['state_id'] = $region; $order_data['store_state_id'] = $store_region; $order_data['billing_phone'] = $x_phone; $order_data['billing_postcode'] = $x_zip; $order_data['notes'] = $notes; $order_data['alergy'] = $alergy; $order_data['client_allergies'] = @$allergies_content; $order_data['start_date'] = $delivery_date; $order_data['store_id'] = @$store; if (@$ready_time) { foreach ($ready_time as $stamp => $time) { $order_data['start_date'] = date("m/d/Y", $stamp); $ready_time_arr[] = "for " . date("m/d/Y", $stamp) . " on {$time}"; } $order_data['ready_time'] = implode("<br>", $ready_time_arr); } $order_data['order_hash'] = md5(rand(333333, 7777777) . mktime()); $order_data['items_names'] = implode(',', $items_names); $transaction->card_num = $card_number; $transaction->exp_date = $exp_date; $response = $transaction->captureOnly(); if ($response->approved) { $order_data['order_paid_date'] = mktime(); $order_data['order_status'] = 'Paid & Pending Processing'; $order_data['transaction_id'] = $response->transaction_id; if (isset($order_data['order_id'])) { unset($order_data['order_id']); } $order_data['order_id'] = $this->_model->save($order_data); foreach ($order_data['items'] as $k => $v) { $v['order_id'] = $order_data['order_id']; ci()->order_items_model->save($v); } ci()->session->unset_userdata('order'); if ($coupon) { ci()->coupons_model->use_coupon($coupon['coupon_code'], ci()->user_session_data['member_id']); ci()->session->unset_userdata('coupon'); } notice('Thank you for your order! You will receive an email confirmation shortly.'); $order_data['stores'] = ci()->stores_model->get_stores($store_region, 'Open'); $this->_send_email($order_data); // send admin email if (isset(ci()->system_settings['admin_email'])) { $this->_send_email($order_data, ci()->system_settings['admin_email']); } ci()->cart->destroy(); echo "<script> document.location.href='http://'+window.location.host+'/users/orders/view_order?hash={$order_data['order_hash']}&cart_empty=true'</script>"; exit; } else { echo $response->response_reason_text; } exit; } else { if (!$post_arr) { echo implode('<br>- ', $error); exit; } else { return $error; } } }