Q:我想做到 部落格編輯文章的過程中,最後插入程式 就可以透過程式把部落格文章抓成商品,準備上架。上架完成後賣場也可以同時出現在部落格中。對部落格主而言,可以呈現"商品" 或是 "產出商品" 這兩個功能,讓部落格主可以選擇要嵌入哪個東西。但對消費者而言,那個位置只能看到商品。
A:可以做到,而且不需要商家登入部落格後台。做法是把「可編輯」這件事交給自家的網域與身份驗證,部落格只嵌入一段公開的元件。重點是:同一段嵌入碼,消費者只看到商品;商家若已在平台登入(或持有管理用連結),才會看到編輯工具。
#方案 A(建議/MVP):以登入狀態啟用「前台編輯」
概念
部落格只嵌 或 。
這個 iframe/JS 由自家網域提供、也只跟自家 Cookie/Session 溝通。
若瀏覽者已登入且對該商品有管理權限,嵌入元件在載入時會偵測到,顯示「編輯工具列」。
一般消費者沒有管理身份,工具列自然不出現,只能瀏覽與購買。
嵌入範例(iframe 版):
嵌入範例(script 版):
元件載入邏輯(由平台控制):
讀取商品資料 → 繪出商品卡/結帳視窗。
檢查瀏覽者在 pay.example.com 的登入狀態與商品管理權限。
有權限 → 顯示「編輯」浮層(僅此人可見);無權限 → 不顯示。
「編輯」怎麼做?
浮層上的「編輯」按鈕開啟平台的管理面板(同網域),編輯名稱、價格、圖、庫存等。
儲存後呼叫平台API更新,嵌入元件即時 refresh。
全程不需要部落格後台配合。
優點
不外露任何管理密鑰;安全性由平台驗證把關。
任何支援 iframe 或 script 的平台都能用。
商家在「前台」就能調整,但只有有權限的人才看得到編輯工具。
#方案 B(進階):短效**管理連結(JWT)**開啟「前台編輯模式」
概念
平台後台產生一條 短效、一頁一次的「管理連結」,如:
https://blog.example.com/post-abc?tp_manage=eyJhbGciOi...
嵌入元件在載入時,若偵測到 tp_manage 參數,會把 token 送回平台驗證:
Token 有效且綁定該商品/該頁面/店主身分 → 顯示編輯工具。
Token 失效或不符 → 僅展示購買,不顯示工具。
Token 設定極短效(例如 15 分鐘),且只允許針對綁定的商品 ID 操作。
嵌入元件端大致流程(由平台實作):
(async function () {
const params = new URLSearchParams(location.search);
const manageToken = params.get('tp_manage');
// 正常渲染商品
await renderProduct();
// 僅當有 token 時才嘗試啟用管理工具
if (manageToken) {
const ok = await fetch('https://pay.example.com/api/verify-manage-token', {
method: 'POST',
credentials: 'include', // 與平台網域的Session同送
headers: {'Content-Type':'application/json'},
body: JSON.stringify({ token: manageToken, productId: '13' })
}).then(r=>r.ok);
if (ok) showEditorToolbar(); // 顯示僅管理者可見的編輯 UI
}
})();
優點
商家無需先登入平台,也可用管理連結快速「就地編輯」。
Token 可限制:有效期、可操作商品、可用次數、可見頁面來源(Referer)等。
安全要點
Token 必須短效、一次性、綁定特定商品與頁面。
嚴禁把長效管理 token 寫死在 HTML。
重要操作(改價、下架)最好再要求二次驗證(例如彈窗再登入)。
使用者界面建議
預設只顯示商品(給消費者看)
若偵測到商家權限(方案 A 的登入或方案 B 的管理 token),在商品卡右上角出現:
「編輯」:開側邊欄或彈窗(同網域)
「另存草稿 / 立即發布」:可選
「複製嵌入碼」:快速複製 或
編輯完成後直接即時更新商品卡,不刷新整頁。
需要的後端最小接口(由平台提供)
GET /api/products/{id}:取得商品資訊(公開可讀)
POST /api/products/{id}:更新商品(需權限)
GET /api/auth/session:查詢 TruePay 登入狀態與擁有權(同網域 Cookie)
POST /api/verify-manage-token:驗證短效管理 token(回傳是否可開編輯模式)
所有「更新」操作都只打 TruePay API;部落格端不接管理請求。
Q:解釋GET /api/auth/session:查詢平台登入狀態與擁有權(同網域 Cookie)
A:
GET /api/auth/session 這個 API 的設計,通常用來 查詢目前瀏覽者在平台的登入狀態與擁有權限。它的重點是靠 同網域的 Cookie/Session 來判斷,不需要你在前端把帳號或密碼帶出去。
✅ 運作方式
商家登入平台
商家先在平台官網登入,伺服器會在平台網域下設定一顆 登入 Cookie(例如 session_id=xxxx)。
嵌入元件請求 /api/auth/session
嵌入在部落格的 或 ,會對 TruePay 的 API 發送請求:
GET https://lili5566.truepay.tw/api/auth/session
Cookie: session_id=xxxx
瀏覽器會自動帶上 session_id(因為網域相同),部落格端看不到 Cookie 內容。
伺服器回應登入狀態
如果 session_id 有效,伺服器回應:
{
"loggedIn": true,
"userId": "seller-001",
"canManage": ["product-13", "product-22"]
}
如果未登入或 Cookie 無效,則回:
{
"loggedIn": false
}
前端決定要不要顯示編輯工具
嵌入元件只要判斷 loggedIn === true && canManage,就能控制「是否顯示編輯按鈕」。
普通消費者沒有 Cookie,自然拿不到管理權限,看到的就只有商品展示。
✅ 優點
安全性高:Cookie 存在平台網域,不會被部落格或第三方網站讀到。
使用體驗好:商家只要先在平台登入,不用再輸入什麼,文章中的嵌入元件就能自動判斷。
消費者隔離:消費者完全沒有 Cookie,也就不會誤看到管理工具。
👉 簡單比喻:
GET /api/auth/session 就像是問平台:「現在這個人有沒有登入?能不能管理某些商品?」
回答只能由 TruePay 伺服器給出,外部的部落格完全不會碰到商家的 Cookie。
[部落格文章]
|
v
[嵌入元件 (iframe/script)]
|
| 請求 → GET https://truepay.tw/api/auth/session
| (會自動帶上 truepay.tw 網域的 Cookie)
v
[TruePay 伺服器]
|
├─ Cookie 無效 → 回應 { "loggedIn": false }
|
└─ Cookie 有效 → 回應 {
"loggedIn": true,
"userId": "seller-001",
"canManage": ["product-13","product-22"]
}
問到這邊,想法跟做法算是有個譜啦!