发布Shopify应用时,PHP代码需做哪些修改(含API密钥等)?
Shopify应用PHP配置指南(API密钥、令牌相关)
基础配置项设置
首先创建一个配置文件存储核心密钥,绝对不要硬编码到业务代码中,示例如下:
// config.php define('SHOPIFY_API_KEY', '你的Shopify API密钥'); // 从Shopify后台应用设置中获取 define('SHOPIFY_API_SECRET', '你的Shopify API密钥'); // 同上 define('SHOPIFY_APP_URL', 'https://your-app-domain.com'); // 你的应用公网可访问域名 define('SHOPIFY_ACCESS_SCOPE', 'read_products,write_orders'); // 根据业务需求设置权限范围
授权流程与获取Access Token
1. 跳转至Shopify授权页面
当商家点击安装链接时,先引导至Shopify的授权页面:
// install.php require 'config.php'; if (!isset($_GET['shop'])) { die('请传入shop参数(格式:your-store.myshopify.com)'); } $shop = $_GET['shop']; $authUrl = sprintf( 'https://%s/admin/oauth/authorize?client_id=%s&scope=%s&redirect_uri=%s', $shop, SHOPIFY_API_KEY, SHOPIFY_ACCESS_SCOPE, urlencode(SHOPIFY_APP_URL . '/callback.php') ); header("Location: {$authUrl}"); exit;
2. 回调页面验证并获取Token
商家授权后,Shopify会回调你设置的redirect_uri,需要验证请求合法性并获取Access Token:
// callback.php require 'config.php'; $shop = $_GET['shop'] ?? ''; $code = $_GET['code'] ?? ''; $hmac = $_GET['hmac'] ?? ''; $timestamp = $_GET['timestamp'] ?? ''; // 验证HMAC签名,防止伪造请求 $queryParams = [ 'code' => $code, 'shop' => $shop, 'timestamp' => $timestamp ]; ksort($queryParams); // 必须按key排序,否则签名验证失败 $queryString = http_build_query($queryParams); $calculatedHmac = hash_hmac('sha256', $queryString, SHOPIFY_API_SECRET); if (!hash_equals($hmac, $calculatedHmac)) { die('HMAC签名验证失败'); } // 请求Access Token $tokenUrl = "https://{$shop}/admin/oauth/access_token"; $postData = json_encode([ 'client_id' => SHOPIFY_API_KEY, 'client_secret' => SHOPIFY_API_SECRET, 'code' => $code ]); $ch = curl_init($tokenUrl); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postData, CURLOPT_HTTPHEADER => ['Content-Type: application/json'] ]); $response = curl_exec($ch); curl_close($ch); $result = json_decode($response, true); if (isset($result['access_token'])) { $accessToken = $result['access_token']; // 建议将access_token和shop域名关联存储到数据库,后续API调用使用 echo "授权成功,Access Token: {$accessToken}"; } else { die('获取Access Token失败: ' . $response); }
使用Access Token调用Shopify API
拿到Access Token后,就可以调用Shopify的Admin API了,示例:
// api-call-example.php $shop = 'your-store.myshopify.com'; // 商家的店铺域名 $accessToken = '从数据库取出的access token'; $apiVersion = '2024-07'; // 使用Shopify当前支持的稳定版本 $apiUrl = "https://{$shop}/admin/api/{$apiVersion}/products.json"; $ch = curl_init($apiUrl); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "X-Shopify-Access-Token: {$accessToken}", "Content-Type: application/json" ] ]); $response = curl_exec($ch); curl_close($ch); $products = json_decode($response, true); print_r($products);
关键注意事项
- 密钥安全:不要把API密钥、Secret和Access Token提交到代码仓库,建议使用环境变量(比如
getenv('SHOPIFY_API_KEY'))替代硬编码 - API版本:Shopify API版本每季度更新,务必使用当前稳定版本,避免旧版本失效
- 权限范围:只申请业务必需的权限,过多权限会降低应用审核通过率
- 签名验证:所有来自Shopify的回调请求必须验证HMAC签名,这是安全防护的核心
内容的提问来源于stack exchange,提问作者Jignesh Rathod
相关产品推荐
相关产品推荐

