public function push()
{
$this->load->model('extension/payment/klarna_checkout');
$this->load->model('checkout/order');
if (!$this->config->get('klarna_checkout_status')) {
return false;
}
if (isset($this->request->get['klarna_order_id'])) {
$klarna_checkout_order = $this->model_extension_payment_klarna_checkout->getOrder($this->request->get['klarna_order_id']);
if ($klarna_checkout_order) {
$order_info = $this->model_checkout_order->getOrder($klarna_checkout_order['order_id']);
if ($order_info) {
list($klarna_account, $connector) = $this->model_extension_payment_klarna_checkout->getConnector($this->config->get('klarna_checkout_account'), $order_info['currency_code']);
if ($klarna_account && $connector) {
$order = $this->model_extension_payment_klarna_checkout->omOrderRetrieve($connector, $this->request->get['klarna_order_id']);
$this->model_extension_payment_klarna_checkout->log('Order details from push:');
$this->model_extension_payment_klarna_checkout->log($order);
if ($order) {
if ($order->acknowledge()) {
// Update OpenCart order with payment and shipping details
$payment_country_info = $this->model_extension_payment_klarna_checkout->getCountryByIsoCode2($order['billing_address']['country']);
$shipping_country_info = $this->model_extension_payment_klarna_checkout->getCountryByIsoCode2($order['shipping_address']['country']);
//If region is passed, try to update OpenCart order with correct region/zone
$payment_zone_info = array();
if ($payment_country_info && isset($order['billing_address']['region'])) {
$payment_zone_info = $this->model_extension_payment_klarna_checkout->getZoneByCode($order['billing_address']['region'], $payment_country_info['country_id']);
}
$shipping_zone_info = array();
if ($shipping_country_info && isset($order['shipping_address']['region'])) {
$shipping_zone_info = $this->model_extension_payment_klarna_checkout->getZoneByCode($order['shipping_address']['region'], $shipping_country_info['country_id']);
}
$order_data = array('firstname' => utf8_substr($order['billing_address']['given_name'], 0, 32), 'lastname' => utf8_substr($order['billing_address']['family_name'], 0, 32), 'telephone' => utf8_substr($order['billing_address']['phone'], 0, 32), 'payment_firstname' => utf8_substr($order['billing_address']['given_name'], 0, 32), 'payment_lastname' => utf8_substr($order['billing_address']['family_name'], 0, 32), 'payment_address_1' => utf8_substr($order['billing_address']['street_address'], 0, 128), 'payment_address_2' => isset($order['billing_address']['street_address2']) ? utf8_substr($order['billing_address']['street_address2'], 0, 128) : '', 'payment_city' => utf8_substr($order['billing_address']['city'], 0, 128), 'payment_postcode' => utf8_substr($order['billing_address']['postal_code'], 0, 10), 'payment_zone' => $payment_zone_info ? $payment_zone_info['name'] : '', 'payment_zone_id' => $payment_zone_info ? $payment_zone_info['zone_id'] : '', 'payment_country' => $payment_country_info ? $payment_country_info['name'] : '', 'payment_country_id' => $payment_country_info ? $payment_country_info['country_id'] : '', 'payment_address_format' => $payment_country_info ? $payment_country_info['address_format'] : '', 'shipping_firstname' => utf8_substr($order['shipping_address']['given_name'], 0, 32), 'shipping_lastname' => utf8_substr($order['shipping_address']['family_name'], 0, 32), 'shipping_address_1' => utf8_substr($order['shipping_address']['street_address'], 0, 128), 'shipping_address_2' => isset($order['shipping_address']['street_address2']) ? utf8_substr($order['shipping_address']['street_address2'], 0, 128) : '', 'shipping_city' => utf8_substr($order['shipping_address']['city'], 0, 128), 'shipping_postcode' => utf8_substr($order['shipping_address']['postal_code'], 0, 10), 'shipping_zone' => $shipping_zone_info ? $shipping_zone_info['name'] : '', 'shipping_zone_id' => $shipping_zone_info ? $shipping_zone_info['zone_id'] : '', 'shipping_country' => $shipping_country_info ? $shipping_country_info['name'] : '', 'shipping_country_id' => $shipping_country_info ? $shipping_country_info['country_id'] : '', 'shipping_address_format' => $shipping_country_info ? $shipping_country_info['address_format'] : '');
$this->model_extension_payment_klarna_checkout->updateOcOrder($klarna_checkout_order['order_id'], $order_data);
$order_status_id = false;
switch ($order['status']) {
case 'AUTHORIZED':
$order_status_id = $this->config->get('klarna_checkout_order_status_authorised_id');
if ($order['fraud_status'] == 'PENDING') {
$order_status_id = $this->config->get('klarna_checkout_order_status_fraud_pending_id');
} elseif ($order['fraud_status'] == 'REJECTED') {
$order_status_id = $this->config->get('klarna_checkout_order_status_fraud_rejected_id');
}
break;
case 'PART_CAPTURED':
$order_status_id = $this->config->get('klarna_checkout_order_status_part_captured_id');
break;
case 'CAPTURED':
$order_status_id = $this->config->get('klarna_checkout_order_status_captured_id');
break;
case 'CANCELLED':
$order_status_id = $this->config->get('klarna_checkout_order_status_cancelled_id');
break;
}
if ($order_status_id) {
$this->model_checkout_order->addOrderHistory($klarna_checkout_order['order_id'], $order_status_id);
}
}
} else {
$this->model_extension_payment_klarna_checkout->log('Cannot retrieve KC order using order_id: ' . $this->request->get['klarna_order_id']);
}
}
}
} else {
$this->model_extension_payment_klarna_checkout->log('Cannot find KC order using order_id: ' . $this->request->get['klarna_order_id']);
}
}
}