Exemplo n.º 1
0
 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;
         }
     }
 }