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

基于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');

问题根源与解决办法

  1. OAuth流程的本质限制
    标准Shopify OAuth是基于浏览器的授权流程:OAuth::begin生成的redirectUrl是跳转至Shopify授权页面的链接,必须在浏览器中打开,用户完成授权操作后,Shopify才会自动将请求重定向到你设置的redirectPath。纯命令行调用没有浏览器完成这一步跳转,自然触发不了回调路由。

  2. 无Web界面场景的替代方案

  • 本地开发测试:手动复制OAuth::begin输出的redirectUrl到浏览器中打开,完成授权。注意你的本地服务需要能被Shopify访问,可使用内网穿透工具暴露本地端口。
  • 纯命令行环境:放弃OAuth流程,改用Shopify的私有应用或自定义应用的密码授权方式——直接用API密钥和密码调用API,无需浏览器授权,更适合无界面后台操作。
  1. 回调路由的排查要点
  • 确保本地服务已启动,/auth/callback路由可正常访问(用curl测试GET/POST请求)。
  • 确认redirectPath配置正确,Shopify会将授权请求发送到你的应用域名+redirectPath,所以域名必须是公网可访问的。
  • 命令行路由$routes->cli(...)仅在本地命令行直接调用时生效,OAuth回调是Shopify发起的HTTP请求,这个路由没用,重点确保GET/POST路由正常工作。

内容的提问来源于stack exchange,提问作者jkhamler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:47:31