自定义Shopify PHP应用报Missing Authorization key错误排查
错误信息
Fatal error: Uncaught Shopify\Exception\MissingArgumentException: Missing Authorization key in headers array in /www/doc/www.sozialstar.de/www/script/vendor/shopify/shopify-api/src/Auth/OAuth.php:226 Stack trace: #0 /www/doc/www.sozialstar.de/www/script/vendor/shopify/shopify-api/src/Utils.php(160): Shopify\Auth\OAuth::getCurrentSessionId(Array, Array, true) #1 /www/doc/www.sozialstar.de/www/script/shopifytest.php(29): Shopify\Utils::loadCurrentSession(Array, Array, true) #2 {main} thrown in /www/doc/www.sozialstar.de/www/script/vendor/shopify/shopify-api/src/Auth/OAuth.php on line 226
你的代码
$requestHeaders = array('api_version'=>'2022-10', 'X-Shopify-Access-Token'=>'mytoken'); $requestCookies = array(); $isOnline = true; $this->test_session = Utils::loadCurrentSession( $requestHeaders, $requestCookies, $isOnline );
问题原因
- 请求头格式不匹配:
loadCurrentSession方法遵循OAuth 2.0标准,要求传入Authorization头(Bearer Token格式),而你用的X-Shopify-Access-Token是直接调用API接口时的请求头,不适用于会话加载逻辑。 - 参数放置错误:
api_version是Shopify API库的全局配置项,不能放到requestHeaders数组中,需要在初始化Shopify\Context时指定。
修正后的代码
首先确保已正确初始化Shopify Context(若未初始化):
Shopify\Context::initialize( apiKey: '你的应用API密钥', apiSecretKey: '你的应用API密钥', apiVersion: '2022-10', hostName: '你的应用域名', isEmbeddedApp: true, // 根据应用类型调整(嵌入/独立) scopes: ['所需权限范围'] );
然后修改会话加载代码:
$requestHeaders = array('Authorization' => 'Bearer mytoken'); $requestCookies = array(); $isOnline = true; $this->test_session = Utils::loadCurrentSession( $requestHeaders, $requestCookies, $isOnline );
额外说明
如果你的场景是直接调用API而非加载会话,可使用Shopify\Clients\Rest客户端,并在请求时携带X-Shopify-Access-Token:
$client = new Shopify\Clients\Rest('shop-domain.myshopify.com', 'mytoken'); $response = $client->get({接口路径}, {查询参数});
内容的提问来源于stack exchange,提问作者ILG

