You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopware如何使用App Credentials应用凭据调用接口获取商品数据

问题原因

你当前调用Store API时传入的sw-access-key是销售渠道专属的访问凭证,和你创建Shopware应用拿到的apiKey、secretKey不属于同一套认证体系,所以触发了「找不到匹配销售渠道」的412错误。你在设置页面拿到的可正常使用的API密钥,本身就是绑定了对应销售渠道的Store API密钥,所以可以正常访问。

正确调用方案

方案一:使用App凭据调用Admin API拉取全量商品(更推荐后端场景使用)

App生成的apiKey和secretKey默认用于Admin API认证,不需要绑定销售渠道即可拉取全站所有商品数据,步骤如下:

  1. 先获取Admin API访问令牌
    向POST {你的shopUrl}/api/oauth/token发起请求,请求体格式如下:
    {
      "grant_type": "client_credentials",
      "client_id": "你的App apiKey",
      "client_secret": "你的App secretKey"
    }
    
    请求成功后会返回access_token字段,有效期10分钟,过期可重新请求获取。
  2. 携带令牌调用商品接口拉取数据
    接口地址为GET {你的shopUrl}/api/product,请求头携带Authorization: Bearer {上一步拿到的access_token}即可返回商品数据,可通过limit、page参数分页拉取全量数据,也可添加associations参数拉取商品关联的库存、分类、媒体等扩展数据。

对应PHP示例代码:

<?php
// 第一步:获取access token
$curl = curl_init();
$shopUrl = "http://shopware.example.com"; // 替换为你的实际店铺URL
$apiKey = "你的App apiKey";
$secretKey = "你的App secretKey";

curl_setopt_array($curl, [
    CURLOPT_URL => $shopUrl . "/api/oauth/token",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode([
        'grant_type' => 'client_credentials',
        'client_id' => $apiKey,
        'client_secret' => $secretKey
    ]),
    CURLOPT_HTTPHEADER => [
        "Accept: application/json",
        "Content-Type: application/json"
    ]
]);

$tokenRes = curl_exec($curl);
$tokenErr = curl_error($curl);
curl_close($curl);

if ($tokenErr) {
    die("获取令牌错误: " . $tokenErr);
}
$tokenData = json_decode($tokenRes, true);
$accessToken = $tokenData['access_token'];

// 第二步:拉取商品数据
$curl = curl_init();
// 可修改参数自定义返回内容,比如加&limit=100&page=1分页,加&associations[media]=[]拉取商品图片
$productUrl = $shopUrl . "/api/product?limit=50&page=1";
curl_setopt_array($curl, [
    CURLOPT_URL => $productUrl,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Accept: application/json",
        "Authorization: Bearer " . $accessToken
    ]
]);

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    $products = json_decode($response, true);
    print_r($products);
}

方案二:继续使用Store API调用

如果你需要按销售渠道规则获取商品(比如只获取对应销售渠道上架的商品、应用对应价格规则),可以按以下步骤操作:

  • 进入Shopware后台「设置」-「扩展」-「应用」,找到你创建的应用对应的集成条目,复制其API密钥
  • 进入「设置」-「商店」-「销售渠道」,选择你要访问的销售渠道,把上一步复制的API密钥粘贴到「Store API 访问密钥」字段保存
  • 保存后用这个密钥作为sw-access-key值调用你原来的Store API接口即可正常返回数据
注意事项
  • 你需要在创建App时配置好商品读取的相关权限,否则调用Admin API时会返回403无权访问的错误
  • 商品数量较多时建议分页拉取,避免接口超时返回异常

内容的提问来源于stack exchange,提问作者PNG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:36:04