public function confirm()
{
$this->lang->load('stripe/stripe');
$this->form_validation->reset_validation();
$this->form_validation->set_rules('stripe_token', 'lang:label_card_number', 'xss_clean|trim|required');
if ($this->form_validation->run() === TRUE) {
// checks if form validation routines ran successfully
$validated = TRUE;
} else {
return FALSE;
}
$order_data = $this->session->userdata('order_data');
// retrieve order details from session userdata
$cart_contents = $this->session->userdata('cart_contents');
// retrieve cart contents
if ($validated === TRUE and !empty($order_data['payment']) and $order_data['payment'] == 'stripe') {
// check if payment method is equal to paypal
if (empty($order_data) or empty($cart_contents)) {
return FALSE;
}
$ext_payment_data = !empty($order_data['ext_payment']['ext_data']) ? $order_data['ext_payment']['ext_data'] : array();
if (!empty($ext_payment_data['order_total']) and $cart_contents['order_total'] < $ext_payment_data['order_total']) {
$this->alert->set('danger', $this->lang->line('alert_min_total'));
return FALSE;
}
$this->load->model('Stripe_model');
$response = $this->Stripe_model->createCharge($this->input->post('stripe_token'), $order_data);
if (isset($response->error->message)) {
if ($response->error->type === 'card_error') {
$this->alert->set('danger', $response->error->message);
}
} else {
if (isset($response->status)) {
if ($response->status !== 'succeeded') {
$order_data['status_id'] = $ext_payment_data['order_status'];
} else {
if (isset($ext_payment_data['order_status']) and is_numeric($ext_payment_data['order_status'])) {
$order_data['status_id'] = $ext_payment_data['order_status'];
} else {
$order_data['status_id'] = $this->config->item('default_order_status');
}
}
if (!empty($response->paid)) {
$comment = sprintf($this->lang->line('text_payment_status'), $response->status, $response->id);
} else {
$comment = "{$response->failure_message} {$response->id}";
}
$order_history = array('object_id' => $order_data['order_id'], 'status_id' => $order_data['status_id'], 'notify' => '0', 'comment' => $comment, 'date_added' => mdate('%Y-%m-%d %H:%i:%s', time()));
$this->load->model('Statuses_model');
$this->Statuses_model->addStatusHistory('order', $order_history);
$this->load->model('Orders_model');
if ($this->Orders_model->completeOrder($order_data['order_id'], $order_data, $cart_contents)) {
redirect('checkout/success');
// redirect to checkout success page with returned order id
}
}
}
return FALSE;
}
}