Laravel中调用Shopify API获取指定店铺数据及Laravel7报错处理
Laravel 7 对接 Shopify 公共API实现方案及常见报错解决
一、基础环境依赖准备
- 确保PHP版本符合Laravel7要求:PHP >= 7.2.5,同时启用
curl、json扩展 - Laravel7默认自带Guzzle HTTP客户端,无需额外安装即可直接用来发起API请求
二、完整实现步骤
1. 配置Shopify密钥信息
在项目根目录.env文件中添加专属配置:
SHOPIFY_SHOP_NAME=目标店铺名(无需带.myshopify.com后缀) SHOPIFY_API_KEY=你的Shopify应用API Key SHOPIFY_API_SECRET=你的Shopify应用API Secret SHOPIFY_ACCESS_TOKEN=目标店铺授权后生成的永久访问令牌 SHOPIFY_API_VERSION=2024-01 # 建议使用仍在支持期内的稳定API版本
新建config/shopify.php配置文件统一读取配置:
return [ 'shop_name' => env('SHOPIFY_SHOP_NAME'), 'api_key' => env('SHOPIFY_API_KEY'), 'api_secret' => env('SHOPIFY_API_SECRET'), 'access_token' => env('SHOPIFY_ACCESS_TOKEN'), 'api_version' => env('SHOPIFY_API_VERSION', '2024-01'), ];
2. 封装API请求服务类
在app/Services目录下新建ShopifyService.php:
<?php namespace App\Services; use Illuminate\Support\Facades\Http; use Exception; class ShopifyService { protected $shopDomain; protected $accessToken; protected $apiVersion; public function __construct() { $this->shopDomain = config('shopify.shop_name') . '.myshopify.com'; $this->accessToken = config('shopify.access_token'); $this->apiVersion = config('shopify.api_version'); } /** * 发起GET请求获取Shopify数据 * @param string $endpoint API接口路径 示例:/admin/api/2024-01/products.json * @param array $params 查询参数 * @return mixed * @throws Exception */ public function get($endpoint, $params = []) { $url = "https://{$this->shopDomain}{$endpoint}"; $response = Http::withHeaders([ 'X-Shopify-Access-Token' => $this->accessToken, 'Content-Type' => 'application/json', ])->get($url, $params); if ($response->successful()) { return $response->json(); } throw new Exception('Shopify API请求错误: ' . $response->status() . ' - ' . $response->body()); } }
3. 业务调用示例
控制器中调用服务类获取商品列表示例:
<?php namespace App\Http\Controllers; use App\Services\ShopifyService; use Exception; class ShopifyController extends Controller { protected $shopifyService; public function __construct(ShopifyService $shopifyService) { $this->shopifyService = $shopifyService; } public function getProducts() { try { $products = $this->shopifyService->get('/admin/api/' . config('shopify.api_version') . '/products.json', [ 'limit' => 25, 'status' => 'active' ]); return response()->json($products); } catch (Exception $e) { return response()->json(['error' => $e->getMessage()], 500); } } }
三、Laravel7环境常见报错解决
- cURL error 60: SSL certificate problem
原因:本地环境缺少根证书,Guzzle无法验证Shopify的SSL证书
解决方法:下载cacert.pem证书文件,在php.ini中配置curl.cainfo = "你的证书存储路径/cacert.pem",重启PHP服务即可。临时调试可在请求时添加->withOptions(['verify' => false]),生产环境禁止使用该配置。 - 401 Unauthorized 错误
原因:访问令牌无效、API Key错误,或者应用权限配置不足
解决方法:核对.env中的令牌、API Key是否正确,确认Shopify应用给目标店铺授权时勾选了对应接口的访问权限,例如读取商品需要read_products权限。 - 404 Not Found 错误
原因:API路径写错、API版本已过期、店铺名填写错误
解决方法:核对请求路径是否符合Shopify API规范,检查店铺域名是否正确,使用仍在支持期内的API版本,避免使用已下线的旧版本。 - 429 Too Many Requests 错误
原因:触发了Shopify的API调用频率限制,普通应用默认限制为每秒2次请求
解决方法:请求逻辑中添加延迟,或使用队列异步处理批量请求,可根据响应头的Retry-After字段设置重试间隔。
内容的提问来源于stack exchange,提问作者user16982082
相关产品推荐
相关产品推荐

