ControllerExtensionPaymentKlarnaCheckout::push PHP Метод

push() публичный Метод

public push ( )
    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']);
            }
        }
    }