1

通过 github 我安装了 2.0.3.2。我的数字海洋 VPS 上的 RC 版本。一切似乎都很好,但就像许多其他人一样,我遇到了 JSON 语法错误的问题。我花了几个小时阅读关于

所有这些解决方案似乎都不起作用......当我终于发现我的 VPS 访问受限于 IP 地址并删除了这个限制时,订单历史更新似乎工作正常,所以我认为一切正常。

今天,当我尝试编辑订单时,弹出相同的以下错误。所以我又开始在论坛上寻找解决方案。

当我在尝试事情时感到非常沮丧时,我遇到了这种奇怪的行为。在订单编辑的第一页上出现错误,但是当我选择标准商店时...一切正常...我可以按照我的意愿编辑订单...但是当我将选项切换回存储订单被放置在...它直接响应相同的错误(见附件)。

我不确定在 2.0.3+ 上是否还有其他多店用户的商店运行良好?

你能和我一起想吗?可能与跨域资源共享政策有关吗?欢迎所有建议!

铬错误

4

3 回答 3

1

转到设置,编辑您的商店(不是默认),然后在第一个选项卡(一般)上,确保您的 SSL URL 已设置。

如果您没有 SSL,则设置与 Store URL 相同的值。

希望这可以帮助。

于 2015-10-02T08:17:02.027 回答
0

正如您提到的,可能是一个跨域政策问题。我通过添加以下内容解决了 1.5.6 上的这个问题以及跨域 cookie 问题(据我所知,它在任何版本上都无法正常工作):

xhrFields: { withCredentials: true },

在 AJAX 请求中以及access-control-allow-credentials在接收标头上进行设置。这里的诀窍是,要使跨源标头以这种方式工作,您需要显式声明允许的 URL(即,Header set Access-Control-Allow-Origin "*"不起作用)。下一个技巧是您不想接受来自任何 URL 的这些标头。

为了解决这个问题,我在manual.php控制器中添加了类似这样的东西 - 在 2.0+ 中将是api/order.php(以及跨域 cookie 共享common/header.php):

$this->load->model('setting/store');
$allowed[] = trim(HTTP_SERVER,'/');
$allowed[] = trim(HTTPS_SERVER, '/');
$stores = $this->model_setting_store->getStores();
foreach ($stores as $store) {
    if ($store['url']) $allowed[] = strtolower(trim($store['url'],'/'));
    if ($store['ssl']) $allowed[] = strtolower(trim($store['ssl'],'/'));
}
if (isset($this->request->server['HTTP_REFERER'])) {
    $url_parts = parse_url($this->request->server['HTTP_REFERER']);
    $origin = strtolower($url_parts['scheme'] . '://' . $url_parts['host']);
    if (in_array($origin,$allowed)) {
        header("access-control-allow-origin: " . $origin);
        header("access-control-allow-credentials: true");
    } else {
        header("access-control-allow-origin: *");
    }
} else {
    header("access-control-allow-origin: *");
}
header("access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept");
header("access-control-allow-methods: PUT, GET, POST, DELETE, OPTIONS");

这基本上会创建一个包含所有可接受 URL 的数组,如果请求有效,它会明确设置 HTTP 标头以允许 cookie 和会话数据。这主要是对跨域 cookie 共享的修复,但我觉得它也可能有助于解决 2.0 api 问题。

于 2015-08-03T18:03:23.107 回答
0

我的一位同事发现 api 调用总是通过 ssl 完成的,我所要做的就是在商店(不是主要)设置中的 SSL 字段中添加正常的商店 url。

于 2015-08-20T09:29:15.937 回答