如何將付費的算力轉成商用HTML 應用

 以下內容以 Google Apps Script(GAS)為核心,示範如何從 0 到 1 打造「付費版 HTML 應用」的典型做法,並附上範例程式碼與商業化管道。你可以依產品定位,把〈A〉純 Web App 收費 或 〈B〉Marketplace 付費 Add-on 擇一(或混合)採用。


1 前置規劃:決定商業化路徑

路徑 收費機制 優點 可能限制
A. 純 Web App + 第三方金流(Stripe/PayPal/Google Pay) 你自行串接金流,下單→Webhook→GAS 驗證 開發彈性最大、可對外網使用 金流合規、自己維護授權資料庫
B. Google Workspace Marketplace 付費 Add-on 透過 Google 結帳/授權 API,自動幫你處理付款與授權 原生授權檢查、企業採用門檻低 必須完成 Marketplace 上架審查,部分國家/地區需先成為 Google Cloud Partner

何時選 B? 目標客群以 Google Workspace 使用者/企業為主,且希望 Google 代管收費與 License。
何時選 A? 面向一般網路使用者、或需要一次性/訂閱收費邏輯更彈性時。


2 建立 Apps Script 專案

  1. 建立獨立腳本:script.new → 在 Deploy > New deploymentWeb app

  2. Google Cloud API 與 OAuth:若串第三方金流,需在 Cloud Console → 啟用 UrlFetch、OAuth 同意畫面。

  3. 權限範圍:建議只要 https://www.googleapis.com/auth/userinfo.email 及必要服務。

  4. 配額概念:付費流量一多,Apps Script 每分鐘執行次數與 UrlFetchApp 都有上限,可考慮
    把金流 Callback 移到 Cloud Run / Cloud Functions。 (Quotas for Google Services | Apps Script)


3 範例架構(路徑 A:Web App + Stripe)

3-1 前端檔 index.html

<!DOCTYPE html>
<html>
<head>
  <base target="_top">
  <script src="https://js.stripe.com/v3/"></script>
</head>
<body>
  <h2>升級為專業版</h2>
  <button id="payBtn">立即付款 NT$199/月</button>

  <script>
    const stripe = Stripe('pk_test_xxxxxxxxx');            // Stripe 公鑰
    document.getElementById('payBtn').onclick = async () => {
      const {sessionId} = await google.script.run
        .withSuccessHandler(async ({sessionId})=>{
          await stripe.redirectToCheckout({sessionId});
        })
        .createCheckoutSession();                           // 伺服器端產生 Session
    };
  </script>
</body>
</html>

3-2 伺服器端 Code.gs

const STRIPE_SK = 'sk_live_xxxxxxxxxxxxxxxxxxx';

/** 首頁 */
function doGet() {
  return HtmlService.createHtmlOutputFromFile('index')
                    .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}

/** 產生 Stripe Checkout Session */
function createCheckoutSession() {
  const payload = {
    payment_method_types: ['card'],
    mode: 'subscription',
    line_items: [{price: 'price_123456', quantity: 1}],
    customer_email: Session.getActiveUser().getEmail(),
    success_url: ScriptApp.getService().getUrl() + '?success=1',
    cancel_url: ScriptApp.getService().getUrl() + '?canceled=1',
  };
  const resp = UrlFetchApp.fetch('https://api.stripe.com/v1/checkout/sessions', {
    method: 'post',
    payload,
    headers: {'Authorization': 'Bearer ' + STRIPE_SK}
  });
  return JSON.parse(resp.getContentText());   // 回傳 sessionId 給前端
}

/** Stripe Webhook(建議搬到 Cloud Run)*/
function doPost(e) {
  // 1. 驗證 Stripe 簽章
  // 2. event.type === 'checkout.session.completed' → 將 e.customer_email 記錄為付費用戶
}

參考 :Apps Script + Stripe v3 整合社群範例 (Stripe payment system - client version v3 - Apps Script integration)、Stripe → Sheets 同步教學 (Use Google Apps Script to import Stripe data to Google Sheets)。


4 授權資料管理

方法 說明
Google Sheets 最快上手,建立 license 工作表存 email / 到期日
PropertiesService 把授權資訊寫進「腳本屬性」;查詢速度快但不易人工檢查
Cloud SQL / Firestore 使用戶數 > 5,000 時建議用,結合 Cloud Functions Webhook

授權檢查放在 onOpen()(如 Spreadsheet Add-on)或每次 doGet() 開頭:

function isPaidUser(email){
  const sheet = SpreadsheetApp.openById('xxxx').getSheetByName('license');
  return sheet.getRange('A:A').getValues().flat().includes(email);
}

5 路徑 B:上架 Google Workspace Marketplace(官方付費)

  1. Manifest 加入 "addOns": { ... },並在 oauthScopes 列 whitelist。

  2. License 機制:Marketplace 會在 request header 帶 X-Google-WorkSpace-Add-On-Authorization-Mode,或你可直接呼叫 License Manager APIlicense.state == ACTIVE 判斷。

  3. 設定付費:在 Google Cloud Partner Portal 定價,支援「一次性」「訂閱」與「域內批量授權」。 (Add-ons overview - Google Workspace, Add-on types | Google Workspace add-ons)

  4. 審核:須提供隱私權政策、功能錄影、退款機制。


6 部署與版本控管

階段 動作
α 測 Deploy > Test deployments 指定測試者 email
β 版 Deployment #2Execute as: MeWho has access: Anyone with Google 帳戶
正式版 New versionWeb app, 或 Marketplace「Production」通道

⚠️ 提醒:切換新版本後,舊版 URL 不變;若要強制所有既有使用者更新,需在程式中判斷 @version 或用中的 scriptId 發佈邏輯。


7 定價、稅務、法規小抄

  • GST/VAT:Google Marketplace 上架付費 Add-on 時,Google 會代收稅;自行串金流須確認各地消費稅負。

  • 隱私權條款:GAS 存取任何 PII 時,Marketplace 審核必須附 Data-Privacy Policy URL。

  • 配額溢出:高付費用戶量時,用 Triggers 叫 Cloud Run 才不會被 Apps Script 日額度限縮。


8 延伸強化

  1. 使用 Apps Script Web-App 做「管理後台」:讓你在同一 GAS 專案,快速查詢訂閱名單、手動停權。

  2. 導入 Google Chat / Gmail Add-on:同一碼庫多平台,Marketplace 一次上架,多處收費。

  3. 分析:把 Stripe Webhook 打到 BigQuery → Looker Studio 監看 MRR。


小結

  • 純 Web App:彈性大、快速上線,金流自己顧。

  • Marketplace Add-on:授權內建、信任度高,但需通過審核。

依你的目標客群與維運能力選路徑,再按本文範例改寫程式,即可在 GAS 上推出真正的「付費版 HTML 應用」。祝開發順利🚀