Shopware如何使用App Credentials应用凭据调用接口获取商品数据
问题原因
你当前调用Store API时传入的sw-access-key是销售渠道专属的访问凭证,和你创建Shopware应用拿到的apiKey、secretKey不属于同一套认证体系,所以触发了「找不到匹配销售渠道」的412错误。你在设置页面拿到的可正常使用的API密钥,本身就是绑定了对应销售渠道的Store API密钥,所以可以正常访问。
正确调用方案
方案一:使用App凭据调用Admin API拉取全量商品(更推荐后端场景使用)
App生成的apiKey和secretKey默认用于Admin API认证,不需要绑定销售渠道即可拉取全站所有商品数据,步骤如下:
- 先获取Admin API访问令牌
向POST {你的shopUrl}/api/oauth/token发起请求,请求体格式如下:
请求成功后会返回{ "grant_type": "client_credentials", "client_id": "你的App apiKey", "client_secret": "你的App secretKey" }access_token字段,有效期10分钟,过期可重新请求获取。 - 携带令牌调用商品接口拉取数据
接口地址为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
相关产品推荐
相关产品推荐

