【问题标题】:Opencart 2 API session issuesOpencart 2 API 会话问题
【发布时间】:2016-01-05 12:52:53
【问题描述】:

我正在尝试使用 OpenCart 2 API,但我并不完全熟悉它,也不是一般的 Opencart TBH。

我在管理区域创建了一个 API 密钥,我可以通过传递用户名、密码和 API 密钥本身从外部源成功地与 API 通信,并且我收到一条成功消息。

例子:

$url = "http://opencart.local:8888/index.php?route=api/login";
$postData = array(
        "username" => $username,
        "password" => $password,
        "key" => $key
    );

$handle = curl_init($url);
curl_setopt($handle, CURLOPT_HEADER, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($postData));

$response = curl_exec($handle);

$header_size = curl_getinfo($handle, CURLINFO_HEADER_SIZE);
$headers = substr($response, 0, $header_size);
$response = substr($response, $header_size);

curl_close($handle);

$return = json_decode($response, true);

返回响应如下:

array(2) { ["success"]=> string(42) "成功:API 会话 成功启动!" ["token"]=> string(32) “rfjOIzMWobWSvKvdy2LnWsekp9v1qoQQ”}

然后,在此之后,我调用 API 中的 cart/add 函数,将产品(按 ID)添加到购物车:

$url = "http://opencart.local:8888/index.php?route=api/cart/add";
$cartData = array(
        "product_id" => '47',
        "quantity" => '1'
    );

我以同样的方式 CURL,但我从 OpenCart 得到的响应是:

数组(1){[“错误”]=>数组(1){ [“警告”]=> string(54) "警告:您没有访问 API 的权限!" } }

当我检查问题时,似乎缺少 opencart 授予权限所需的 api_id:

$this->session->data['api_id']

即使这是在通过 API 登录时设置的。当我第二次调用将产品添加到购物车时,它以某种方式丢失了此会话数据。请记住,当它上线时,我将无法访问 OpenCart 代码,因为这是一个外部 CRM,它只能通过 API 进行通信,只需要用户名、密码和 API 密钥。

有什么想法吗?我会感谢任何帮助,因为我是 OpenCart 的菜鸟!

谢谢

【问题讨论】:

  • 转到:Admin CP > System > Users > User Groups > Administrator [edit] > Select all Access and Permissions and click save.
  • 我很欣赏这可能是我开发的解决方案,但最终我将无法控制 OpenCart 安装,因为我正在创建的是连接到 OpenCart 的第三方 CRM,如果可能我更喜欢使用默认设置,因为大多数客户可能不会这样做。
  • 其实所有权限都是默认选择的......
  • 那么您必须在 OC 管理面板中configure API。如果没有任何配置,您将无法再访问 API。
  • 你有管理面板访问权限吗?

标签: php api session curl opencart


【解决方案1】:

我也有类似的经历;我不小心删除了 API 密钥并创建了一个新密钥,但 API 刚刚停止工作。

我发现$this->config->get('config_api_id'); 总是返回“1”。所以在数据库上将我新创建的 API 密钥 api_id 值更改为 1,它就可以工作了。

我使用的是 2.1.0.1 版

【讨论】:

    【解决方案2】:

    您需要在 curl 选项中为 cookie 传递一个文件。几乎所有的身份验证都需要它来读写: curl_setopt($handle, CURLOPT_COOKIEJAR, 'cookie_file.txt');

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-17
      • 2011-09-18
      • 2011-09-06
      • 2015-09-06
      • 1970-01-01
      • 2014-11-03
      • 2014-03-31
      • 2014-03-26
      相关资源
      最近更新 更多