基于shopify-api-php,如何通过CLI实现CodeIgniter到Shopify的OAuth登录?
Shopify PHP API OAuth登录回调无响应问题
我正尝试按照Shopify官方PHP API文档实现标准OAuth登录,已拥有API密钥、API密钥、主机名等信息。我通过命令行调用操作,没有Web界面,本地运行应用并使用Session存储(因无浏览器故不使用Web Cookie)。
遇到的核心问题是callback函数完全无响应:调用Context::initialize和OAuth::begin都正常,但设置的/auth/callback路由从未触发。这个路由本应在Shopify服务器返回初始登录请求响应后被调用,用来获取验证会话所需的code、hmac等值,我需要在这个回调函数内调用OAuth::callback完成授权。
相关代码如下:
Context::initialize( apiKey: config('ShopifyConfig')->api_key, apiSecretKey: config('ShopifyConfig')->api_secret_key, scopes: config('ShopifyConfig')->api_scopes, hostName: config('ShopifyConfig')->host_name, sessionStorage: new FileSessionStorage(), apiVersion: config('ShopifyConfig')->api_version, ); $redirectUrl = OAuth::begin( shop: config('ShopifyConfig')->host_name, redirectPath: '/auth/callback', // 完全不起作用! isOnline: false, setCookieFunction: function (OAuthCookie $cookie) { $_SESSION['cookie'][] = [ 'name' => $cookie->getName(), 'value' => $cookie->getValue(), 'expire' => $cookie->getExpire(), 'secure' => $cookie->isSecure(), 'httpOnly' => $cookie->isHttpOnly(), ]; return true; } ); public function logIn(Request $request) { OAuth::callback(...) // 路由文件配置 $routes->get('/auth/callback', 'Home::logIn'); $routes->post('/auth/callback', 'Home::logIn'); $routes->cli('/auth/callback', 'Home::logIn');
问题根源与解决办法
OAuth流程的本质限制
标准Shopify OAuth是基于浏览器的授权流程:OAuth::begin生成的redirectUrl是跳转至Shopify授权页面的链接,必须在浏览器中打开,用户完成授权操作后,Shopify才会自动将请求重定向到你设置的redirectPath。纯命令行调用没有浏览器完成这一步跳转,自然触发不了回调路由。无Web界面场景的替代方案
- 本地开发测试:手动复制
OAuth::begin输出的redirectUrl到浏览器中打开,完成授权。注意你的本地服务需要能被Shopify访问,可使用内网穿透工具暴露本地端口。 - 纯命令行环境:放弃OAuth流程,改用Shopify的私有应用或自定义应用的密码授权方式——直接用API密钥和密码调用API,无需浏览器授权,更适合无界面后台操作。
- 回调路由的排查要点
- 确保本地服务已启动,
/auth/callback路由可正常访问(用curl测试GET/POST请求)。 - 确认
redirectPath配置正确,Shopify会将授权请求发送到你的应用域名+redirectPath,所以域名必须是公网可访问的。 - 命令行路由
$routes->cli(...)仅在本地命令行直接调用时生效,OAuth回调是Shopify发起的HTTP请求,这个路由没用,重点确保GET/POST路由正常工作。
内容的提问来源于stack exchange,提问作者jkhamler
相关产品推荐
相关产品推荐

