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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:45:04