首页
学习
活动
专区
圈层
工具
发布

Shopify Api使用PHP

以下是使用 ​​PHP​​ 调用 ​​Shopify API​​ 的完整指南,涵盖认证、基础请求和常见操作示例。


​1. 准备工作​

​1.1 获取 Shopify API 权限​

  • 在 Shopify 后台创建 ​​私有应用​​(Private App)或 ​​自定义应用​​(Custom App):
    • 进入 Shopify 后台 → ​​Apps​​ → ​​Develop apps​​ → 创建应用。
    • 记录以下关键信息:
      • ​API Key​​(客户端 ID)
      • ​Password​​(客户端密钥)
      • ​Shop Name​​(你的店铺子域名,如 your-store
      • ​API Version​​(如 2024-01,查看版本列表)

​1.2 安装 PHP HTTP 客户端​

推荐使用 ​​Guzzle​​(PHP 的流行 HTTP 客户端):

代码语言:javascript
复制
composer require guzzlehttp/guzzle

​2. 认证方式​

Shopify API 使用 ​​OAuth 2.0​​(自定义应用)或 ​​Basic Auth​​(私有应用)。 这里以 ​​私有应用​​ 的 ​​Basic Auth​​ 为例(更简单)。

​2.1 Basic Auth 认证​

  • ​API 请求地址格式​​:https://{API_KEY}:{PASSWORD}@{SHOP_NAME}.myshopify.com/admin/api/{API_VERSION}/{ENDPOINT}
  • ​示例​​:https://your-api-key:your-password@your-store.myshopify.com/admin/api/2024-01/products.json

​3. PHP 代码示例​

​3.1 初始化 Guzzle 客户端​

代码语言:javascript
复制
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$shopName = 'your-store'; // 替换为你的店铺子域名
$apiKey = 'your-api-key'; // 替换为你的 API Key
$password = 'your-password'; // 替换为你的 API Password
$apiVersion = '2024-01'; // 替换为你的 API 版本

// 初始化 Guzzle 客户端
$client = new Client([
    'base_uri' => "https://{$apiKey}:{$password}@{$shopName}.myshopify.com/admin/api/{$apiVersion}/",
    'headers' => [
        'Content-Type' => 'application/json',
    ],
]);

​3.2 获取所有产品(GET 请求)​

代码语言:javascript
复制
try {
    $response = $client->get('products.json');
    $products = json_decode($response->getBody(), true);
    print_r($products['products']); // 输出产品列表
} catch (\GuzzleHttp\Exception\RequestException $e) {
    echo "Error: " . $e->getMessage();
}

​3.3 创建新产品(POST 请求)​

代码语言:javascript
复制
try {
    $data = [
        'product' => [
            'title' => 'Test Product',
            'body_html' => '<p>This is a test product.</p>',
            'vendor' => 'Test Vendor',
            'product_type' => 'Test Type',
        ],
    ];

    $response = $client->post('products.json', [
        'json' => $data,
    ]);

    $newProduct = json_decode($response->getBody(), true);
    echo "Created Product ID: " . $newProduct['product']['id'];
} catch (\GuzzleHttp\Exception\RequestException $e) {
    echo "Error: " . $e->getMessage();
}

​3.4 更新产品(PUT 请求)​

代码语言:javascript
复制
try {
    $productId = 123456789; // 替换为实际产品 ID
    $data = [
        'product' => [
            'title' => 'Updated Product Title',
        ],
    ];

    $response = $client->put("products/{$productId}.json", [
        'json' => $data,
    ]);

    $updatedProduct = json_decode($response->getBody(), true);
    echo "Updated Product Title: " . $updatedProduct['product']['title'];
} catch (\GuzzleHttp\Exception\RequestException $e) {
    echo "Error: " . $e->getMessage();
}

​3.5 删除产品(DELETE 请求)​

代码语言:javascript
复制
try {
    $productId = 123456789; // 替换为实际产品 ID
    $response = $client->delete("products/{$productId}.json");

    if ($response->getStatusCode() === 200) {
        echo "Product deleted successfully.";
    }
} catch (\GuzzleHttp\Exception\RequestException $e) {
    echo "Error: " . $e->getMessage();
}

​4. OAuth 2.0 认证(自定义应用)​

如果使用 ​​自定义应用​​(需用户授权),流程更复杂,需以下步骤:

​4.1 获取授权 URL​

代码语言:javascript
复制
$shopName = 'your-store';
$clientId = 'your-client-id';
$redirectUri = 'https://your-app.com/callback'; // 替换为你的回调地址
$scopes = 'read_products,write_products'; // 所需权限

$authUrl = "https://{$shopName}.myshopify.com/admin/oauth/authorize?client_id={$clientId}&scope={$scopes}&redirect_uri={$redirectUri}";
header("Location: {$authUrl}"); // 重定向用户到授权页面
exit;

​4.2 处理回调并获取 Access Token​

用户授权后,Shopify 会重定向到你的 redirect_uri 并附带 code 参数:

代码语言:javascript
复制
$shopName = $_GET['shop']; // 从回调 URL 获取店铺名
$code = $_GET['code']; // 授权码
$clientId = 'your-client-id';
$clientSecret = 'your-client-secret';

// 请求 Access Token
$response = (new Client())->post("https://{$shopName}.myshopify.com/admin/oauth/access_token", [
    'form_params' => [
        'client_id' => $clientId,
        'client_secret' => $clientSecret,
        'code' => $code,
    ],
]);

$accessToken = json_decode($response->getBody(), true)['access_token'];
echo "Access Token: " . $accessToken;

​4.3 使用 Access Token 调用 API​

代码语言:javascript
复制
$client = new Client([
    'base_uri' => "https://{$shopName}.myshopify.com/admin/api/{$apiVersion}/",
    'headers' => [
        'Content-Type' => 'application/json',
        'X-Shopify-Access-Token' => $accessToken,
    ],
]);

// 示例:获取产品
$response = $client->get('products.json');
$products = json_decode($response->getBody(), true);
print_r($products['products']);

​5. 常见问题​

​5.1 错误处理​

  • ​401 Unauthorized​​:检查 API Key/Password 或 Access Token 是否正确。
  • ​429 Too Many Requests​​:Shopify 有速率限制,需控制请求频率(建议加延迟或队列)。
  • ​404 Not Found​​:检查 Endpoint 是否正确(如 products.json 不是 product.json)。

​5.2 速率限制​

Shopify API 限制:

  • ​私有应用​​:40 次/分钟(基础版),80 次/分钟(付费版)。
  • ​自定义应用​​:根据店铺套餐不同(如 20/40/80 次/分钟)。

可通过响应头 X-Shopify-Shop-Api-Call-Limit 查看剩余配额:

代码语言:javascript
复制
$headers = $response->getHeaders();
$limit = $headers['X-Shopify-Shop-Api-Call-Limit'][0];
echo "API Calls: {$limit}"; // 格式如 "39/40"
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的文章

领券