站長阿川:找 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);
}
}
```
我愛JS:有機會要開課可以聯繫,我手上有一個課程平台,不急
之後規模會慢慢弄大
我愛JS:站長走得有點前面,慢慢理解
我愛JS:好久沒聽站長聊這種技術話題 很有意思 都是網路上少見的表達
(教科書式的大家都看太多了)
我愛JS:neondb好用 我也有用