ControllerExtensionPaymentKlarnaCheckout::transactionCommand PHP Метод

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

public transactionCommand ( )
    public function transactionCommand()
    {
        $this->load->language('extension/payment/klarna_checkout');
        $this->load->model('extension/payment/klarna_checkout');
        $this->load->model('sale/order');
        $json = array();
        $success = $error = '';
        $order_info = $this->model_sale_order->getOrder($this->request->get['order_id']);
        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) {
            return;
        }
        $klarna_order = $this->model_extension_payment_klarna_checkout->omRetrieve($connector, $this->request->post['order_ref']);
        if (!$klarna_order) {
            return;
        }
        $old_klarna_status = $klarna_order['status'];
        if ($this->request->post['type'] == 'cancel') {
            $action = $this->model_extension_payment_klarna_checkout->omCancel($connector, $this->request->post['order_ref']);
        } elseif ($this->request->post['type'] == 'capture' && $this->request->post['data']) {
            $action = $this->model_extension_payment_klarna_checkout->omCapture($connector, $this->request->post['order_ref'], array('captured_amount' => $this->request->post['data'] * 100));
        } elseif ($this->request->post['type'] == 'refund' && $this->request->post['data']) {
            $action = $this->model_extension_payment_klarna_checkout->omRefund($connector, $this->request->post['order_ref'], array('refunded_amount' => $this->request->post['data'] * 100));
        } elseif ($this->request->post['type'] == 'extend_authorization') {
            $action = $this->model_extension_payment_klarna_checkout->omExtendAuthorizationTime($connector, $this->request->post['order_ref']);
        } elseif ($this->request->post['type'] == 'merchant_reference' && $this->request->post['data']) {
            $data = array();
            parse_str(html_entity_decode($this->request->post['data']), $data);
            $action = $this->model_extension_payment_klarna_checkout->omUpdateMerchantReference($connector, $this->request->post['order_ref'], array('merchant_reference1' => (string) $data['merchant_reference_1']));
        } elseif (($this->request->post['type'] == 'billing_address' || $this->request->post['type'] == 'shipping_address') && $this->request->post['data']) {
            if ($this->request->post['type'] == 'billing_address') {
                $data['billing_address'] = array();
                parse_str(html_entity_decode($this->request->post['data']), $data['billing_address']);
            } else {
                if ($this->request->post['type'] == 'shipping_address') {
                    $data['shipping_address'] = array();
                    parse_str(html_entity_decode($this->request->post['data']), $data['shipping_address']);
                }
            }
            $action = $this->model_extension_payment_klarna_checkout->omUpdateAddress($connector, $this->request->post['order_ref'], $data);
        } elseif ($this->request->post['type'] == 'release_authorization') {
            $action = $this->model_extension_payment_klarna_checkout->omReleaseAuthorization($connector, $this->request->post['order_ref']);
        } elseif ($this->request->post['type'] == 'capture_shipping_info' && isset($this->request->post['id'])) {
            $data = array();
            parse_str(html_entity_decode($this->request->post['data']), $data);
            $action = $this->model_extension_payment_klarna_checkout->omShippingInfo($connector, $this->request->post['order_ref'], $this->request->post['id'], $data);
        } elseif ($this->request->post['type'] == 'capture_billing_address' && isset($this->request->post['id'])) {
            $data['billing_address'] = array();
            parse_str(html_entity_decode($this->request->post['data']), $data['billing_address']);
            $action = $this->model_extension_payment_klarna_checkout->omCustomerDetails($connector, $this->request->post['order_ref'], $this->request->post['id'], $data);
        } elseif ($this->request->post['type'] == 'trigger_send_out' && isset($this->request->post['id'])) {
            $action = $this->model_extension_payment_klarna_checkout->omTriggerSendOut($connector, $this->request->post['order_ref'], $this->request->post['id']);
        } else {
            $error = true;
        }
        $klarna_order = $this->model_extension_payment_klarna_checkout->omRetrieve($connector, $this->request->post['order_ref']);
        if (!$klarna_order) {
            return;
        }
        $new_klarna_status = $klarna_order['status'];
        $order_status_id = '';
        if ($old_klarna_status != $new_klarna_status) {
            switch ($klarna_order['status']) {
                case 'AUTHORIZED':
                    $order_status_id = $this->config->get('klarna_checkout_order_status_authorised_id');
                    if ($klarna_order['fraud_status'] == 'PENDING') {
                        $order_status_id = $this->config->get('klarna_checkout_order_status_fraud_pending_id');
                    } elseif ($klarna_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;
            }
        } elseif ($this->request->post['type'] == 'refund' && $klarna_order['captured_amount'] - $klarna_order['refunded_amount'] == 0) {
            $order_status_id = $this->config->get('klarna_checkout_order_status_refund_id');
        }
        if (!$error && $action) {
            $success = $this->language->get('text_success_action');
        } elseif (!$error && $action && isset($action->message)) {
            $error = sprintf($this->language->get('text_error_settle'), $action->message);
        } else {
            $error = $this->language->get('text_error_generic');
        }
        $json['success'] = $success;
        $json['error'] = $error;
        $json['order_status_id'] = $order_status_id;
        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }