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

Laravel应用Google登录后,如何授权用户绑定Shopify店铺账号?

如何在Laravel应用中关联Google登录用户与Shopify店铺账号

核心思路

要实现Google登录用户与Shopify店铺的绑定,本质是将Shopify OAuth授权获取到的店铺身份信息,与已通过Google认证的Laravel用户记录建立关联,核心分为三步:完成Shopify OAuth授权、获取店铺核心数据、建立用户-店铺关联关系。

步骤1:准备Shopify应用配置

确保你已经在Shopify Partner后台创建了应用,拿到以下关键信息:

  • API Key
  • API Secret
  • 授权回调URL(比如 https://your-app.com/shopify/callback)

在Laravel的.env文件中添加这些配置:

SHOPIFY_API_KEY=your-api-key
SHOPIFY_API_SECRET=your-api-secret
SHOPIFY_APP_URL=https://your-app.com
SHOPIFY_REDIRECT_URI=https://your-app.com/shopify/callback

步骤2:添加用户-店铺关联的数据库表

创建一个中间表来存储用户与Shopify店铺的绑定关系,比如user_shopify_shops:

// 生成迁移文件
php artisan make:migration create_user_shopify_shops_table

在迁移文件中定义字段:

public function up()
{
    Schema::create('user_shopify_shops', function (Blueprint $table) {
        $table->id();
        $table->foreignId('user_id')->constrained()->onDelete('cascade');
        $table->string('shop_domain')->unique(); // Shopify店铺域名,比如example.myshopify.com
        $table->string('access_token'); // Shopify店铺授权Token
        $table->timestamps();
    });
}

运行迁移:

php artisan migrate

然后在User模型中添加关联:

public function shopifyShops()
{
    return $this->hasMany(UserShopifyShop::class);
}

步骤3:实现Shopify授权流程

3.1 生成授权跳转路由

添加路由引导已登录用户进入Shopify授权:

// routes/web.php
Route::get('/shopify/authorize', [ShopifyAuthController::class, 'redirectToShopify'])
    ->middleware('auth') // 确保用户已通过Google登录
    ->name('shopify.authorize');

控制器方法:

// app/Http/Controllers/ShopifyAuthController.php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;

public function redirectToShopify(Request $request)
{
    // 要求用户输入Shopify店铺域名(或者从前端传入)
    $shopDomain = $request->input('shop');
    if (!$shopDomain) {
        return redirect()->back()->withErrors(['shop' => '请输入Shopify店铺域名']);
    }

    // 构建Shopify授权URL
    $query = http_build_query([
        'client_id' => env('SHOPIFY_API_KEY'),
        'scope' => 'read_products,write_orders', // 根据你的需求申请权限
        'redirect_uri' => env('SHOPIFY_REDIRECT_URI'),
        'state' => csrf_token(), // 防CSRF攻击
        'grant_options[]' => 'per-user' // 如果需要用户级权限,可选
    ]);

    return redirect("https://{$shopDomain}/admin/oauth/authorize?{$query}");
}

3.2 处理授权回调

添加回调路由:

// routes/web.php
Route::get('/shopify/callback', [ShopifyAuthController::class, 'handleShopifyCallback'])
    ->middleware('auth')
    ->name('shopify.callback');

控制器方法:

public function handleShopifyCallback(Request $request)
{
    $shopDomain = $request->input('shop');
    $code = $request->input('code');
    $state = $request->input('state');

    // 验证CSRF state
    if ($state !== session()->token()) {
        abort(403, 'Invalid state');
    }

    // 向Shopify请求access_token
    $response = Http::post("https://{$shopDomain}/admin/oauth/access_token", [
        'client_id' => env('SHOPIFY_API_KEY'),
        'client_secret' => env('SHOPIFY_API_SECRET'),
        'code' => $code,
    ]);

    if (!$response->successful()) {
        return redirect()->back()->withErrors(['auth' => 'Shopify授权失败']);
    }

    $data = $response->json();

    // 将店铺信息与当前登录用户绑定
    auth()->user()->shopifyShops()->updateOrCreate(
        ['shop_domain' => $shopDomain],
        ['access_token' => $data['access_token']]
    );

    return redirect()->route('dashboard')->with('success', 'Shopify店铺绑定成功');
}

步骤4:验证绑定关系

之后你就可以通过当前用户获取绑定的Shopify店铺信息,比如:

// 获取当前用户绑定的所有Shopify店铺
$shops = auth()->user()->shopifyShops;

// 使用access_token调用Shopify API
foreach ($shops as $shop) {
    $products = Http::withHeaders([
        'X-Shopify-Access-Token' => $shop->access_token
    ])->get("https://{$shop->shop_domain}/admin/api/2024-07/products.json");
}

注意事项

  • 权限范围:根据你的应用需求申请最小必要的Shopify API权限,避免过度授权。
  • 重复绑定:使用updateOrCreate可以处理用户重复授权同一店铺的情况,自动更新access_token。
  • 店铺唯一性:确保shop_domain字段唯一,避免同一店铺被多个用户绑定(如果你的业务不允许多用户绑定同一店铺)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:12:46