近期接手一個電商專案,需求方指定必須接入交通銀行(交行)的網銀在線支付功能。經過調研發現,ECSHOP 官方並未內建此支付方式的插件,因此決定自行開發一套完整的支付模組。開發過程中參考了交行官方提供的 Demo 文檔,並針對 ECSHOP 的架構進行了適配優化。
在部署插件前,請務必先完成交通銀行網銀支付的伺服器端環境配置。具體安裝步驟可參考交行官方 Demo,核心要點在於:正確安裝前置機程式、配置通訊埠(預設 8080)、導入商戶憑證與密鑰。環境就緒後,將插件原始碼與語言包依路徑放置,最後進入 ECSHOP 後台「支付方式」模組安裝啟用即可。
插件主文件位於 includes/modules/payment/bankcomm.php,採用 ECSHOP 標準支付模組結構,包含模組資訊註冊、支付表單生成、異步通知處理三大核心功能。
在 $set_modules 判斷區塊中,定義了支付代碼、描述語言項、是否支持貨到付款、在線支付標識、手續費、作者、官網、版本號等元數據。此處將 is_online 設為 1,標識為純在線支付方式。
get_code()此方法負責組裝交行要求的報文參數,包括:介面版本號、商戶號、訂單號、下單日期時間、交易類型(B2C)、金額、幣種、通知方式、回調 URL 等。關鍵步驟:
| 拼接成源字串tcp://127.0.0.1:8080)發送 XML 報文retCode、signMsg、orderUrl 等關鍵字段respond()處理交行回調通知,核心流程:
$_REQUEST['notifyMsg'] 取得原文與簽名cb2200_verify)至前置機retCode 為空則驗證通過pay_id,調用 order_paid() 更新訂單狀態為已付款語言文件 languages/zh_cn/payment/bankcomm.php 定義了支付方式名稱、描述及支付按鈕文字,支援多語系擴展。
<?php include_once(ROOT_PATH . 'includes/modules/payment/bankcomm.php'); $order_['orderid'] = $order['order_sn']; $order_['amount'] = $order['yd_price']; $order_['orderMono'] = '測試訂單備註'; $order_['goodsURL'] = "https://".$_SERVER['HTTP_HOST'].'/respond.php?code=bankcomm'; $pay_code = new bankcomm; $pay_button = $pay_code->get_code($order_); $order['pay_button'] = $pay_button; ?>
1. 前置機通訊埠 必須與銀行端配置一致,預設 8080 但實際部署時需確認。
2. 商戶號 開發測試階段可使用交行提供的測試商戶號,正式上線前需替換為正式商戶號。
3. 回調 URL 需確保外網可訪問,且不攜帶額外參數干擾驗證邏輯。
4. 錯誤處理 建議在生產環境將 echo 輸出改為日誌記錄,避免敏感資訊洩露。
5. 編碼一致性 全鏈路保持 UTF-8,特別是 orderMono 等中文字段需經 htmlentities 處理。
此插件已在實際項目中穩定運行,歡迎同行提出優化建議,共同完善 ECSHOP 的支付生態。