taiwan-payment-skill 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +197 -0
- package/assets/taiwan-payment/CLAUDE.md +297 -0
- package/assets/taiwan-payment/EXAMPLES.md +1425 -0
- package/assets/taiwan-payment/README.md +306 -0
- package/assets/taiwan-payment/SKILL.md +857 -0
- package/assets/taiwan-payment/data/error-codes.csv +20 -0
- package/assets/taiwan-payment/data/field-mappings.csv +15 -0
- package/assets/taiwan-payment/data/operations.csv +8 -0
- package/assets/taiwan-payment/data/payment-methods.csv +24 -0
- package/assets/taiwan-payment/data/providers.csv +4 -0
- package/assets/taiwan-payment/data/reasoning.csv +32 -0
- package/assets/taiwan-payment/data/troubleshooting.csv +18 -0
- package/assets/taiwan-payment/references/ecpay-payment-api.md +880 -0
- package/assets/taiwan-payment/references/newebpay-payment-api.md +677 -0
- package/assets/taiwan-payment/references/payuni-payment-api.md +997 -0
- package/assets/taiwan-payment/scripts/core.py +288 -0
- package/assets/taiwan-payment/scripts/recommend.py +269 -0
- package/assets/taiwan-payment/scripts/search.py +185 -0
- package/assets/taiwan-payment/scripts/test_payment.py +358 -0
- package/assets/templates/base/quick-reference.md +370 -0
- package/assets/templates/base/skill-content.md +851 -0
- package/assets/templates/platforms/antigravity.json +25 -0
- package/assets/templates/platforms/claude.json +26 -0
- package/assets/templates/platforms/codebuddy.json +25 -0
- package/assets/templates/platforms/codex.json +25 -0
- package/assets/templates/platforms/continue.json +25 -0
- package/assets/templates/platforms/copilot.json +25 -0
- package/assets/templates/platforms/cursor.json +25 -0
- package/assets/templates/platforms/gemini.json +25 -0
- package/assets/templates/platforms/kiro.json +25 -0
- package/assets/templates/platforms/opencode.json +25 -0
- package/assets/templates/platforms/qoder.json +25 -0
- package/assets/templates/platforms/roocode.json +25 -0
- package/assets/templates/platforms/trae.json +25 -0
- package/assets/templates/platforms/windsurf.json +25 -0
- package/dist/index.js +17095 -0
- package/package.json +58 -0
package/README.md
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
<h1 align="center">taiwan-payment-skill</h1>
|
|
2
|
+
|
|
3
|
+
<h3 align="center">台灣金流 AI 開發技能包</h3>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<strong>支援 ECPay 綠界 · NewebPay 藍新 · PAYUNi 統一</strong>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://www.npmjs.com/package/taiwan-payment-skill"><img src="https://img.shields.io/npm/v/taiwan-payment-skill?style=flat-square&logo=npm" alt="npm version"></a>
|
|
11
|
+
<a href="https://www.npmjs.com/package/taiwan-payment-skill"><img src="https://img.shields.io/npm/dm/taiwan-payment-skill?style=flat-square&label=downloads" alt="npm downloads"></a>
|
|
12
|
+
<img src="https://img.shields.io/badge/node-%3E%3D18-339933?style=flat-square&logo=node.js&logoColor=white" alt="Node.js">
|
|
13
|
+
<img src="https://img.shields.io/badge/platforms-14-blue?style=flat-square" alt="14 Platforms">
|
|
14
|
+
<a href="https://github.com/Moksa1123/taiwan-payment/blob/main/LICENSE"><img src="https://img.shields.io/github/license/Moksa1123/taiwan-payment?style=flat-square" alt="License"></a>
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
<p align="center">
|
|
18
|
+
<a href="https://paypal.me/cccsubcom"><img src="https://img.shields.io/badge/PayPal-支持開發-00457C?style=for-the-badge&logo=paypal&logoColor=white" alt="PayPal"></a>
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 安裝
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install -g taiwan-payment-skill
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 使用方式
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# 進入專案目錄
|
|
35
|
+
cd /path/to/your/project
|
|
36
|
+
|
|
37
|
+
# 選擇你的 AI 助手
|
|
38
|
+
taiwan-payment init --ai claude # Claude Code
|
|
39
|
+
taiwan-payment init --ai cursor # Cursor
|
|
40
|
+
taiwan-payment init --ai windsurf # Windsurf
|
|
41
|
+
taiwan-payment init --ai copilot # GitHub Copilot
|
|
42
|
+
taiwan-payment init --ai antigravity # Antigravity
|
|
43
|
+
taiwan-payment init --ai all # 全部安裝
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
<details>
|
|
47
|
+
<summary>完整平台列表</summary>
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
taiwan-payment init --ai kiro # Kiro (AWS)
|
|
51
|
+
taiwan-payment init --ai codex # Codex CLI (OpenAI)
|
|
52
|
+
taiwan-payment init --ai qoder # Qoder
|
|
53
|
+
taiwan-payment init --ai roocode # Roo Code
|
|
54
|
+
taiwan-payment init --ai gemini # Gemini CLI
|
|
55
|
+
taiwan-payment init --ai trae # Trae (ByteDance)
|
|
56
|
+
taiwan-payment init --ai opencode # OpenCode
|
|
57
|
+
taiwan-payment init --ai continue # Continue
|
|
58
|
+
taiwan-payment init --ai codebuddy # CodeBuddy (Tencent)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
</details>
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 其他指令
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
taiwan-payment list # 列出支援平台
|
|
69
|
+
taiwan-payment info # 顯示技能資訊
|
|
70
|
+
taiwan-payment versions # 列出可用版本
|
|
71
|
+
taiwan-payment update # 檢查更新
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 選項
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
taiwan-payment init --force # 覆蓋現有檔案
|
|
78
|
+
taiwan-payment init --global # 安裝到全域目錄(所有專案共用)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 全域安裝
|
|
82
|
+
|
|
83
|
+
使用 `--global` 可將技能安裝到使用者目錄,讓所有專案都能使用:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
taiwan-payment init --ai cursor --global # ~/.cursor/skills/taiwan-payment/
|
|
87
|
+
taiwan-payment init --ai claude --global # ~/.claude/skills/taiwan-payment/
|
|
88
|
+
taiwan-payment init --ai antigravity --global # ~/.gemini/antigravity/global_skills/taiwan-payment/
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 支援平台
|
|
94
|
+
|
|
95
|
+
| 平台 | 說明 | 啟動方式 |
|
|
96
|
+
|------|------|----------|
|
|
97
|
+
| **Claude Code** | Anthropic 官方 CLI | `/taiwan-payment` |
|
|
98
|
+
| **Cursor** | AI 程式編輯器 | `/taiwan-payment` |
|
|
99
|
+
| **Windsurf** | Codeium 編輯器 | 自動 |
|
|
100
|
+
| **Copilot** | GitHub Copilot | `/taiwan-payment` |
|
|
101
|
+
| **Antigravity** | Google AI 助手 | `/taiwan-payment` |
|
|
102
|
+
| **Kiro** | AWS AI 助手 | `/taiwan-payment` |
|
|
103
|
+
| **Codex** | OpenAI CLI | 自動 |
|
|
104
|
+
| **Qoder** | Qodo AI 助手 | 自動 |
|
|
105
|
+
| **RooCode** | VSCode 擴充 | `/taiwan-payment` |
|
|
106
|
+
| **Gemini CLI** | Google Gemini | 自動 |
|
|
107
|
+
| **Trae** | ByteDance AI | 自動 |
|
|
108
|
+
| **OpenCode** | 開源 AI 助手 | 自動 |
|
|
109
|
+
| **Continue** | 開源 AI 助手 | 自動 |
|
|
110
|
+
| **CodeBuddy** | Tencent AI | 自動 |
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 金流服務商
|
|
115
|
+
|
|
116
|
+
| 服務商 | 加密方式 | API 風格 | 特點 |
|
|
117
|
+
|--------|---------|---------|------|
|
|
118
|
+
| **ECPay 綠界** | URL Encode + SHA256 | Form POST | 市佔率最高,穩定性佳 |
|
|
119
|
+
| **NewebPay 藍新** | AES-256-CBC + SHA256 | Form POST + AES | 支援最多支付方式 (13 種) |
|
|
120
|
+
| **PAYUNi 統一** | AES-256-GCM + SHA256 | RESTful JSON | RESTful 設計,API 現代化 |
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 付款方式支援
|
|
125
|
+
|
|
126
|
+
### 信用卡支付
|
|
127
|
+
- 一次付清、分期付款 (3/6/12/18/24 期)
|
|
128
|
+
- 信用卡定期定額、信用卡記憶
|
|
129
|
+
|
|
130
|
+
### 電子錢包
|
|
131
|
+
- Apple Pay、Google Pay、Samsung Pay
|
|
132
|
+
- LINE Pay、台灣 Pay
|
|
133
|
+
|
|
134
|
+
### 轉帳支付
|
|
135
|
+
- 網路 ATM、ATM 虛擬帳號
|
|
136
|
+
|
|
137
|
+
### 超商支付
|
|
138
|
+
- 超商代碼、超商條碼
|
|
139
|
+
|
|
140
|
+
### 其他
|
|
141
|
+
- TWQR、BNPL 無卡分期、AFTEE 先享後付
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 智能工具
|
|
146
|
+
|
|
147
|
+
安裝後包含以下 Python 工具(純 Python,無需外部依賴):
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# BM25 搜索引擎 - 搜索錯誤碼、欄位映射、付款方式
|
|
151
|
+
python scripts/search.py "10100058" --domain error
|
|
152
|
+
python scripts/search.py "信用卡" --domain payment_method
|
|
153
|
+
python scripts/search.py "CheckMacValue" --domain troubleshoot
|
|
154
|
+
|
|
155
|
+
# 智能推薦系統 - 根據需求推薦金流服務商
|
|
156
|
+
python scripts/recommend.py "高交易量 電商 穩定"
|
|
157
|
+
python scripts/recommend.py "多元支付 LINE Pay Apple Pay"
|
|
158
|
+
|
|
159
|
+
# 連線測試工具 - 測試 API 連線
|
|
160
|
+
python scripts/test_payment.py ecpay
|
|
161
|
+
python scripts/test_payment.py all
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### 搜索域
|
|
165
|
+
|
|
166
|
+
- `provider` - 服務商比較
|
|
167
|
+
- `operation` - API 操作端點
|
|
168
|
+
- `error` - 錯誤碼查詢
|
|
169
|
+
- `field` - 欄位映射
|
|
170
|
+
- `payment_method` - 付款方式
|
|
171
|
+
- `troubleshoot` - 疑難排解
|
|
172
|
+
- `reasoning` - 推薦決策規則
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 功能特色
|
|
177
|
+
|
|
178
|
+
- 完整 API 文檔 (ECPay, NewebPay, PAYUNi)
|
|
179
|
+
- BM25 搜索引擎 (311 行)
|
|
180
|
+
- 智能推薦系統 (373 行)
|
|
181
|
+
- 9 組完整代碼範例 (TypeScript/Python)
|
|
182
|
+
- 7 個 CSV 數據檔 (易於維護)
|
|
183
|
+
- 加密實作指南 (SHA256, AES-CBC, AES-GCM)
|
|
184
|
+
- 16 個疑難排解案例
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 授權
|
|
189
|
+
|
|
190
|
+
[MIT License](https://github.com/Moksa1123/taiwan-payment/blob/main/LICENSE)
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
<p align="center">
|
|
195
|
+
<sub>Made by <strong>Moksa</strong></sub><br>
|
|
196
|
+
<sub>service@moksaweb.com</sub>
|
|
197
|
+
</p>
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
Taiwan Payment Skill is an AI-powered toolkit for Taiwan Payment Gateway integration, providing API documentation, code examples, and scripts for major payment platforms (ECPay, NewebPay, PAYUNi). It works as a skill/workflow for AI coding assistants (Claude Code, Windsurf, Cursor, etc.).
|
|
8
|
+
|
|
9
|
+
## Available Scripts
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Search API documentation
|
|
13
|
+
python3 taiwan-payment/scripts/search.py "<query>" [--domain <domain>]
|
|
14
|
+
|
|
15
|
+
# Recommend payment provider
|
|
16
|
+
python3 taiwan-payment/scripts/recommend.py "<requirements>"
|
|
17
|
+
|
|
18
|
+
# Test API connectivity
|
|
19
|
+
python3 taiwan-payment/scripts/test_payment.py [--platform <platform>]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Supported Platforms:** `ecpay`, `newebpay`, `payuni`
|
|
23
|
+
|
|
24
|
+
**Search Domains:** `provider`, `operation`, `error`, `field`, `payment_method`, `troubleshoot`, `reasoning`
|
|
25
|
+
|
|
26
|
+
## Architecture
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
taiwan-payment/ # Source of Truth
|
|
30
|
+
├── SKILL.md # Main skill documentation (857 lines)
|
|
31
|
+
├── EXAMPLES.md # Code examples and patterns (1425 lines)
|
|
32
|
+
├── references/ # API documentation
|
|
33
|
+
│ ├── ecpay-payment-api.md
|
|
34
|
+
│ ├── newebpay-payment-api.md
|
|
35
|
+
│ └── payuni-payment-api.md
|
|
36
|
+
├── scripts/ # Utility scripts
|
|
37
|
+
│ ├── core.py # BM25 search engine (311 lines)
|
|
38
|
+
│ ├── recommend.py # Recommendation system (373 lines)
|
|
39
|
+
│ ├── search.py # Search CLI (150+ lines)
|
|
40
|
+
│ └── test_payment.py # Connection testing (359 lines)
|
|
41
|
+
└── data/ # Data-driven architecture (7 CSVs)
|
|
42
|
+
├── providers.csv # 3 providers with details
|
|
43
|
+
├── operations.csv # 8 API operations
|
|
44
|
+
├── error-codes.csv # 20+ error codes + solutions
|
|
45
|
+
├── field-mappings.csv # 15 field mappings
|
|
46
|
+
├── payment-methods.csv # 24 payment methods
|
|
47
|
+
├── reasoning.csv # 30+ recommendation rules
|
|
48
|
+
└── troubleshooting.csv # 16 troubleshooting cases
|
|
49
|
+
|
|
50
|
+
cli/ # CLI installer (taiwan-payment-skill on npm)
|
|
51
|
+
├── src/
|
|
52
|
+
│ ├── commands/init.ts # Install command with template generation
|
|
53
|
+
│ ├── utils/template.ts # Template rendering engine
|
|
54
|
+
│ ├── utils/detect.ts # AI type detection
|
|
55
|
+
│ └── utils/logger.ts # Logging utilities
|
|
56
|
+
└── assets/ # Bundled assets
|
|
57
|
+
├── taiwan-payment/ # Copy of taiwan-payment/
|
|
58
|
+
└── templates/
|
|
59
|
+
├── base/ # Base templates (skill-content.md, quick-reference.md)
|
|
60
|
+
└── platforms/ # Platform configs (14 platforms)
|
|
61
|
+
|
|
62
|
+
.claude/skills/taiwan-payment/ # Claude Code skill (generated by CLI)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Sync Rules
|
|
66
|
+
|
|
67
|
+
**Source of Truth:** `taiwan-payment/`
|
|
68
|
+
|
|
69
|
+
When modifying files:
|
|
70
|
+
|
|
71
|
+
1. **Skill Content** - Edit in `taiwan-payment/`:
|
|
72
|
+
- `SKILL.md` - Main documentation
|
|
73
|
+
- `EXAMPLES.md` - Code examples
|
|
74
|
+
- `references/*.md` - API documentation
|
|
75
|
+
- `scripts/*.py` - Utility scripts
|
|
76
|
+
- `data/*.csv` - Data files
|
|
77
|
+
|
|
78
|
+
2. **Templates** - Edit in `cli/assets/templates/`:
|
|
79
|
+
- `base/skill-content.md` - Common skill content
|
|
80
|
+
- `base/quick-reference.md` - Quick reference (Claude only)
|
|
81
|
+
- `platforms/*.json` - Platform-specific configs (14 platforms)
|
|
82
|
+
|
|
83
|
+
3. **CLI Assets** - Run sync before publishing:
|
|
84
|
+
```bash
|
|
85
|
+
cp -r taiwan-payment/* cli/assets/taiwan-payment/
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
4. **Reference Folders** - No manual sync needed. The CLI generates these from templates during `taiwan-payment init`.
|
|
89
|
+
|
|
90
|
+
## Supported AI Platforms
|
|
91
|
+
|
|
92
|
+
| Platform | Folder | Install Type |
|
|
93
|
+
|-------------|-------------|--------------|
|
|
94
|
+
| Claude Code | `.claude` | full |
|
|
95
|
+
| Cursor | `.cursor` | full |
|
|
96
|
+
| Windsurf | `.windsurf` | full |
|
|
97
|
+
| Antigravity | `.agent` | full |
|
|
98
|
+
| Copilot | `.github` | full |
|
|
99
|
+
| Kiro | `.kiro` | full |
|
|
100
|
+
| Codex | `.codex` | full |
|
|
101
|
+
| Qoder | `.qoder` | full |
|
|
102
|
+
| Roo Code | `.roo` | full |
|
|
103
|
+
| Gemini | `.gemini` | full |
|
|
104
|
+
| Trae | `.trae` | full |
|
|
105
|
+
| OpenCode | `.opencode` | full |
|
|
106
|
+
| Continue | `.continue` | full |
|
|
107
|
+
| CodeBuddy | `.codebuddy`| full |
|
|
108
|
+
|
|
109
|
+
## Prerequisites
|
|
110
|
+
|
|
111
|
+
- Node.js 18+ (for CLI)
|
|
112
|
+
- Python 3.x (for scripts, no external dependencies)
|
|
113
|
+
|
|
114
|
+
## Git Workflow
|
|
115
|
+
|
|
116
|
+
Never push directly to `main`. Always:
|
|
117
|
+
|
|
118
|
+
1. Create a new branch: `git checkout -b feat/...` or `fix/...`
|
|
119
|
+
2. Commit changes
|
|
120
|
+
3. Push branch: `git push -u origin <branch>`
|
|
121
|
+
4. Create PR: `gh pr create`
|
|
122
|
+
|
|
123
|
+
## Development Guidelines
|
|
124
|
+
|
|
125
|
+
### When Working with Payment Integration
|
|
126
|
+
|
|
127
|
+
1. **Always verify CheckMacValue/CheckSum** - This is the most critical security measure
|
|
128
|
+
2. **Use test accounts** - Never use production credentials in examples
|
|
129
|
+
3. **Handle errors gracefully** - Payment failures are common, always provide fallback
|
|
130
|
+
4. **HTTPS only** - All callback URLs must use HTTPS
|
|
131
|
+
5. **Amount validation** - Always validate amounts are positive integers
|
|
132
|
+
6. **Idempotency** - Ensure order IDs are unique to prevent duplicate payments
|
|
133
|
+
|
|
134
|
+
### Common Pitfalls
|
|
135
|
+
|
|
136
|
+
1. **CheckMacValue calculation errors**:
|
|
137
|
+
- Must sort parameters alphabetically
|
|
138
|
+
- Must use lowercase URL encoding
|
|
139
|
+
- Must exclude CheckMacValue itself from calculation
|
|
140
|
+
|
|
141
|
+
2. **AES encryption errors**:
|
|
142
|
+
- NewebPay: Ensure Key=32 bytes, IV=16 bytes, use PKCS7 padding
|
|
143
|
+
- PAYUNi: Must append 16-byte auth tag after encryption
|
|
144
|
+
|
|
145
|
+
3. **Payment notification handling**:
|
|
146
|
+
- Always verify CheckMacValue before processing
|
|
147
|
+
- Return "1|OK" for ECPay, handle appropriately for others
|
|
148
|
+
- Use database transactions to prevent duplicate processing
|
|
149
|
+
|
|
150
|
+
### Code Review Checklist
|
|
151
|
+
|
|
152
|
+
- [ ] Sensitive data (HashKey/HashIV) not exposed in frontend
|
|
153
|
+
- [ ] CheckMacValue/CheckSum properly calculated and verified
|
|
154
|
+
- [ ] HTTPS used for all callback URLs
|
|
155
|
+
- [ ] Proper error handling for payment failures
|
|
156
|
+
- [ ] Unique order IDs generated
|
|
157
|
+
- [ ] Test accounts used in examples
|
|
158
|
+
- [ ] Comments explain complex encryption logic
|
|
159
|
+
- [ ] CSV data validated and consistent
|
|
160
|
+
|
|
161
|
+
## Smart Tools Usage
|
|
162
|
+
|
|
163
|
+
### BM25 Search
|
|
164
|
+
|
|
165
|
+
Use when user asks about:
|
|
166
|
+
- "What's error code 10100058?"
|
|
167
|
+
- "How to map MerchantID field?"
|
|
168
|
+
- "Which payment methods does ECPay support?"
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
python3 scripts/search.py "<query>" [--domain <domain>] [--format json]
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Recommendation System
|
|
175
|
+
|
|
176
|
+
Use when user asks:
|
|
177
|
+
- "Which payment provider should I use?"
|
|
178
|
+
- "Best for high-volume e-commerce?"
|
|
179
|
+
- "Need LINE Pay integration"
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
python3 scripts/recommend.py "<requirements>" [--format ascii|json|simple]
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Connection Testing
|
|
186
|
+
|
|
187
|
+
Use when user wants to:
|
|
188
|
+
- Test API connectivity
|
|
189
|
+
- Verify encryption implementation
|
|
190
|
+
- Check test credentials
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
python3 scripts/test_payment.py [--platform ecpay|newebpay|payuni]
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Data-Driven Architecture
|
|
197
|
+
|
|
198
|
+
All core logic is in CSV files:
|
|
199
|
+
|
|
200
|
+
- **providers.csv** - Provider details (encryption, API endpoints, test accounts)
|
|
201
|
+
- **operations.csv** - API operations (create, query, refund, etc.)
|
|
202
|
+
- **error-codes.csv** - Error code lookup table
|
|
203
|
+
- **field-mappings.csv** - Field name mappings across providers
|
|
204
|
+
- **payment-methods.csv** - Payment method details
|
|
205
|
+
- **reasoning.csv** - Recommendation rules (30+ scenarios)
|
|
206
|
+
- **troubleshooting.csv** - Common issues and solutions
|
|
207
|
+
|
|
208
|
+
To add new data, edit CSV files directly. No code changes needed.
|
|
209
|
+
|
|
210
|
+
## Encryption Methods
|
|
211
|
+
|
|
212
|
+
### ECPay - SHA256
|
|
213
|
+
|
|
214
|
+
```python
|
|
215
|
+
def generate_check_mac_value(params, hash_key, hash_iv):
|
|
216
|
+
sorted_params = sorted(params.items())
|
|
217
|
+
param_str = '&'.join(f'{k}={v}' for k, v in sorted_params)
|
|
218
|
+
raw = f'HashKey={hash_key}&{param_str}&HashIV={hash_iv}'
|
|
219
|
+
encoded = urllib.parse.quote_plus(raw).lower()
|
|
220
|
+
return hashlib.sha256(encoded.encode('utf-8')).hexdigest().upper()
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### NewebPay - AES-256-CBC + SHA256
|
|
224
|
+
|
|
225
|
+
```python
|
|
226
|
+
def generate_trade_info(params, hash_key, hash_iv):
|
|
227
|
+
query_string = urllib.parse.urlencode(params)
|
|
228
|
+
cipher = AES.new(hash_key.encode(), AES.MODE_CBC, hash_iv.encode())
|
|
229
|
+
padded = pad(query_string.encode(), AES.block_size)
|
|
230
|
+
return cipher.encrypt(padded).hex()
|
|
231
|
+
|
|
232
|
+
def generate_trade_sha(trade_info, hash_key, hash_iv):
|
|
233
|
+
raw = f'HashKey={hash_key}&{trade_info}&HashIV={hash_iv}'
|
|
234
|
+
return hashlib.sha256(raw.encode()).hexdigest().upper()
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### PAYUNi - AES-256-GCM + SHA256
|
|
238
|
+
|
|
239
|
+
```python
|
|
240
|
+
def generate_encrypt_info(params, hash_key, hash_iv):
|
|
241
|
+
query_string = urllib.parse.urlencode(params)
|
|
242
|
+
cipher = AES.new(hash_key.encode(), AES.MODE_GCM, nonce=hash_iv.encode())
|
|
243
|
+
encrypted, tag = cipher.encrypt_and_digest(query_string.encode())
|
|
244
|
+
return (encrypted + tag).hex() # Must append tag!
|
|
245
|
+
|
|
246
|
+
def generate_hash_info(encrypt_info, hash_key, hash_iv):
|
|
247
|
+
raw = encrypt_info + hash_key + hash_iv
|
|
248
|
+
return hashlib.sha256(raw.encode()).hexdigest().upper()
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Test Accounts
|
|
252
|
+
|
|
253
|
+
### ECPay
|
|
254
|
+
```
|
|
255
|
+
商店代號: 3002607
|
|
256
|
+
HashKey: pwFHCqoQZGmho4w6
|
|
257
|
+
HashIV: EkRm7iFT261dpevs
|
|
258
|
+
測試網址: https://payment-stage.ecpay.com.tw/Cashier/AioCheckOut/V5
|
|
259
|
+
測試卡號: 4311-9522-2222-2222
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### NewebPay
|
|
263
|
+
```
|
|
264
|
+
商店代號: 請至後台申請
|
|
265
|
+
HashKey: 請至後台申請
|
|
266
|
+
HashIV: 請至後台申請
|
|
267
|
+
測試網址: https://ccore.newebpay.com/MPG/mpg_gateway
|
|
268
|
+
測試卡號: 4000-2211-1111-1111
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### PAYUNi
|
|
272
|
+
```
|
|
273
|
+
商店代號: 請至後台申請
|
|
274
|
+
HashKey: 請至後台申請
|
|
275
|
+
HashIV: 請至後台申請
|
|
276
|
+
測試網址: https://sandbox-api.payuni.com.tw/api/upp
|
|
277
|
+
測試卡號: 4000-2211-1111-1111
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
## Publishing Workflow
|
|
281
|
+
|
|
282
|
+
Before publishing to npm:
|
|
283
|
+
|
|
284
|
+
1. Update version in `cli/package.json`
|
|
285
|
+
2. Sync assets: `cp -r taiwan-payment/* cli/assets/taiwan-payment/`
|
|
286
|
+
3. Build CLI: `cd cli && npm run build`
|
|
287
|
+
4. Test locally: `npm test`
|
|
288
|
+
5. Publish: `npm publish`
|
|
289
|
+
|
|
290
|
+
## Related Projects
|
|
291
|
+
|
|
292
|
+
- **Taiwan Invoice Skill** - E-Invoice integration (ECPay, SmilePay, Amego)
|
|
293
|
+
- **Taiwan Logistics Skill** - Logistics integration (ECPay, NewebPay, PAYUNi)
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
**Last Updated**: 2026-01-29
|