貼文討論:實驗一下非嵌入式 shopify app 的串接流程



找 AI 寫的最簡單串接

不確定流程是否為 best practice

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;

class ShopifyController extends Controller
{
    public function index(Request $request)
    {
        // Shopify 必定傳入 shop=xxxxx.myshopify.com
        $shop = $request->query('shop');

        if (!$shop) {
            return 'Missing ?shop=xxxxx.myshopify.com';
        }

        // 從 DB 找現有 token (POC 用 session 模擬)
        $token = session("token_{$shop}");

        // 已安裝 → 直接進入 app 面板
        if ($token) {
            return "已安裝 App,商店 {$shop} 的 Token 是:<br>".$token;
        }

        // 尚未安裝 → 跳 OAuth Flow
        $clientId = '6b7001530576df226f1e8d6773eea438';

        $scopes = 'read_products';
        // $redirectUri = route('shopify.redirect');
        $redirectUri = 'https://demo-connect.turn.tw/redirect';

        $authorizeUrl = "https://{$shop}/admin/oauth/authorize?".http_build_query([
            'client_id' => $clientId,
            'scope' => $scopes,
            'redirect_uri' => $redirectUri,
        ]);

        return redirect($authorizeUrl);
    }

    public function redirect(Request $request)
    {
        $shop = $request->get('shop');
        $code = $request->get('code');

        if (!$shop || !$code) {
            return 'Missing shop or code.';
        }

        $clientId = '6b7001530576df226f1e8d6773eea438';
        $clientSecret = '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';

        // 呼叫 Shopify 換永久 access token
        $response = Http::post("https://{$shop}/admin/oauth/access_token", [
            'client_id' => $clientId,
            'client_secret' => $clientSecret,
            'code' => $code,
        ]);

        if ($response->failed()) {
            return 'Token exchange failed: '.$response->body();
        }

        $accessToken = $response->json('access_token');

        // POC → 先存在 Session
        session(["token_{$shop}" => $accessToken]);

        return redirect('/?shop='.$shop);
    }
}

每週二 YT 直播 Q&A(可 Discord Call-in)
YT:https://www.youtube.com/@codelove_tw
DC:https://discord.gg/fvCF2whZ9D

⭐️ Shopify 技術教練(給工程師)
https://job.turn.tw/developer-coaching

⭐️ Shopify 接案服務(給品牌)
https://job.turn.tw/shopify-services

⭐️ 台灣 Shopify 開發者 LINE 群(非官方)
https://line.me/ti/g2/YUasX5K3CJ4QdIx76zppjHlh3-q8w-xkSyK1LA