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问题列表中多次提到的内容。此问题尚未解决,但是此提交显示了要使此工作有效,您需要执行的操作