1. 準備與選擇本土VPS供應商
- 選擇在台灣有機房的 VPS(如台灣之星、台達電機房或大型雲商在台節點)。
- 規格建議:2 vCPU、4GB RAM 起;若串接大量即時支付,建議 4 vCPU+8GB。
- 作業系統:Ubuntu 20.04/22.04 LTS;固定公網 IP 與反向 DNS,方便支付平台驗證 webhook。
2. 網路安全與 TLS 設定
- 申請正式域名並用 certbot 安裝 Let's Encrypt:sudo apt update && sudo apt install certbot python3-certbot-nginx;sudo certbot --nginx -d yourdomain.tw。
- 強制 HTTPS:Nginx 設定加入 301 redirect,並啟用 HSTS。
- 防火牆:只開放 80/443、SSH 避免 22 換埠並啟用 Fail2Ban。
3. 選擇並整合台灣金流服務
- 常見供應商:綠界(ECPay)、藍新(NewebPay)、街口支付、LINE Pay、台灣 Pay、歐付寶。先註冊商店帳號並取得 Sandbox keys。
- 建議先在 Sandbox 進行端到端測試:建立付款流程、回調 webhook、退款與取消測試。
- 設計金流抽象層:在程式中用 interface 匯流不同金流 SDK,未來若切換或多金流並行只需改 adapter。
4. Webhook 與即時通知實作
- 在 VPS 上建立 /webhook/{provider} 路由,使用 HTTPS 並驗證簽章(例如 NewebPay / ECPay 提供的檢查碼)。
- 範例 Node.js 驗證:讀取 body,計算 HMAC_SHA256(secret, body),與 header 比對,不符則回 400。
- 實作重試與去重:每次 webhook 帶入 transaction_id 與 provider_id,存入資料庫,若已存在則回 200 並忽略重複處理。
5. 結算與對帳自動化腳本
- 每日凌晨排程(cron):01:00 執行 reconcile.sh,向金流提供者 API 抓取前一日交易清單。範例 cron:0 1 * * * /usr/local/bin/reconcile.sh。
- reconcile.sh 內容:呼叫 provider API -> 把回傳 CSV / JSON 與本地交易表比對(status、金額、手續費);未對上的寫入 exceptions table 並發通知。
- 對帳 SQL 範例:SELECT a.txn_id,a.amount,b.amount FROM orders a LEFT JOIN provider_reports b ON a.txn_id=b.txn_id WHERE b.txn_id IS NULL。
6. 發票與稅務整合(電子發票)
- 若需開立電子發票,與財政部 API 或第三方發票服務商接軌(先在 Sandbox 取得測試帳號)。
- 流程:付款完成 -> 建立發票請求(含買受人統編)-> 送發票系統 -> 接收回傳字軌與號碼 -> 將發票號碼寫回訂單並寄送電子發票給客戶。
- 建議每日核對發票號碼與當日開立量,若異常則擴大發送 exception。
7. 安全儲存密鑰與機密管理
- 不要將 API keys 寫死在程式碼:使用環境變數或 Vault(HashiCorp Vault)儲存。
- 權限最小化:金流 key 只給必要的服務帳號,並定期 rotate keys(每 90 天)。
- 記錄存取:啟用金流管理帳號的操作日誌,若發現異常立即 revoke 並重新發 key。
8. 性能優化與可用性規劃
- 使用 Nginx 作為反向代理並啟用 keepalive;靜態資源上 CDN(台灣節點)降低延遲。
- 針對高峰期:水平擴展多個 VPS,加上負載平衡(可用 HAProxy 或雲端 LB),並將 webhook 處理分散到 worker queue(例如 RabbitMQ / Redis Queue)。
- 監控與告警:Prometheus + Grafana 監控 API 失敗率、延遲、CPU/RAM。設定 Slack/Email 告警。
9. 測試策略與上線檢查表
- 測項:支付成功、失敗、退款、部分退款、網路中斷重試、Webhook 重複、發票成功、對帳成功。
- 上線前檢查表:域名與 SSL、核心 API keys、Webhook 路由、cron 任務、備份策略、監控告警。
- 災難演練:模擬金流異常(例如 provider downtime),確認 fallback 預案(例如暫時關閉該金流並通知顧客)。
10. 問:為何要選擇台灣本土 VPS 來部署支付系統?
答:選本土 VPS 可以降低網路延遲、符合法規需求、方便與在地銀行/金流廠商串接驗證,並且在故障時能較快聯絡機房人員處理。
11. 問:如何確保 webhook 不被偽造?
答:對 webhook 做 HMAC 簽名驗證(使用金流提供的 secret)、啟用 HTTPS、驗證來源 IP 列表,並在伺服器端檢查簽章與內容一致性。
12. 問:結算對帳常見問題有哪些?要如何處理?
答:常見問題包含交易金額不符、退款未同步、手續費差異。做法是每日自動比對 provider report 與本地訂單,將異常寫入 exceptions table 並發送自動通知給財務人工核對或發起手動請款流程。
来源:电商平台在台湾本土vps云空间上优化支付与结算流程