关于php:在维护模式下的Opencart 2管理员api调用

Opencart 2 admin api calls when in maintenance mode

当我将网站置于维护模式并尝试使用管理员的订单记录时,我得到:

SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of
the JSON data

如何以curl请求传递身份验证数据,以便以管理员身份登录时禁用维护模式?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public function api() {
    $json = array();

    // Store
    if (isset($this->request->get['store_id'])) {
        $store_id = $this->request->get['store_id'];
    } else {
        $store_id = 0;
    }

    $this->load->model('setting/store');

    $store_info = $this->model_setting_store->getStore($store_id);

    if ($store_info) {
        $url = $store_info['ssl'];
    } else {
        $url = HTTPS_CATALOG;
    }

    if (isset($this->session->data['cookie']) && isset($this->request->get['api'])) {
        // Include any URL perameters
        $url_data = array();

        foreach ($this->request->get as $key => $value) {
            if ($key != 'route' && $key != 'token' && $key != 'store_id') {
                $url_data[$key] = $value;
            }
        }

        $curl = curl_init();

        // Set SSL if required
        if (substr($url, 0, 5) == 'https') {
            curl_setopt($curl, CURLOPT_PORT, 443);
        }

        curl_setopt($curl, CURLOPT_HEADER, false);
        curl_setopt($curl, CURLINFO_HEADER_OUT, true);
        curl_setopt($curl, CURLOPT_USERAGENT, $this->request->server['HTTP_USER_AGENT']);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_FORBID_REUSE, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_URL, $url . 'index.php?route=' . $this->request->get['api'] . ($url_data ? '&' . http_build_query($url_data) : ''));

        if ($this->request->post) {
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($this->request->post));
        }

        curl_setopt($curl, CURLOPT_COOKIE, session_name() . '=' . $this->session->data['cookie'] . ';');

        $json = curl_exec($curl);

        curl_close($curl);
    }

    $this->response->addHeader('Content-Type: application/json');
    $this->response->setOutput($json);
}

在其他方法中,我注意到它们是对api / login的额外请求。有没有一种方法可以将2合并在一起

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$api_info = $this->model_user_api->getApi($this->config->get('config_api_id'));

if ($api_info) {
    $curl = curl_init();

    // Set SSL if required
    if (substr(HTTPS_CATALOG, 0, 5) == 'https') {
        curl_setopt($curl, CURLOPT_PORT, 443);
    }

    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLINFO_HEADER_OUT, true);
    curl_setopt($curl, CURLOPT_USERAGENT, $this->request->server['HTTP_USER_AGENT']);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_FORBID_REUSE, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_URL, HTTPS_CATALOG . 'index.php?route=api/login');
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($api_info));

    $json = curl_exec($curl);

    if (!$json) {
        $this->error['warning'] = sprintf($this->language->get('error_curl'), curl_error($curl), curl_errno($curl));
    } else {
        $response = json_decode($json, true);

        if (isset($response['cookie'])) {
            $this->session->data['cookie'] = $response['cookie'];
        }

        curl_close($curl);
    }
}

这是在OpenCart的github问题列表中多次提到的内容。此问题尚未解决,但是此提交显示了要使此工作有效,您需要执行的操作