Recur
開發者指南Getting started

SDK 快速開始

了解如何在您的專案中快速安裝和使用 Recur SDK

SDK 快速開始

本指南將幫助您在幾分鐘內開始使用 Recur SDK(版本 0.4.4+)。

安裝

npm install recur-tw
# 或
yarn add recur-tw
# 或
pnpm add recur-tw
<script src="https://unpkg.com/recur-tw@latest/dist/recur.umd.js"></script>

基本使用

1. 初始化 SDK

使用 Publishable Key 初始化 SDK:

// 使用 CDN 載入後,RecurCheckout 會自動掛載到 window
const recur = RecurCheckout.init({
  publishableKey: 'pk_test_xxx', // 您的 Publishable Key
});
import { RecurCheckout } from 'recur-tw';

const recur = RecurCheckout.init({
  publishableKey: 'pk_test_xxx', // 您的 Publishable Key
});

2. 開啟結帳視窗

提示customerEmailcustomerName 都是選填。如果未預填,用戶會在結帳頁面輸入(Email 在結帳時為必填,用於寄送收據)。

// Modal 模式結帳
await recur.checkout({
  productId: 'prod_xxx',            // 產品 ID(或使用 productSlug)
  customerEmail: 'user@example.com', // 選填:預填客戶 Email
  customerName: '王小明',            // 選填:預填客戶姓名
  externalId: 'user_123',           // 選填:您系統中的用戶 ID
  mode: 'modal',                     // 'modal' 或 'iframe'
  onSuccess: (result) => {
    console.log('Checkout session 建立成功:', result);
  },
  onPaymentComplete: (result) => {
    console.log('付款完成:', result);
    alert(`訂閱成功!ID: ${result.id}`);
  },
  onError: (error) => {
    console.error('錯誤:', error.message);
  },
  onClose: () => {
    console.log('視窗已關閉');
  },
});

3. Iframe 嵌入模式

將付款表單嵌入到您的頁面中:

await recur.checkout({
  productId: 'prod_xxx',             // 產品 ID(或使用 productSlug)
  customerEmail: 'user@example.com', // 選填:預填 Email
  customerName: '王小明',             // 選填:預填姓名
  mode: 'iframe',
  container: '#payment-container',   // CSS 選擇器或 DOM 元素
  onPaymentComplete: (result) => {
    console.log('付款完成:', result);
  },
});
<div id="payment-container"></div>

參數說明

checkout() 參數

參數類型必填說明
productIdstring✅*產品 ID(與 productSlug 二擇一)
productSlugstring✅*產品 Slug(與 productId 二擇一)
customerEmailstring預填客戶 Email(結帳時必填)
customerNamestring預填客戶姓名
externalIdstring外部客戶 ID(連結您系統的用戶)
modestring'modal'(預設)或 'iframe'
containerstring | HTMLElementiframe 模式的容器(mode='iframe' 時必填)
onSuccessfunctionCheckout session 建立成功時回調
onPaymentCompletefunction付款完成時回調
onErrorfunction錯誤時回調
onClosefunction視窗關閉時回調

Hosted Checkout 模式

如果您希望將用戶導向 Recur 託管的結帳頁面:

await recur.redirectToCheckout({
  productId: 'prod_xxx',
  successUrl: 'https://yoursite.com/success?session_id={CHECKOUT_SESSION_ID}',
  cancelUrl: 'https://yoursite.com/cancel',
  customerEmail: 'user@example.com',  // 選填
  externalId: 'user_123',             // 選填
});

取得產品列表

// 取得所有產品
const { products } = await recur.fetchProducts();

// 或篩選特定類型
// const { products } = await recur.fetchProducts({ type: 'SUBSCRIPTION' });
// const { products } = await recur.fetchProducts({ type: 'ONE_TIME' });

products.forEach(product => {
  console.log(product.id);             // prod_xxx
  console.log(product.name);           // "Pro Plan"
  console.log(product.type);           // "SUBSCRIPTION" | "ONE_TIME"
  console.log(product.price);          // 299
  console.log(product.interval);       // "month" (訂閱型才有)
  console.log(product.interval_count); // 1 (訂閱型才有)
});

Web Component

最簡單的整合方式 - 不需要寫 JavaScript:

<recur-checkout
  publishable-key="pk_test_xxx"
  product-id="prod_xxx"
  success-url="/success"
  cancel-url="/cancel"
  customer-email="user@example.com"
  button-style="gradient">
  立即訂閱
</recur-checkout>

<script src="https://unpkg.com/recur-tw@latest/dist/recur.umd.js"></script>

下一步

常見問題

如何取得 Publishable Key?

請登入 Recur 儀表板 → 設定 → 開發者 → API 金鑰。

customerEmail 和 customerName 是必填嗎?

customerEmailcustomerName 在建立 checkout session 時都是選填的。如果未預填,用戶會在結帳頁面輸入。但 Email 在結帳時是必填的(用於寄送收據)。

支援哪些支付方式?

目前支援透過 PAYUNi 的信用卡支付,未來將支援更多支付方式。

On this page