首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

心理測驗網站付費功能實作:金流串接完整指南

     編輯:PHP 相關知識

主流金流串接方式

方式適用場景代表服務手續費
信用卡/銀聯高單價、正式會員制綠界、藍新、NewebPay、PayPal、Stripe1.5%~3.5% + 固定費
超商代碼/ATM台灣本土、無信用卡用戶綠界、藍新、ezPay~NT$10-20/筆
簡訊計費低單價、行動裝置、無銀行帳戶電信商簡訊代收電信商抽成 30%~50%
Line Pay / Apple Pay / Google Pay行動優先、年輕族群Line Pay、Apple Pay、Google Pay依合約
虛擬貨幣/點數遊戲、平台內消費自建點數系統 + 金流充值自行管理

串接標準流程(以綠界 ECPay 為例)

  1. 申請商店代號、HashKey、HashIV。
  2. 前端建立訂單,後端組裝參數(金額、商品描述、回傳網址、ClientBackURL)。
  3. 計算 CheckMacValue(SHA256/MD5 簽章),確保資料未竄改。
  4. 導向金流頁面(或嵌入 iframe),用戶完成付款。
  5. 金流伺服器發送 Server-to-Server 通知(PaymentURL),後端驗證簽章、更新訂單狀態、發送確認信/開通服務。
  6. 用戶瀏覽器導回 ClientBackURL,顯示付款結果頁面。

PHP 後端驗證範例

<?php
// 綠界付款通知處理
$hash_key = 'YOUR_HASH_KEY';
$hash_iv  = 'YOUR_HASH_IV';

$post = $_POST;
$check_mac = $post['CheckMacValue'];
unset($post['CheckMacValue']);

// 依規範排序、編碼、加密
ksort($post);
$encode_str = http_build_query($post);
$encode_str = urlencode($encode_str);
$encode_str = strtolower($encode_str);
$encode_str = "HashKey={$hash_key}&{$encode_str}&HashIV={$hash_iv}";

$my_mac = strtoupper(hash('sha256', $encode_str));

if ($my_mac !== $check_mac) {
    die('簽章驗證失敗');
}

// 更新訂單
$order_id = $post['MerchantTradeNo'];
$trade_no = $post['TradeNo'];
$amount   = $post['TradeAmt'];
$status   = $post['RtnCode'] === '1' ? 'paid' : 'failed';

// TODO: 更新資料庫、發送通知、開通服務
echo '1|OK'; // 回應金流伺服器

安全與合規重點

  • HTTPS 全站強制:支付頁面、API 端點必須 TLS 1.2+。
  • PCI DSS:若自行處理信用卡卡號,需通過認證;建議使用金流商提供的 嵌入式表單/跳轉頁面,將卡號輸入框隔離在金流商網域,降低合規範圍。
  • 冪等性:通知可能重送,訂單狀態更新需判斷「已付款則略過」。
  • 記帳與對帳:每日下載金流商對帳單,自動比對系統訂單。
  • 個資保護:依個資法加密儲存、最小蒐集、保留期限管理。

測試環境與上線檢核

  1. 使用金流商提供的測試商店代號、測試卡號(如 4311-95...)。
  2. 驗證:成功、失敗、取消、逾期、部分退款、全額退款流程。
  3. 壓力測試:模擬高併發通知,確認隊列處理不漏單。
  4. 上線前切換正式商店代號、HashKey/IV、正式網域。

結語

付費功能核心在於選對金流商、嚴謹驗證簽章、處理非同步通知冪等。建議優先使用成熟 SDK(如 omnipay/omnipay、laravel-pay)降低造輪子風險,並建立完整測試與對帳機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved