taiwan-payment-skill 1.0.2 → 1.0.4
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 +2 -2
- package/assets/taiwan-payment/CLAUDE.md +297 -297
- package/assets/taiwan-payment/EXAMPLES.md +1425 -1425
- package/assets/taiwan-payment/README.md +2 -2
- package/assets/taiwan-payment/SKILL.md +857 -857
- package/assets/taiwan-payment/references/ecpay-payment-api.md +880 -880
- package/assets/taiwan-payment/references/newebpay-payment-api.md +677 -677
- package/assets/taiwan-payment/references/payuni-payment-api.md +997 -997
- package/assets/templates/base/quick-reference.md +60 -345
- package/assets/templates/base/skill-content.md +248 -738
- package/assets/templates/platforms/agent.json +26 -0
- package/assets/templates/platforms/claude.json +26 -26
- package/assets/templates/platforms/codebuddy.json +25 -25
- package/assets/templates/platforms/codex.json +26 -25
- package/assets/templates/platforms/continue.json +25 -25
- package/assets/templates/platforms/copilot.json +25 -25
- package/assets/templates/platforms/cursor.json +26 -25
- package/assets/templates/platforms/gemini.json +25 -25
- package/assets/templates/platforms/kiro.json +25 -25
- package/assets/templates/platforms/opencode.json +25 -25
- package/assets/templates/platforms/qoder.json +25 -25
- package/assets/templates/platforms/roocode.json +25 -25
- package/assets/templates/platforms/trae.json +25 -25
- package/assets/templates/platforms/windsurf.json +25 -25
- package/dist/index.js +127 -29
- package/package.json +1 -1
|
@@ -1,880 +1,880 @@
|
|
|
1
|
-
# ECPay Payment API Reference
|
|
2
|
-
|
|
3
|
-
綠界科技金流 API 完整參考文件。
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 目錄
|
|
8
|
-
|
|
9
|
-
1. [API 端點總覽](#api-端點總覽)
|
|
10
|
-
2. [測試環境](#測試環境)
|
|
11
|
-
3. [通用參數](#通用參數)
|
|
12
|
-
4. [信用卡付款](#信用卡付款)
|
|
13
|
-
5. [ATM 虛擬帳號](#atm-虛擬帳號)
|
|
14
|
-
6. [超商代碼](#超商代碼)
|
|
15
|
-
7. [超商條碼](#超商條碼)
|
|
16
|
-
8. [TWQR 行動支付](#twqr-行動支付)
|
|
17
|
-
9. [BNPL 無卡分期](#bnpl-無卡分期)
|
|
18
|
-
10. [Apple Pay](#apple-pay)
|
|
19
|
-
11. [付款結果通知](#付款結果通知)
|
|
20
|
-
12. [訂單查詢](#訂單查詢)
|
|
21
|
-
13. [信用卡請退款](#信用卡請退款)
|
|
22
|
-
14. [定期定額](#定期定額)
|
|
23
|
-
15. [CheckMacValue 計算](#checkmacvalue-計算)
|
|
24
|
-
16. [錯誤碼大全](#錯誤碼大全)
|
|
25
|
-
17. [銀行代碼對照表](#銀行代碼對照表)
|
|
26
|
-
18. [常見問題排解](#常見問題排解)
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## API 端點總覽
|
|
31
|
-
|
|
32
|
-
### 訂單相關
|
|
33
|
-
|
|
34
|
-
| 功能 | 測試環境 | 正式環境 |
|
|
35
|
-
|------|----------|----------|
|
|
36
|
-
| **訂單建立** | `https://payment-stage.ecpay.com.tw/Cashier/AioCheckOut/V5` | `https://payment.ecpay.com.tw/Cashier/AioCheckOut/V5` |
|
|
37
|
-
| **訂單查詢** | `https://payment-stage.ecpay.com.tw/Cashier/QueryTradeInfo/V5` | `https://payment.ecpay.com.tw/Cashier/QueryTradeInfo/V5` |
|
|
38
|
-
| **付款資訊查詢** | `https://payment-stage.ecpay.com.tw/Cashier/QueryPaymentInfo` | `https://payment.ecpay.com.tw/Cashier/QueryPaymentInfo` |
|
|
39
|
-
|
|
40
|
-
### 信用卡相關
|
|
41
|
-
|
|
42
|
-
| 功能 | 測試環境 | 正式環境 |
|
|
43
|
-
|------|----------|----------|
|
|
44
|
-
| **請退款** | `https://payment-stage.ecpay.com.tw/CreditDetail/DoAction` | `https://payment.ecpay.com.tw/CreditDetail/DoAction` |
|
|
45
|
-
| **信用卡查詢** | `https://payment-stage.ecpay.com.tw/CreditDetail/QueryTrade/V2` | `https://payment.ecpay.com.tw/CreditDetail/QueryTrade/V2` |
|
|
46
|
-
| **定期定額查詢** | `https://payment-stage.ecpay.com.tw/Cashier/QueryCreditCardPeriodInfo` | `https://payment.ecpay.com.tw/Cashier/QueryCreditCardPeriodInfo` |
|
|
47
|
-
| **定期定額操作** | `https://payment-stage.ecpay.com.tw/CreditDetail/CreditCardPeriodAction` | `https://payment.ecpay.com.tw/CreditDetail/CreditCardPeriodAction` |
|
|
48
|
-
|
|
49
|
-
### 對帳相關
|
|
50
|
-
|
|
51
|
-
| 功能 | 測試環境 | 正式環境 |
|
|
52
|
-
|------|----------|----------|
|
|
53
|
-
| **對帳媒體檔** | `https://payment-stage.ecpay.com.tw/CreditDetail/FundingReconDetail` | `https://payment.ecpay.com.tw/CreditDetail/FundingReconDetail` |
|
|
54
|
-
| **信用卡對帳** | `https://payment-stage.ecpay.com.tw/CreditDetail/TradeNoAio` | `https://payment.ecpay.com.tw/CreditDetail/TradeNoAio` |
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## 測試環境
|
|
59
|
-
|
|
60
|
-
### 測試帳號
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
商店代號 (MerchantID): 3002607
|
|
64
|
-
HashKey: pwFHCqoQZGmho4w6
|
|
65
|
-
HashIV: EkRm7iFT261dpevs
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### 測試信用卡
|
|
69
|
-
|
|
70
|
-
| 卡號 | 說明 | 備註 |
|
|
71
|
-
|------|------|------|
|
|
72
|
-
| `4311-9522-2222-2222` | 一般測試卡 | 無 3D 驗證 |
|
|
73
|
-
| `4000-2211-1111-1111` | 3D 驗證測試卡 | 需輸入驗證碼 |
|
|
74
|
-
|
|
75
|
-
- **有效期限**: 任意未過期日期 (如 `12/30`)
|
|
76
|
-
- **CVV/CVC**: 任意 3 碼 (如 `222`)
|
|
77
|
-
- **3D 驗證密碼**: `12345` (僅 3D 卡)
|
|
78
|
-
|
|
79
|
-
### 測試環境限制
|
|
80
|
-
|
|
81
|
-
- 每日交易筆數限制: 100 筆
|
|
82
|
-
- 單筆交易金額上限: 49,999 元
|
|
83
|
-
- 不會實際扣款
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## 通用參數
|
|
88
|
-
|
|
89
|
-
### 基本必填參數
|
|
90
|
-
|
|
91
|
-
所有付款方式都需要以下參數:
|
|
92
|
-
|
|
93
|
-
| 參數 | 類型 | 長度 | 必填 | 說明 |
|
|
94
|
-
|------|------|------|------|------|
|
|
95
|
-
| `MerchantID` | String | 10 |
|
|
96
|
-
| `MerchantTradeNo` | String | 20 |
|
|
97
|
-
| `MerchantTradeDate` | String | 20 |
|
|
98
|
-
| `PaymentType` | String | 20 |
|
|
99
|
-
| `TotalAmount` | Integer | - |
|
|
100
|
-
| `TradeDesc` | String | 200 |
|
|
101
|
-
| `ItemName` | String | 400 |
|
|
102
|
-
| `ReturnURL` | String | 200 |
|
|
103
|
-
| `ChoosePayment` | String | 20 |
|
|
104
|
-
| `CheckMacValue` | String | - |
|
|
105
|
-
| `EncryptType` | Integer | - |
|
|
106
|
-
|
|
107
|
-
### 通用選填參數
|
|
108
|
-
|
|
109
|
-
| 參數 | 類型 | 長度 | 說明 |
|
|
110
|
-
|------|------|------|------|
|
|
111
|
-
| `StoreID` | String | 20 | 分店代號 |
|
|
112
|
-
| `ClientBackURL` | String | 200 | 前台返回商店網址 |
|
|
113
|
-
| `ItemURL` | String | 200 | 商品銷售網址 |
|
|
114
|
-
| `Remark` | String | 100 | 交易備註 |
|
|
115
|
-
| `OrderResultURL` | String | 200 | 前台付款結果通知網址 |
|
|
116
|
-
| `NeedExtraPaidInfo` | String | 1 | 是否回傳額外資訊 `Y`/`N` |
|
|
117
|
-
| `Language` | String | 3 | 語系 `ENG`/`KOR`/`JPN`/`CHI` |
|
|
118
|
-
| `CustomField1` | String | 50 | 自訂欄位 1 (原值回傳) |
|
|
119
|
-
| `CustomField2` | String | 50 | 自訂欄位 2 (原值回傳) |
|
|
120
|
-
| `CustomField3` | String | 50 | 自訂欄位 3 (原值回傳) |
|
|
121
|
-
| `CustomField4` | String | 50 | 自訂欄位 4 (原值回傳) |
|
|
122
|
-
| `PlatformID` | String | 10 | 特約合作平台商代號 |
|
|
123
|
-
| `InvoiceMark` | String | 1 | 是否開立發票 `Y`/`N` |
|
|
124
|
-
|
|
125
|
-
### ChoosePayment 付款方式代碼
|
|
126
|
-
|
|
127
|
-
| 代碼 | 說明 | 金額限制 |
|
|
128
|
-
|------|------|----------|
|
|
129
|
-
| `Credit` | 信用卡 | 無限制 |
|
|
130
|
-
| `WebATM` | 網路 ATM | 1 ~ 5,000,000 |
|
|
131
|
-
| `ATM` | ATM 虛擬帳號 | 1 ~ 5,000,000 |
|
|
132
|
-
| `CVS` | 超商代碼 | 27 ~ 20,000 |
|
|
133
|
-
| `BARCODE` | 超商條碼 | 1 ~ 20,000 |
|
|
134
|
-
| `ApplePay` | Apple Pay | 需申請 |
|
|
135
|
-
| `TWQR` | 台灣Pay QR Code | 6 ~ 49,999 |
|
|
136
|
-
| `BNPL` | 無卡分期 | 依方案 |
|
|
137
|
-
| `ALL` | 全部 | 顯示所有可用方式 |
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## 信用卡付款
|
|
142
|
-
|
|
143
|
-
### ChoosePayment 設定
|
|
144
|
-
|
|
145
|
-
```
|
|
146
|
-
ChoosePayment=Credit
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
### 一次付清參數
|
|
150
|
-
|
|
151
|
-
| 參數 | 類型 | 必填 | 說明 |
|
|
152
|
-
|------|------|------|------|
|
|
153
|
-
| `Redeem` | String(1) | 否 | 紅利折抵 `Y`/`N` |
|
|
154
|
-
| `UnionPay` | Integer | 否 | `0`:可選銀聯 `1`:僅銀聯 `2`:不使用銀聯 |
|
|
155
|
-
| `BindingCard` | Integer | 否 | 記憶卡號 `0`:否 `1`:是 |
|
|
156
|
-
| `MerchantMemberID` | String(30) | 否 | 記憶卡號會員 ID (需與 BindingCard=1 配合) |
|
|
157
|
-
|
|
158
|
-
### 分期付款參數
|
|
159
|
-
|
|
160
|
-
| 參數 | 類型 | 必填 | 說明 |
|
|
161
|
-
|------|------|------|------|
|
|
162
|
-
| `CreditInstallment` | String(20) |
|
|
163
|
-
| `InstallmentAmount` | Integer | 否 | 每期金額 (系統自動計算) |
|
|
164
|
-
|
|
165
|
-
**支援期數**: 3, 6, 12, 18, 24 期 (部分銀行支援 5, 8, 9, 10, 30N)
|
|
166
|
-
|
|
167
|
-
**注意事項**:
|
|
168
|
-
- 銀聯卡不支援分期付款
|
|
169
|
-
- 分期金額需符合銀行規定 (通常 1,000 元以上)
|
|
170
|
-
- 分期、一次付清、定期定額不可同時設定
|
|
171
|
-
|
|
172
|
-
### 信用卡通知額外參數
|
|
173
|
-
|
|
174
|
-
當 `NeedExtraPaidInfo=Y` 時,付款通知會額外包含:
|
|
175
|
-
|
|
176
|
-
| 參數 | 說明 |
|
|
177
|
-
|------|------|
|
|
178
|
-
| `card4no` | 卡號末四碼 |
|
|
179
|
-
| `card6no` | 卡號前六碼 (BIN 碼) |
|
|
180
|
-
| `eci` | 3D 驗證結果代碼 |
|
|
181
|
-
| `auth_code` | 銀行授權碼 |
|
|
182
|
-
| `gwsr` | 閘道授權碼 |
|
|
183
|
-
| `process_date` | 處理時間 |
|
|
184
|
-
| `amount` | 授權金額 |
|
|
185
|
-
| `stage` | 分期期數 (分期時) |
|
|
186
|
-
| `stast` | 首期金額 (分期時) |
|
|
187
|
-
| `staession` | 各期金額 (分期時) |
|
|
188
|
-
|
|
189
|
-
### ECI 碼說明
|
|
190
|
-
|
|
191
|
-
| ECI | 說明 |
|
|
192
|
-
|-----|------|
|
|
193
|
-
| `5` | 3D 驗證成功 (Visa) |
|
|
194
|
-
| `6` | 3D 驗證成功 (MasterCard/JCB) |
|
|
195
|
-
| `2` | 3D 驗證失敗,但仍可交易 (Visa) |
|
|
196
|
-
| `1` | 3D 驗證失敗,但仍可交易 (MasterCard/JCB) |
|
|
197
|
-
| `7` | 非 3D 交易 (Visa) |
|
|
198
|
-
| `0` | 非 3D 交易 (MasterCard/JCB) |
|
|
199
|
-
|
|
200
|
-
---
|
|
201
|
-
|
|
202
|
-
## ATM 虛擬帳號
|
|
203
|
-
|
|
204
|
-
### ChoosePayment 設定
|
|
205
|
-
|
|
206
|
-
```
|
|
207
|
-
ChoosePayment=ATM
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### ATM 專用參數
|
|
211
|
-
|
|
212
|
-
| 參數 | 類型 | 必填 | 說明 |
|
|
213
|
-
|------|------|------|------|
|
|
214
|
-
| `ExpireDate` | Integer | 否 | 繳費期限 (天),`1`~`60`,預設 `3` |
|
|
215
|
-
| `PaymentInfoURL` | String(200) | 否 | 取號結果背景通知網址 |
|
|
216
|
-
| `ClientRedirectURL` | String(200) | 否 | 取號結果前台導向網址 |
|
|
217
|
-
| `ChooseSubPayment` | String(20) | 否 | 指定銀行 |
|
|
218
|
-
|
|
219
|
-
### ChooseSubPayment 銀行代碼
|
|
220
|
-
|
|
221
|
-
| 代碼 | 銀行 | 備註 |
|
|
222
|
-
|------|------|------|
|
|
223
|
-
| `FIRST` | 第一銀行 | 可取得付款人帳號 |
|
|
224
|
-
| `CATHAY` | 國泰世華 | 可取得付款人帳號 |
|
|
225
|
-
| `PANHSIN` | 板信銀行 | 可取得付款人帳號 |
|
|
226
|
-
| `KGI` | 凱基銀行 | 可取得付款人帳號 |
|
|
227
|
-
| `ESUN` | 玉山銀行 | - |
|
|
228
|
-
| `TAISHIN` | 台新銀行 | - |
|
|
229
|
-
| `CHINATRUST` | 中國信託 | - |
|
|
230
|
-
| `BOT` | 臺灣銀行 | - |
|
|
231
|
-
| `LAND` | 土地銀行 | - |
|
|
232
|
-
|
|
233
|
-
### ATM 取號結果通知參數
|
|
234
|
-
|
|
235
|
-
ECPay 會 POST 到 `PaymentInfoURL`:
|
|
236
|
-
|
|
237
|
-
| 參數 | 說明 |
|
|
238
|
-
|------|------|
|
|
239
|
-
| `MerchantID` | 商店代號 |
|
|
240
|
-
| `MerchantTradeNo` | 訂單編號 |
|
|
241
|
-
| `StoreID` | 分店代號 |
|
|
242
|
-
| `RtnCode` | `1`:取號成功 `2`:取號失敗 |
|
|
243
|
-
| `RtnMsg` | 訊息 |
|
|
244
|
-
| `TradeNo` | ECPay 交易編號 |
|
|
245
|
-
| `TradeAmt` | 交易金額 |
|
|
246
|
-
| `PaymentType` | `ATM_銀行代碼` |
|
|
247
|
-
| `TradeDate` | 訂單成立時間 |
|
|
248
|
-
| `ExpireDate` | 繳費期限 `yyyy/MM/dd` |
|
|
249
|
-
| `BankCode` | 銀行代碼 |
|
|
250
|
-
| `vAccount` | 虛擬帳號 (14~16 碼) |
|
|
251
|
-
| `CheckMacValue` | 檢查碼 |
|
|
252
|
-
|
|
253
|
-
---
|
|
254
|
-
|
|
255
|
-
## 超商代碼
|
|
256
|
-
|
|
257
|
-
### ChoosePayment 設定
|
|
258
|
-
|
|
259
|
-
```
|
|
260
|
-
ChoosePayment=CVS
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
### CVS 專用參數
|
|
264
|
-
|
|
265
|
-
| 參數 | 類型 | 必填 | 說明 |
|
|
266
|
-
|------|------|------|------|
|
|
267
|
-
| `StoreExpireDate` | Integer | 否 | 繳費期限 (分鐘),預設 `10080` (7天),最大 `43200` (30天) |
|
|
268
|
-
| `PaymentInfoURL` | String(200) | 否 | 取號結果背景通知網址 |
|
|
269
|
-
| `ClientRedirectURL` | String(200) | 否 | 取號結果前台導向網址 |
|
|
270
|
-
| `Desc_1` | String(20) | 否 | 繳費單描述 1 |
|
|
271
|
-
| `Desc_2` | String(20) | 否 | 繳費單描述 2 |
|
|
272
|
-
| `Desc_3` | String(20) | 否 | 繳費單描述 3 |
|
|
273
|
-
| `Desc_4` | String(20) | 否 | 繳費單描述 4 |
|
|
274
|
-
| `ChooseSubPayment` | String(20) | 否 | 指定超商 |
|
|
275
|
-
|
|
276
|
-
### ChooseSubPayment 超商代碼
|
|
277
|
-
|
|
278
|
-
| 代碼 | 超商 |
|
|
279
|
-
|------|------|
|
|
280
|
-
| `CVS` | 不指定 (顯示所有) |
|
|
281
|
-
| `FAMILY` | 全家 |
|
|
282
|
-
| `HILIFE` | 萊爾富 |
|
|
283
|
-
| `IBON` | 7-11 (ibon) |
|
|
284
|
-
| `OK` | OK 便利商店 |
|
|
285
|
-
|
|
286
|
-
### CVS 金額限制
|
|
287
|
-
|
|
288
|
-
- 最低: 27 元
|
|
289
|
-
- 最高: 20,000 元
|
|
290
|
-
- 7-11 單筆上限: 20,000 元
|
|
291
|
-
- 全家/萊爾富/OK 單筆上限: 20,000 元
|
|
292
|
-
|
|
293
|
-
### CVS 取號結果通知參數
|
|
294
|
-
|
|
295
|
-
| 參數 | 說明 |
|
|
296
|
-
|------|------|
|
|
297
|
-
| `MerchantID` | 商店代號 |
|
|
298
|
-
| `MerchantTradeNo` | 訂單編號 |
|
|
299
|
-
| `RtnCode` | `10100073`:取號成功 |
|
|
300
|
-
| `PaymentNo` | 繳費代碼 (14 碼) |
|
|
301
|
-
| `ExpireDate` | 繳費期限 `yyyy/MM/dd HH:mm:ss` |
|
|
302
|
-
| `CheckMacValue` | 檢查碼 |
|
|
303
|
-
|
|
304
|
-
---
|
|
305
|
-
|
|
306
|
-
## 超商條碼
|
|
307
|
-
|
|
308
|
-
### ChoosePayment 設定
|
|
309
|
-
|
|
310
|
-
```
|
|
311
|
-
ChoosePayment=BARCODE
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
### BARCODE 專用參數
|
|
315
|
-
|
|
316
|
-
| 參數 | 類型 | 必填 | 說明 |
|
|
317
|
-
|------|------|------|------|
|
|
318
|
-
| `StoreExpireDate` | Integer | 否 | 繳費期限 (天),預設 `7`,最大 `30` |
|
|
319
|
-
| `PaymentInfoURL` | String(200) | 否 | 取號結果背景通知網址 |
|
|
320
|
-
| `ClientRedirectURL` | String(200) | 否 | 取號結果前台導向網址 |
|
|
321
|
-
| `Desc_1` | String(20) | 否 | 繳費單描述 1 |
|
|
322
|
-
| `Desc_2` | String(20) | 否 | 繳費單描述 2 |
|
|
323
|
-
| `Desc_3` | String(20) | 否 | 繳費單描述 3 |
|
|
324
|
-
| `Desc_4` | String(20) | 否 | 繳費單描述 4 |
|
|
325
|
-
|
|
326
|
-
### BARCODE 金額限制
|
|
327
|
-
|
|
328
|
-
- 最低: 1 元
|
|
329
|
-
- 最高: 20,000 元
|
|
330
|
-
|
|
331
|
-
### BARCODE 取號結果通知參數
|
|
332
|
-
|
|
333
|
-
| 參數 | 說明 |
|
|
334
|
-
|------|------|
|
|
335
|
-
| `Barcode1` | 條碼 1 (7 碼) |
|
|
336
|
-
| `Barcode2` | 條碼 2 (13 碼) |
|
|
337
|
-
| `Barcode3` | 條碼 3 (16 碼) |
|
|
338
|
-
| `ExpireDate` | 繳費期限 |
|
|
339
|
-
|
|
340
|
-
---
|
|
341
|
-
|
|
342
|
-
## TWQR 行動支付
|
|
343
|
-
|
|
344
|
-
### ChoosePayment 設定
|
|
345
|
-
|
|
346
|
-
```
|
|
347
|
-
ChoosePayment=TWQR
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
### TWQR 限制
|
|
351
|
-
|
|
352
|
-
| 項目 | 說明 |
|
|
353
|
-
|------|------|
|
|
354
|
-
| 金額下限 | 6 元 |
|
|
355
|
-
| 金額上限 | 49,999 元 |
|
|
356
|
-
| 支援支付 | 台灣 Pay、歐付寶、各銀行 App |
|
|
357
|
-
|
|
358
|
-
### TWQR 注意事項
|
|
359
|
-
|
|
360
|
-
1. 需向 ECPay 申請開通 O-Pay (歐付寶) 功能
|
|
361
|
-
2. 透過 App 付款後,會開啟原生瀏覽器,可能導致登入狀態遺失
|
|
362
|
-
3. 建議使用 `OrderResultURL` 作為付款結果頁面
|
|
363
|
-
|
|
364
|
-
---
|
|
365
|
-
|
|
366
|
-
## BNPL 無卡分期
|
|
367
|
-
|
|
368
|
-
### ChoosePayment 設定
|
|
369
|
-
|
|
370
|
-
```
|
|
371
|
-
ChoosePayment=BNPL
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
### BNPL 方案
|
|
375
|
-
|
|
376
|
-
| 方案 | 金額限制 | 審核時間 |
|
|
377
|
-
|------|----------|----------|
|
|
378
|
-
| 裕富無卡分期 | 1,000 ~ 300,000 元 | 1-3 工作天 |
|
|
379
|
-
| 中租銀角零卡 | 50 ~ 300,000 元 | 即時 ~ 1 工作天 |
|
|
380
|
-
|
|
381
|
-
### BNPL 專用參數
|
|
382
|
-
|
|
383
|
-
| 參數 | 類型 | 必填 | 說明 |
|
|
384
|
-
|------|------|------|------|
|
|
385
|
-
| `PaymentInfoURL` | String(200) |
|
|
386
|
-
| `ClientRedirectURL` | String(200) | 否 | 裕富方案前台導向 |
|
|
387
|
-
| `OrderResultURL` | String(200) | 否 | 中租方案前台導向 |
|
|
388
|
-
|
|
389
|
-
### BNPL 注意事項
|
|
390
|
-
|
|
391
|
-
1. 交易需經過審核,通知時間較長
|
|
392
|
-
2. 裕富方案退款需聯繫裕富處理
|
|
393
|
-
3. 中租方案可在 ECPay 後台操作退款
|
|
394
|
-
|
|
395
|
-
---
|
|
396
|
-
|
|
397
|
-
## Apple Pay
|
|
398
|
-
|
|
399
|
-
### ChoosePayment 設定
|
|
400
|
-
|
|
401
|
-
```
|
|
402
|
-
ChoosePayment=ApplePay
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
### Apple Pay 前置作業
|
|
406
|
-
|
|
407
|
-
1. 向 ECPay 申請開通 Apple Pay
|
|
408
|
-
2. 設定 Domain Verification
|
|
409
|
-
3. 上傳 Apple 驗證檔案
|
|
410
|
-
|
|
411
|
-
### Apple Pay 限制
|
|
412
|
-
|
|
413
|
-
- 僅支援 Safari 瀏覽器
|
|
414
|
-
- 僅支援 iOS/macOS 裝置
|
|
415
|
-
- 需要 HTTPS
|
|
416
|
-
|
|
417
|
-
---
|
|
418
|
-
|
|
419
|
-
## 付款結果通知
|
|
420
|
-
|
|
421
|
-
### 通知流程
|
|
422
|
-
|
|
423
|
-
```
|
|
424
|
-
┌─────────┐ ┌─────────┐ ┌─────────┐
|
|
425
|
-
│ 消費者 │────▶│ ECPay │────▶│ 商店 │
|
|
426
|
-
│ 付款 │ │ 處理 │ │ ReturnURL│
|
|
427
|
-
└─────────┘ └─────────┘ └─────────┘
|
|
428
|
-
│
|
|
429
|
-
│ POST 付款結果
|
|
430
|
-
▼
|
|
431
|
-
┌─────────┐
|
|
432
|
-
│ 商店 │
|
|
433
|
-
│ 處理結果 │
|
|
434
|
-
└─────────┘
|
|
435
|
-
│
|
|
436
|
-
│ 回應 "1|OK"
|
|
437
|
-
▼
|
|
438
|
-
┌─────────┐
|
|
439
|
-
│ ECPay │
|
|
440
|
-
│ 確認收到 │
|
|
441
|
-
└─────────┘
|
|
442
|
-
```
|
|
443
|
-
|
|
444
|
-
### 通知參數
|
|
445
|
-
|
|
446
|
-
| 參數 | 類型 | 說明 |
|
|
447
|
-
|------|------|------|
|
|
448
|
-
| `MerchantID` | String | 商店代號 |
|
|
449
|
-
| `MerchantTradeNo` | String | 訂單編號 |
|
|
450
|
-
| `StoreID` | String | 分店代號 |
|
|
451
|
-
| `RtnCode` | Integer | 交易狀態碼 (`1`=成功) |
|
|
452
|
-
| `RtnMsg` | String | 交易訊息 |
|
|
453
|
-
| `TradeNo` | String | ECPay 交易編號 |
|
|
454
|
-
| `TradeAmt` | Integer | 交易金額 |
|
|
455
|
-
| `PaymentDate` | String | 付款時間 `yyyy/MM/dd HH:mm:ss` |
|
|
456
|
-
| `PaymentType` | String | 付款方式 |
|
|
457
|
-
| `PaymentTypeCharge` | Integer | 支付方式手續費 |
|
|
458
|
-
| `TradeDate` | String | 訂單成立時間 |
|
|
459
|
-
| `SimulatePaid` | Integer | `0`:一般 `1`:模擬付款 |
|
|
460
|
-
| `CheckMacValue` | String | 檢查碼 |
|
|
461
|
-
| `CustomField1~4` | String | 自訂欄位 (原值回傳) |
|
|
462
|
-
|
|
463
|
-
### PaymentType 回傳值對照
|
|
464
|
-
|
|
465
|
-
| 回傳值 | 說明 |
|
|
466
|
-
|--------|------|
|
|
467
|
-
| `Credit_CreditCard` | 信用卡 |
|
|
468
|
-
| `ATM_ESUN` | ATM 玉山銀行 |
|
|
469
|
-
| `ATM_TAISHIN` | ATM 台新銀行 |
|
|
470
|
-
| `CVS_CVS` | 超商代碼 |
|
|
471
|
-
| `CVS_FAMILY` | 超商代碼 - 全家 |
|
|
472
|
-
| `CVS_IBON` | 超商代碼 - 7-11 |
|
|
473
|
-
| `BARCODE_BARCODE` | 超商條碼 |
|
|
474
|
-
| `ApplePay` | Apple Pay |
|
|
475
|
-
| `TWQR_TWQR` | 台灣 Pay |
|
|
476
|
-
|
|
477
|
-
### 商店回應格式
|
|
478
|
-
|
|
479
|
-
**成功**: 回應 `1|OK`
|
|
480
|
-
|
|
481
|
-
```
|
|
482
|
-
HTTP/1.1 200 OK
|
|
483
|
-
Content-Type: text/plain
|
|
484
|
-
|
|
485
|
-
1|OK
|
|
486
|
-
```
|
|
487
|
-
|
|
488
|
-
**失敗**: 回應其他內容,ECPay 會在 24 小時內重新發送通知 (最多 10 次)
|
|
489
|
-
|
|
490
|
-
---
|
|
491
|
-
|
|
492
|
-
## 訂單查詢
|
|
493
|
-
|
|
494
|
-
### 端點
|
|
495
|
-
|
|
496
|
-
```
|
|
497
|
-
POST /Cashier/QueryTradeInfo/V5
|
|
498
|
-
Content-Type: application/x-www-form-urlencoded
|
|
499
|
-
```
|
|
500
|
-
|
|
501
|
-
### 請求參數
|
|
502
|
-
|
|
503
|
-
| 參數 | 類型 | 必填 | 說明 |
|
|
504
|
-
|------|------|------|------|
|
|
505
|
-
| `MerchantID` | String(10) |
|
|
506
|
-
| `MerchantTradeNo` | String(20) |
|
|
507
|
-
| `TimeStamp` | Integer |
|
|
508
|
-
| `CheckMacValue` | String |
|
|
509
|
-
| `PlatformID` | String(10) | 否 | 特約合作平台商代號 |
|
|
510
|
-
|
|
511
|
-
### 回應參數
|
|
512
|
-
|
|
513
|
-
| 參數 | 說明 |
|
|
514
|
-
|------|------|
|
|
515
|
-
| `MerchantID` | 商店代號 |
|
|
516
|
-
| `MerchantTradeNo` | 訂單編號 |
|
|
517
|
-
| `StoreID` | 分店代號 |
|
|
518
|
-
| `TradeNo` | ECPay 交易編號 |
|
|
519
|
-
| `TradeAmt` | 交易金額 |
|
|
520
|
-
| `PaymentDate` | 付款時間 |
|
|
521
|
-
| `PaymentType` | 付款方式 |
|
|
522
|
-
| `HandlingCharge` | ECPay 手續費 |
|
|
523
|
-
| `PaymentTypeChargeFee` | 支付方式手續費 |
|
|
524
|
-
| `TradeDate` | 訂單成立時間 |
|
|
525
|
-
| `TradeStatus` | 交易狀態 |
|
|
526
|
-
| `ItemName` | 商品名稱 |
|
|
527
|
-
| `CheckMacValue` | 檢查碼 |
|
|
528
|
-
|
|
529
|
-
### TradeStatus 交易狀態
|
|
530
|
-
|
|
531
|
-
| 狀態 | 說明 |
|
|
532
|
-
|------|------|
|
|
533
|
-
| `0` | 未付款 |
|
|
534
|
-
| `1` | 已付款 |
|
|
535
|
-
| `10200095` | 退款完成 |
|
|
536
|
-
|
|
537
|
-
---
|
|
538
|
-
|
|
539
|
-
## 信用卡請退款
|
|
540
|
-
|
|
541
|
-
### 端點
|
|
542
|
-
|
|
543
|
-
```
|
|
544
|
-
POST /CreditDetail/DoAction
|
|
545
|
-
Content-Type: application/x-www-form-urlencoded
|
|
546
|
-
```
|
|
547
|
-
|
|
548
|
-
### 請求參數
|
|
549
|
-
|
|
550
|
-
| 參數 | 類型 | 必填 | 說明 |
|
|
551
|
-
|------|------|------|------|
|
|
552
|
-
| `MerchantID` | String(10) |
|
|
553
|
-
| `MerchantTradeNo` | String(20) |
|
|
554
|
-
| `TradeNo` | String(20) |
|
|
555
|
-
| `Action` | String(1) |
|
|
556
|
-
| `TotalAmount` | Integer |
|
|
557
|
-
| `CheckMacValue` | String |
|
|
558
|
-
|
|
559
|
-
### Action 動作代碼
|
|
560
|
-
|
|
561
|
-
| 代碼 | 說明 | 使用時機 |
|
|
562
|
-
|------|------|----------|
|
|
563
|
-
| `C` | 關帳 (請款) | 授權成功後請款 |
|
|
564
|
-
| `R` | 退刷 | 已請款後退款 |
|
|
565
|
-
| `E` | 取消 | 授權成功尚未請款時取消 |
|
|
566
|
-
| `N` | 放棄 | 分期交易放棄 |
|
|
567
|
-
|
|
568
|
-
### 退款限制
|
|
569
|
-
|
|
570
|
-
- 信用卡退款: 請款後 1 年內
|
|
571
|
-
- 部分退款: 支援 (金額需小於等於原交易金額)
|
|
572
|
-
- 多次退款: 支援 (總金額需小於等於原交易金額)
|
|
573
|
-
|
|
574
|
-
---
|
|
575
|
-
|
|
576
|
-
## 定期定額
|
|
577
|
-
|
|
578
|
-
### 建立定期定額訂單參數
|
|
579
|
-
|
|
580
|
-
| 參數 | 類型 | 必填 | 說明 |
|
|
581
|
-
|------|------|------|------|
|
|
582
|
-
| `PeriodAmount` | Integer |
|
|
583
|
-
| `PeriodType` | String(1) |
|
|
584
|
-
| `Frequency` | Integer |
|
|
585
|
-
| `ExecTimes` | Integer |
|
|
586
|
-
| `PeriodReturnURL` | String(200) | 否 | 定期定額通知網址 |
|
|
587
|
-
|
|
588
|
-
### PeriodType 週期類型
|
|
589
|
-
|
|
590
|
-
| 代碼 | 說明 | Frequency 範圍 |
|
|
591
|
-
|------|------|----------------|
|
|
592
|
-
| `D` | 日 | 1 ~ 365 |
|
|
593
|
-
| `M` | 月 | 1 ~ 12 |
|
|
594
|
-
| `Y` | 年 | 1 |
|
|
595
|
-
|
|
596
|
-
### 定期定額範例
|
|
597
|
-
|
|
598
|
-
**每月扣款一次,共 12 次**:
|
|
599
|
-
```
|
|
600
|
-
PeriodAmount=500
|
|
601
|
-
PeriodType=M
|
|
602
|
-
Frequency=1
|
|
603
|
-
ExecTimes=12
|
|
604
|
-
```
|
|
605
|
-
|
|
606
|
-
**每 3 天扣款一次,共 30 次**:
|
|
607
|
-
```
|
|
608
|
-
PeriodAmount=100
|
|
609
|
-
PeriodType=D
|
|
610
|
-
Frequency=3
|
|
611
|
-
ExecTimes=30
|
|
612
|
-
```
|
|
613
|
-
|
|
614
|
-
### 定期定額查詢
|
|
615
|
-
|
|
616
|
-
#### 端點
|
|
617
|
-
|
|
618
|
-
```
|
|
619
|
-
POST /Cashier/QueryCreditCardPeriodInfo
|
|
620
|
-
Content-Type: application/x-www-form-urlencoded
|
|
621
|
-
```
|
|
622
|
-
|
|
623
|
-
#### 回應參數
|
|
624
|
-
|
|
625
|
-
| 參數 | 說明 |
|
|
626
|
-
|------|------|
|
|
627
|
-
| `ExecStatus` | 執行狀態 `1`:終止 `2`:執行中 `3`:完成 |
|
|
628
|
-
| `TotalSuccessTimes` | 成功執行次數 |
|
|
629
|
-
| `TotalSuccessAmount` | 成功授權總金額 |
|
|
630
|
-
| `ExecLog` | 執行記錄陣列 (JSON) |
|
|
631
|
-
|
|
632
|
-
### 定期定額操作
|
|
633
|
-
|
|
634
|
-
#### 端點
|
|
635
|
-
|
|
636
|
-
```
|
|
637
|
-
POST /CreditDetail/CreditCardPeriodAction
|
|
638
|
-
Content-Type: application/x-www-form-urlencoded
|
|
639
|
-
```
|
|
640
|
-
|
|
641
|
-
#### Action 動作代碼
|
|
642
|
-
|
|
643
|
-
| 代碼 | 說明 |
|
|
644
|
-
|------|------|
|
|
645
|
-
| `Cancel` | 取消授權 (終止定期定額) |
|
|
646
|
-
| `ReAuth` | 重新授權 |
|
|
647
|
-
| `UpdateAmt` | 更新授權金額 |
|
|
648
|
-
| `UpdateTimes` | 更新執行次數 |
|
|
649
|
-
|
|
650
|
-
---
|
|
651
|
-
|
|
652
|
-
## CheckMacValue 計算
|
|
653
|
-
|
|
654
|
-
### 計算步驟
|
|
655
|
-
|
|
656
|
-
1. **排序參數** - 將所有參數依照 Key 字母順序排序 (A-Z, 區分大小寫)
|
|
657
|
-
2. **組合字串** - 格式 `key1=value1&key2=value2&...`
|
|
658
|
-
3. **加上金鑰** - `HashKey={HashKey}&{參數字串}&HashIV={HashIV}`
|
|
659
|
-
4. **URL Encode** - 使用 URL Encode 編碼
|
|
660
|
-
5. **轉小寫** - 將編碼後的字串轉為小寫
|
|
661
|
-
6. **計算 SHA256** - 計算 SHA256 雜湊值
|
|
662
|
-
7. **轉大寫** - 將雜湊值轉為大寫
|
|
663
|
-
|
|
664
|
-
### URL Encode 特殊字元還原
|
|
665
|
-
|
|
666
|
-
ECPay 要求部分字元需還原:
|
|
667
|
-
|
|
668
|
-
| 編碼後 | 還原為 |
|
|
669
|
-
|--------|--------|
|
|
670
|
-
| `%2d` | `-` |
|
|
671
|
-
| `%5f` | `_` |
|
|
672
|
-
| `%2e` | `.` |
|
|
673
|
-
| `%21` | `!` |
|
|
674
|
-
| `%2a` | `*` |
|
|
675
|
-
| `%28` | `(` |
|
|
676
|
-
| `%29` | `)` |
|
|
677
|
-
|
|
678
|
-
### Python 實作
|
|
679
|
-
|
|
680
|
-
```python
|
|
681
|
-
import hashlib
|
|
682
|
-
import urllib.parse
|
|
683
|
-
|
|
684
|
-
def generate_check_mac_value(params: dict, hash_key: str, hash_iv: str) -> str:
|
|
685
|
-
"""計算 ECPay CheckMacValue"""
|
|
686
|
-
|
|
687
|
-
# 1. 排序
|
|
688
|
-
sorted_params = sorted(params.items())
|
|
689
|
-
|
|
690
|
-
# 2. 組合
|
|
691
|
-
param_str = '&'.join(f'{k}={v}' for k, v in sorted_params)
|
|
692
|
-
|
|
693
|
-
# 3. 加上 HashKey 和 HashIV
|
|
694
|
-
raw = f'HashKey={hash_key}&{param_str}&HashIV={hash_iv}'
|
|
695
|
-
|
|
696
|
-
# 4. URL Encode
|
|
697
|
-
encoded = urllib.parse.quote_plus(raw)
|
|
698
|
-
|
|
699
|
-
# 5. 轉小寫
|
|
700
|
-
encoded = encoded.lower()
|
|
701
|
-
|
|
702
|
-
# 6. SHA256
|
|
703
|
-
sha256 = hashlib.sha256(encoded.encode('utf-8')).hexdigest()
|
|
704
|
-
|
|
705
|
-
# 7. 轉大寫
|
|
706
|
-
return sha256.upper()
|
|
707
|
-
```
|
|
708
|
-
|
|
709
|
-
---
|
|
710
|
-
|
|
711
|
-
## 錯誤碼大全
|
|
712
|
-
|
|
713
|
-
### 交易狀態碼 (RtnCode)
|
|
714
|
-
|
|
715
|
-
#### 成功
|
|
716
|
-
|
|
717
|
-
| 代碼 | 說明 |
|
|
718
|
-
|------|------|
|
|
719
|
-
| `1` | 交易成功 |
|
|
720
|
-
|
|
721
|
-
#### 信用卡相關
|
|
722
|
-
|
|
723
|
-
| 代碼 | 說明 | 處理方式 |
|
|
724
|
-
|------|------|----------|
|
|
725
|
-
| `10100001` | 參數格式錯誤 | 檢查參數格式 |
|
|
726
|
-
| `10100002` | 商店代號不存在 | 確認 MerchantID |
|
|
727
|
-
| `10100003` | 訂單編號重複 | 使用新的訂單編號 |
|
|
728
|
-
| `10100004` | 訂單編號格式錯誤 | 僅英數字,20 字內 |
|
|
729
|
-
| `10100050` | 交易金額錯誤 | 確認金額為正整數 |
|
|
730
|
-
| `10100058` | CheckMacValue 錯誤 | 重新計算檢查碼 |
|
|
731
|
-
| `10100248` | 交易被拒絕 | 請客戶聯繫發卡銀行 |
|
|
732
|
-
| `10100249` | 交易失敗 | 系統錯誤,稍後重試 |
|
|
733
|
-
| `10100251` | 卡片過期 | 請客戶確認卡片效期 |
|
|
734
|
-
| `10100252` | 餘額不足 | 請客戶確認額度或餘額 |
|
|
735
|
-
| `10100253` | 超過交易限額 | 請客戶分筆交易或聯繫發卡銀行 |
|
|
736
|
-
| `10100254` | 交易受限 | 請客戶聯繫發卡銀行 |
|
|
737
|
-
| `10100255` | 掛失卡 | 請客戶使用其他卡片 |
|
|
738
|
-
| `10100256` | 偽卡 | 請客戶使用其他卡片 |
|
|
739
|
-
| `10100257` | 安控失敗 | 3D 驗證失敗,請重試 |
|
|
740
|
-
| `10300066` | 交易結果待確認 | 至後台確認後再出貨 |
|
|
741
|
-
|
|
742
|
-
#### ATM 相關
|
|
743
|
-
|
|
744
|
-
| 代碼 | 說明 |
|
|
745
|
-
|------|------|
|
|
746
|
-
| `2` | ATM 取號失敗 |
|
|
747
|
-
| `10100073` | CVS/BARCODE 取號成功 |
|
|
748
|
-
| `10100074` | CVS/BARCODE 取號失敗 |
|
|
749
|
-
|
|
750
|
-
#### 系統相關
|
|
751
|
-
|
|
752
|
-
| 代碼 | 說明 |
|
|
753
|
-
|------|------|
|
|
754
|
-
| `10200047` | 訂單已關帳 |
|
|
755
|
-
| `10200048` | 訂單已取消 |
|
|
756
|
-
| `10200095` | 退款完成 |
|
|
757
|
-
|
|
758
|
-
### CheckMacValue 錯誤
|
|
759
|
-
|
|
760
|
-
| 錯誤訊息 | 原因 | 解決方式 |
|
|
761
|
-
|----------|------|----------|
|
|
762
|
-
| `CheckMacValue verification failed` | 檢查碼計算錯誤 | 確認 HashKey/HashIV、排序、編碼 |
|
|
763
|
-
| `HashKey 或 HashIV 錯誤` | 金鑰錯誤 | 確認測試/正式環境金鑰 |
|
|
764
|
-
|
|
765
|
-
---
|
|
766
|
-
|
|
767
|
-
## 銀行代碼對照表
|
|
768
|
-
|
|
769
|
-
### ATM 銀行代碼
|
|
770
|
-
|
|
771
|
-
| 代碼 | 銀行名稱 |
|
|
772
|
-
|------|----------|
|
|
773
|
-
| `004` | 臺灣銀行 |
|
|
774
|
-
| `005` | 土地銀行 |
|
|
775
|
-
| `006` | 合作金庫 |
|
|
776
|
-
| `007` | 第一銀行 |
|
|
777
|
-
| `008` | 華南銀行 |
|
|
778
|
-
| `009` | 彰化銀行 |
|
|
779
|
-
| `011` | 上海銀行 |
|
|
780
|
-
| `012` | 台北富邦 |
|
|
781
|
-
| `013` | 國泰世華 |
|
|
782
|
-
| `017` | 兆豐銀行 |
|
|
783
|
-
| `021` | 花旗銀行 |
|
|
784
|
-
| `048` | 王道銀行 |
|
|
785
|
-
| `050` | 臺灣企銀 |
|
|
786
|
-
| `052` | 渣打銀行 |
|
|
787
|
-
| `053` | 台中銀行 |
|
|
788
|
-
| `054` | 京城銀行 |
|
|
789
|
-
| `081` | 滙豐銀行 |
|
|
790
|
-
| `102` | 華泰銀行 |
|
|
791
|
-
| `103` | 新光銀行 |
|
|
792
|
-
| `108` | 陽信銀行 |
|
|
793
|
-
| `118` | 板信銀行 |
|
|
794
|
-
| `147` | 三信銀行 |
|
|
795
|
-
| `803` | 聯邦銀行 |
|
|
796
|
-
| `805` | 遠東銀行 |
|
|
797
|
-
| `806` | 元大銀行 |
|
|
798
|
-
| `807` | 永豐銀行 |
|
|
799
|
-
| `808` | 玉山銀行 |
|
|
800
|
-
| `809` | 凱基銀行 |
|
|
801
|
-
| `810` | 星展銀行 |
|
|
802
|
-
| `812` | 台新銀行 |
|
|
803
|
-
| `816` | 安泰銀行 |
|
|
804
|
-
| `822` | 中國信託 |
|
|
805
|
-
|
|
806
|
-
---
|
|
807
|
-
|
|
808
|
-
## 常見問題排解
|
|
809
|
-
|
|
810
|
-
### CheckMacValue 錯誤
|
|
811
|
-
|
|
812
|
-
**問題**: 收到 `CheckMacValue verification failed`
|
|
813
|
-
|
|
814
|
-
**檢查項目**:
|
|
815
|
-
1. HashKey 和 HashIV 是否正確 (測試/正式環境不同)
|
|
816
|
-
2. 參數排序是否依照字母順序 (區分大小寫)
|
|
817
|
-
3. URL Encode 是否正確 (特殊字元需還原)
|
|
818
|
-
4. 是否轉小寫後再計算 SHA256
|
|
819
|
-
5. 最後是否轉大寫
|
|
820
|
-
|
|
821
|
-
### 訂單編號重複
|
|
822
|
-
|
|
823
|
-
**問題**: 收到 `10100003` 訂單編號重複
|
|
824
|
-
|
|
825
|
-
**解決**:
|
|
826
|
-
- 使用時間戳 + 隨機數產生唯一編號
|
|
827
|
-
- 訂單編號最長 20 字元,僅英數字
|
|
828
|
-
|
|
829
|
-
```python
|
|
830
|
-
import time
|
|
831
|
-
import random
|
|
832
|
-
order_id = f"ORD{int(time.time())}{random.randint(100, 999)}"
|
|
833
|
-
```
|
|
834
|
-
|
|
835
|
-
### 付款通知未收到
|
|
836
|
-
|
|
837
|
-
**問題**: 付款成功但沒收到 ReturnURL 通知
|
|
838
|
-
|
|
839
|
-
**檢查項目**:
|
|
840
|
-
1. ReturnURL 是否為 HTTPS
|
|
841
|
-
2. 伺服器是否能被外網存取
|
|
842
|
-
3. 防火牆是否阻擋 ECPay IP
|
|
843
|
-
4. 是否正確回應 `1|OK`
|
|
844
|
-
|
|
845
|
-
**ECPay 通知 IP 白名單**:
|
|
846
|
-
```
|
|
847
|
-
211.23.128.0/24
|
|
848
|
-
220.130.179.0/24
|
|
849
|
-
210.200.216.0/24
|
|
850
|
-
```
|
|
851
|
-
|
|
852
|
-
### 模擬付款
|
|
853
|
-
|
|
854
|
-
**問題**: SimulatePaid = 1
|
|
855
|
-
|
|
856
|
-
**說明**: 測試環境的模擬付款,正式環境不會有此情況
|
|
857
|
-
|
|
858
|
-
### 金額限制
|
|
859
|
-
|
|
860
|
-
**問題**: 交易金額錯誤
|
|
861
|
-
|
|
862
|
-
**各付款方式限制**:
|
|
863
|
-
| 付款方式 | 最低 | 最高 |
|
|
864
|
-
|----------|------|------|
|
|
865
|
-
| 信用卡 | 1 | 無限制 |
|
|
866
|
-
| ATM | 1 | 5,000,000 |
|
|
867
|
-
| CVS | 27 | 20,000 |
|
|
868
|
-
| BARCODE | 1 | 20,000 |
|
|
869
|
-
| TWQR | 6 | 49,999 |
|
|
870
|
-
|
|
871
|
-
---
|
|
872
|
-
|
|
873
|
-
## 官方資源
|
|
874
|
-
|
|
875
|
-
- **開發者中心**: https://developers.ecpay.com.tw/
|
|
876
|
-
- **API 文件下載**: https://www.ecpay.com.tw/Service/API_Dwnld
|
|
877
|
-
- **商店後台 (測試)**: https://vendor-stage.ecpay.com.tw/
|
|
878
|
-
- **商店後台 (正式)**: https://vendor.ecpay.com.tw/
|
|
879
|
-
- **技術客服**: techsupport@ecpay.com.tw
|
|
880
|
-
- **客服電話**: (02) 2655-1775
|
|
1
|
+
# ECPay Payment API Reference
|
|
2
|
+
|
|
3
|
+
綠界科技金流 API 完整參考文件。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 目錄
|
|
8
|
+
|
|
9
|
+
1. [API 端點總覽](#api-端點總覽)
|
|
10
|
+
2. [測試環境](#測試環境)
|
|
11
|
+
3. [通用參數](#通用參數)
|
|
12
|
+
4. [信用卡付款](#信用卡付款)
|
|
13
|
+
5. [ATM 虛擬帳號](#atm-虛擬帳號)
|
|
14
|
+
6. [超商代碼](#超商代碼)
|
|
15
|
+
7. [超商條碼](#超商條碼)
|
|
16
|
+
8. [TWQR 行動支付](#twqr-行動支付)
|
|
17
|
+
9. [BNPL 無卡分期](#bnpl-無卡分期)
|
|
18
|
+
10. [Apple Pay](#apple-pay)
|
|
19
|
+
11. [付款結果通知](#付款結果通知)
|
|
20
|
+
12. [訂單查詢](#訂單查詢)
|
|
21
|
+
13. [信用卡請退款](#信用卡請退款)
|
|
22
|
+
14. [定期定額](#定期定額)
|
|
23
|
+
15. [CheckMacValue 計算](#checkmacvalue-計算)
|
|
24
|
+
16. [錯誤碼大全](#錯誤碼大全)
|
|
25
|
+
17. [銀行代碼對照表](#銀行代碼對照表)
|
|
26
|
+
18. [常見問題排解](#常見問題排解)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## API 端點總覽
|
|
31
|
+
|
|
32
|
+
### 訂單相關
|
|
33
|
+
|
|
34
|
+
| 功能 | 測試環境 | 正式環境 |
|
|
35
|
+
|------|----------|----------|
|
|
36
|
+
| **訂單建立** | `https://payment-stage.ecpay.com.tw/Cashier/AioCheckOut/V5` | `https://payment.ecpay.com.tw/Cashier/AioCheckOut/V5` |
|
|
37
|
+
| **訂單查詢** | `https://payment-stage.ecpay.com.tw/Cashier/QueryTradeInfo/V5` | `https://payment.ecpay.com.tw/Cashier/QueryTradeInfo/V5` |
|
|
38
|
+
| **付款資訊查詢** | `https://payment-stage.ecpay.com.tw/Cashier/QueryPaymentInfo` | `https://payment.ecpay.com.tw/Cashier/QueryPaymentInfo` |
|
|
39
|
+
|
|
40
|
+
### 信用卡相關
|
|
41
|
+
|
|
42
|
+
| 功能 | 測試環境 | 正式環境 |
|
|
43
|
+
|------|----------|----------|
|
|
44
|
+
| **請退款** | `https://payment-stage.ecpay.com.tw/CreditDetail/DoAction` | `https://payment.ecpay.com.tw/CreditDetail/DoAction` |
|
|
45
|
+
| **信用卡查詢** | `https://payment-stage.ecpay.com.tw/CreditDetail/QueryTrade/V2` | `https://payment.ecpay.com.tw/CreditDetail/QueryTrade/V2` |
|
|
46
|
+
| **定期定額查詢** | `https://payment-stage.ecpay.com.tw/Cashier/QueryCreditCardPeriodInfo` | `https://payment.ecpay.com.tw/Cashier/QueryCreditCardPeriodInfo` |
|
|
47
|
+
| **定期定額操作** | `https://payment-stage.ecpay.com.tw/CreditDetail/CreditCardPeriodAction` | `https://payment.ecpay.com.tw/CreditDetail/CreditCardPeriodAction` |
|
|
48
|
+
|
|
49
|
+
### 對帳相關
|
|
50
|
+
|
|
51
|
+
| 功能 | 測試環境 | 正式環境 |
|
|
52
|
+
|------|----------|----------|
|
|
53
|
+
| **對帳媒體檔** | `https://payment-stage.ecpay.com.tw/CreditDetail/FundingReconDetail` | `https://payment.ecpay.com.tw/CreditDetail/FundingReconDetail` |
|
|
54
|
+
| **信用卡對帳** | `https://payment-stage.ecpay.com.tw/CreditDetail/TradeNoAio` | `https://payment.ecpay.com.tw/CreditDetail/TradeNoAio` |
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## 測試環境
|
|
59
|
+
|
|
60
|
+
### 測試帳號
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
商店代號 (MerchantID): 3002607
|
|
64
|
+
HashKey: pwFHCqoQZGmho4w6
|
|
65
|
+
HashIV: EkRm7iFT261dpevs
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 測試信用卡
|
|
69
|
+
|
|
70
|
+
| 卡號 | 說明 | 備註 |
|
|
71
|
+
|------|------|------|
|
|
72
|
+
| `4311-9522-2222-2222` | 一般測試卡 | 無 3D 驗證 |
|
|
73
|
+
| `4000-2211-1111-1111` | 3D 驗證測試卡 | 需輸入驗證碼 |
|
|
74
|
+
|
|
75
|
+
- **有效期限**: 任意未過期日期 (如 `12/30`)
|
|
76
|
+
- **CVV/CVC**: 任意 3 碼 (如 `222`)
|
|
77
|
+
- **3D 驗證密碼**: `12345` (僅 3D 卡)
|
|
78
|
+
|
|
79
|
+
### 測試環境限制
|
|
80
|
+
|
|
81
|
+
- 每日交易筆數限制: 100 筆
|
|
82
|
+
- 單筆交易金額上限: 49,999 元
|
|
83
|
+
- 不會實際扣款
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 通用參數
|
|
88
|
+
|
|
89
|
+
### 基本必填參數
|
|
90
|
+
|
|
91
|
+
所有付款方式都需要以下參數:
|
|
92
|
+
|
|
93
|
+
| 參數 | 類型 | 長度 | 必填 | 說明 |
|
|
94
|
+
|------|------|------|------|------|
|
|
95
|
+
| `MerchantID` | String | 10 | ● | 商店代號 |
|
|
96
|
+
| `MerchantTradeNo` | String | 20 | ● | 訂單編號,需唯一,僅英數字 |
|
|
97
|
+
| `MerchantTradeDate` | String | 20 | ● | 交易時間 `yyyy/MM/dd HH:mm:ss` |
|
|
98
|
+
| `PaymentType` | String | 20 | ● | 固定值 `aio` |
|
|
99
|
+
| `TotalAmount` | Integer | - | ● | 金額,整數,無小數點 |
|
|
100
|
+
| `TradeDesc` | String | 200 | ● | 交易描述,需 URL Encode |
|
|
101
|
+
| `ItemName` | String | 400 | ● | 商品名稱,多項用 `#` 分隔 |
|
|
102
|
+
| `ReturnURL` | String | 200 | ● | 付款結果背景通知網址 |
|
|
103
|
+
| `ChoosePayment` | String | 20 | ● | 付款方式代碼 |
|
|
104
|
+
| `CheckMacValue` | String | - | ● | SHA256 檢查碼 |
|
|
105
|
+
| `EncryptType` | Integer | - | ● | 固定值 `1` (SHA256) |
|
|
106
|
+
|
|
107
|
+
### 通用選填參數
|
|
108
|
+
|
|
109
|
+
| 參數 | 類型 | 長度 | 說明 |
|
|
110
|
+
|------|------|------|------|
|
|
111
|
+
| `StoreID` | String | 20 | 分店代號 |
|
|
112
|
+
| `ClientBackURL` | String | 200 | 前台返回商店網址 |
|
|
113
|
+
| `ItemURL` | String | 200 | 商品銷售網址 |
|
|
114
|
+
| `Remark` | String | 100 | 交易備註 |
|
|
115
|
+
| `OrderResultURL` | String | 200 | 前台付款結果通知網址 |
|
|
116
|
+
| `NeedExtraPaidInfo` | String | 1 | 是否回傳額外資訊 `Y`/`N` |
|
|
117
|
+
| `Language` | String | 3 | 語系 `ENG`/`KOR`/`JPN`/`CHI` |
|
|
118
|
+
| `CustomField1` | String | 50 | 自訂欄位 1 (原值回傳) |
|
|
119
|
+
| `CustomField2` | String | 50 | 自訂欄位 2 (原值回傳) |
|
|
120
|
+
| `CustomField3` | String | 50 | 自訂欄位 3 (原值回傳) |
|
|
121
|
+
| `CustomField4` | String | 50 | 自訂欄位 4 (原值回傳) |
|
|
122
|
+
| `PlatformID` | String | 10 | 特約合作平台商代號 |
|
|
123
|
+
| `InvoiceMark` | String | 1 | 是否開立發票 `Y`/`N` |
|
|
124
|
+
|
|
125
|
+
### ChoosePayment 付款方式代碼
|
|
126
|
+
|
|
127
|
+
| 代碼 | 說明 | 金額限制 |
|
|
128
|
+
|------|------|----------|
|
|
129
|
+
| `Credit` | 信用卡 | 無限制 |
|
|
130
|
+
| `WebATM` | 網路 ATM | 1 ~ 5,000,000 |
|
|
131
|
+
| `ATM` | ATM 虛擬帳號 | 1 ~ 5,000,000 |
|
|
132
|
+
| `CVS` | 超商代碼 | 27 ~ 20,000 |
|
|
133
|
+
| `BARCODE` | 超商條碼 | 1 ~ 20,000 |
|
|
134
|
+
| `ApplePay` | Apple Pay | 需申請 |
|
|
135
|
+
| `TWQR` | 台灣Pay QR Code | 6 ~ 49,999 |
|
|
136
|
+
| `BNPL` | 無卡分期 | 依方案 |
|
|
137
|
+
| `ALL` | 全部 | 顯示所有可用方式 |
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 信用卡付款
|
|
142
|
+
|
|
143
|
+
### ChoosePayment 設定
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
ChoosePayment=Credit
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 一次付清參數
|
|
150
|
+
|
|
151
|
+
| 參數 | 類型 | 必填 | 說明 |
|
|
152
|
+
|------|------|------|------|
|
|
153
|
+
| `Redeem` | String(1) | 否 | 紅利折抵 `Y`/`N` |
|
|
154
|
+
| `UnionPay` | Integer | 否 | `0`:可選銀聯 `1`:僅銀聯 `2`:不使用銀聯 |
|
|
155
|
+
| `BindingCard` | Integer | 否 | 記憶卡號 `0`:否 `1`:是 |
|
|
156
|
+
| `MerchantMemberID` | String(30) | 否 | 記憶卡號會員 ID (需與 BindingCard=1 配合) |
|
|
157
|
+
|
|
158
|
+
### 分期付款參數
|
|
159
|
+
|
|
160
|
+
| 參數 | 類型 | 必填 | 說明 |
|
|
161
|
+
|------|------|------|------|
|
|
162
|
+
| `CreditInstallment` | String(20) | ● | 分期期數,如 `3,6,12,18,24` |
|
|
163
|
+
| `InstallmentAmount` | Integer | 否 | 每期金額 (系統自動計算) |
|
|
164
|
+
|
|
165
|
+
**支援期數**: 3, 6, 12, 18, 24 期 (部分銀行支援 5, 8, 9, 10, 30N)
|
|
166
|
+
|
|
167
|
+
**注意事項**:
|
|
168
|
+
- 銀聯卡不支援分期付款
|
|
169
|
+
- 分期金額需符合銀行規定 (通常 1,000 元以上)
|
|
170
|
+
- 分期、一次付清、定期定額不可同時設定
|
|
171
|
+
|
|
172
|
+
### 信用卡通知額外參數
|
|
173
|
+
|
|
174
|
+
當 `NeedExtraPaidInfo=Y` 時,付款通知會額外包含:
|
|
175
|
+
|
|
176
|
+
| 參數 | 說明 |
|
|
177
|
+
|------|------|
|
|
178
|
+
| `card4no` | 卡號末四碼 |
|
|
179
|
+
| `card6no` | 卡號前六碼 (BIN 碼) |
|
|
180
|
+
| `eci` | 3D 驗證結果代碼 |
|
|
181
|
+
| `auth_code` | 銀行授權碼 |
|
|
182
|
+
| `gwsr` | 閘道授權碼 |
|
|
183
|
+
| `process_date` | 處理時間 |
|
|
184
|
+
| `amount` | 授權金額 |
|
|
185
|
+
| `stage` | 分期期數 (分期時) |
|
|
186
|
+
| `stast` | 首期金額 (分期時) |
|
|
187
|
+
| `staession` | 各期金額 (分期時) |
|
|
188
|
+
|
|
189
|
+
### ECI 碼說明
|
|
190
|
+
|
|
191
|
+
| ECI | 說明 |
|
|
192
|
+
|-----|------|
|
|
193
|
+
| `5` | 3D 驗證成功 (Visa) |
|
|
194
|
+
| `6` | 3D 驗證成功 (MasterCard/JCB) |
|
|
195
|
+
| `2` | 3D 驗證失敗,但仍可交易 (Visa) |
|
|
196
|
+
| `1` | 3D 驗證失敗,但仍可交易 (MasterCard/JCB) |
|
|
197
|
+
| `7` | 非 3D 交易 (Visa) |
|
|
198
|
+
| `0` | 非 3D 交易 (MasterCard/JCB) |
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## ATM 虛擬帳號
|
|
203
|
+
|
|
204
|
+
### ChoosePayment 設定
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
ChoosePayment=ATM
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### ATM 專用參數
|
|
211
|
+
|
|
212
|
+
| 參數 | 類型 | 必填 | 說明 |
|
|
213
|
+
|------|------|------|------|
|
|
214
|
+
| `ExpireDate` | Integer | 否 | 繳費期限 (天),`1`~`60`,預設 `3` |
|
|
215
|
+
| `PaymentInfoURL` | String(200) | 否 | 取號結果背景通知網址 |
|
|
216
|
+
| `ClientRedirectURL` | String(200) | 否 | 取號結果前台導向網址 |
|
|
217
|
+
| `ChooseSubPayment` | String(20) | 否 | 指定銀行 |
|
|
218
|
+
|
|
219
|
+
### ChooseSubPayment 銀行代碼
|
|
220
|
+
|
|
221
|
+
| 代碼 | 銀行 | 備註 |
|
|
222
|
+
|------|------|------|
|
|
223
|
+
| `FIRST` | 第一銀行 | 可取得付款人帳號 |
|
|
224
|
+
| `CATHAY` | 國泰世華 | 可取得付款人帳號 |
|
|
225
|
+
| `PANHSIN` | 板信銀行 | 可取得付款人帳號 |
|
|
226
|
+
| `KGI` | 凱基銀行 | 可取得付款人帳號 |
|
|
227
|
+
| `ESUN` | 玉山銀行 | - |
|
|
228
|
+
| `TAISHIN` | 台新銀行 | - |
|
|
229
|
+
| `CHINATRUST` | 中國信託 | - |
|
|
230
|
+
| `BOT` | 臺灣銀行 | - |
|
|
231
|
+
| `LAND` | 土地銀行 | - |
|
|
232
|
+
|
|
233
|
+
### ATM 取號結果通知參數
|
|
234
|
+
|
|
235
|
+
ECPay 會 POST 到 `PaymentInfoURL`:
|
|
236
|
+
|
|
237
|
+
| 參數 | 說明 |
|
|
238
|
+
|------|------|
|
|
239
|
+
| `MerchantID` | 商店代號 |
|
|
240
|
+
| `MerchantTradeNo` | 訂單編號 |
|
|
241
|
+
| `StoreID` | 分店代號 |
|
|
242
|
+
| `RtnCode` | `1`:取號成功 `2`:取號失敗 |
|
|
243
|
+
| `RtnMsg` | 訊息 |
|
|
244
|
+
| `TradeNo` | ECPay 交易編號 |
|
|
245
|
+
| `TradeAmt` | 交易金額 |
|
|
246
|
+
| `PaymentType` | `ATM_銀行代碼` |
|
|
247
|
+
| `TradeDate` | 訂單成立時間 |
|
|
248
|
+
| `ExpireDate` | 繳費期限 `yyyy/MM/dd` |
|
|
249
|
+
| `BankCode` | 銀行代碼 |
|
|
250
|
+
| `vAccount` | 虛擬帳號 (14~16 碼) |
|
|
251
|
+
| `CheckMacValue` | 檢查碼 |
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## 超商代碼
|
|
256
|
+
|
|
257
|
+
### ChoosePayment 設定
|
|
258
|
+
|
|
259
|
+
```
|
|
260
|
+
ChoosePayment=CVS
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### CVS 專用參數
|
|
264
|
+
|
|
265
|
+
| 參數 | 類型 | 必填 | 說明 |
|
|
266
|
+
|------|------|------|------|
|
|
267
|
+
| `StoreExpireDate` | Integer | 否 | 繳費期限 (分鐘),預設 `10080` (7天),最大 `43200` (30天) |
|
|
268
|
+
| `PaymentInfoURL` | String(200) | 否 | 取號結果背景通知網址 |
|
|
269
|
+
| `ClientRedirectURL` | String(200) | 否 | 取號結果前台導向網址 |
|
|
270
|
+
| `Desc_1` | String(20) | 否 | 繳費單描述 1 |
|
|
271
|
+
| `Desc_2` | String(20) | 否 | 繳費單描述 2 |
|
|
272
|
+
| `Desc_3` | String(20) | 否 | 繳費單描述 3 |
|
|
273
|
+
| `Desc_4` | String(20) | 否 | 繳費單描述 4 |
|
|
274
|
+
| `ChooseSubPayment` | String(20) | 否 | 指定超商 |
|
|
275
|
+
|
|
276
|
+
### ChooseSubPayment 超商代碼
|
|
277
|
+
|
|
278
|
+
| 代碼 | 超商 |
|
|
279
|
+
|------|------|
|
|
280
|
+
| `CVS` | 不指定 (顯示所有) |
|
|
281
|
+
| `FAMILY` | 全家 |
|
|
282
|
+
| `HILIFE` | 萊爾富 |
|
|
283
|
+
| `IBON` | 7-11 (ibon) |
|
|
284
|
+
| `OK` | OK 便利商店 |
|
|
285
|
+
|
|
286
|
+
### CVS 金額限制
|
|
287
|
+
|
|
288
|
+
- 最低: 27 元
|
|
289
|
+
- 最高: 20,000 元
|
|
290
|
+
- 7-11 單筆上限: 20,000 元
|
|
291
|
+
- 全家/萊爾富/OK 單筆上限: 20,000 元
|
|
292
|
+
|
|
293
|
+
### CVS 取號結果通知參數
|
|
294
|
+
|
|
295
|
+
| 參數 | 說明 |
|
|
296
|
+
|------|------|
|
|
297
|
+
| `MerchantID` | 商店代號 |
|
|
298
|
+
| `MerchantTradeNo` | 訂單編號 |
|
|
299
|
+
| `RtnCode` | `10100073`:取號成功 |
|
|
300
|
+
| `PaymentNo` | 繳費代碼 (14 碼) |
|
|
301
|
+
| `ExpireDate` | 繳費期限 `yyyy/MM/dd HH:mm:ss` |
|
|
302
|
+
| `CheckMacValue` | 檢查碼 |
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## 超商條碼
|
|
307
|
+
|
|
308
|
+
### ChoosePayment 設定
|
|
309
|
+
|
|
310
|
+
```
|
|
311
|
+
ChoosePayment=BARCODE
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### BARCODE 專用參數
|
|
315
|
+
|
|
316
|
+
| 參數 | 類型 | 必填 | 說明 |
|
|
317
|
+
|------|------|------|------|
|
|
318
|
+
| `StoreExpireDate` | Integer | 否 | 繳費期限 (天),預設 `7`,最大 `30` |
|
|
319
|
+
| `PaymentInfoURL` | String(200) | 否 | 取號結果背景通知網址 |
|
|
320
|
+
| `ClientRedirectURL` | String(200) | 否 | 取號結果前台導向網址 |
|
|
321
|
+
| `Desc_1` | String(20) | 否 | 繳費單描述 1 |
|
|
322
|
+
| `Desc_2` | String(20) | 否 | 繳費單描述 2 |
|
|
323
|
+
| `Desc_3` | String(20) | 否 | 繳費單描述 3 |
|
|
324
|
+
| `Desc_4` | String(20) | 否 | 繳費單描述 4 |
|
|
325
|
+
|
|
326
|
+
### BARCODE 金額限制
|
|
327
|
+
|
|
328
|
+
- 最低: 1 元
|
|
329
|
+
- 最高: 20,000 元
|
|
330
|
+
|
|
331
|
+
### BARCODE 取號結果通知參數
|
|
332
|
+
|
|
333
|
+
| 參數 | 說明 |
|
|
334
|
+
|------|------|
|
|
335
|
+
| `Barcode1` | 條碼 1 (7 碼) |
|
|
336
|
+
| `Barcode2` | 條碼 2 (13 碼) |
|
|
337
|
+
| `Barcode3` | 條碼 3 (16 碼) |
|
|
338
|
+
| `ExpireDate` | 繳費期限 |
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## TWQR 行動支付
|
|
343
|
+
|
|
344
|
+
### ChoosePayment 設定
|
|
345
|
+
|
|
346
|
+
```
|
|
347
|
+
ChoosePayment=TWQR
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### TWQR 限制
|
|
351
|
+
|
|
352
|
+
| 項目 | 說明 |
|
|
353
|
+
|------|------|
|
|
354
|
+
| 金額下限 | 6 元 |
|
|
355
|
+
| 金額上限 | 49,999 元 |
|
|
356
|
+
| 支援支付 | 台灣 Pay、歐付寶、各銀行 App |
|
|
357
|
+
|
|
358
|
+
### TWQR 注意事項
|
|
359
|
+
|
|
360
|
+
1. 需向 ECPay 申請開通 O-Pay (歐付寶) 功能
|
|
361
|
+
2. 透過 App 付款後,會開啟原生瀏覽器,可能導致登入狀態遺失
|
|
362
|
+
3. 建議使用 `OrderResultURL` 作為付款結果頁面
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## BNPL 無卡分期
|
|
367
|
+
|
|
368
|
+
### ChoosePayment 設定
|
|
369
|
+
|
|
370
|
+
```
|
|
371
|
+
ChoosePayment=BNPL
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### BNPL 方案
|
|
375
|
+
|
|
376
|
+
| 方案 | 金額限制 | 審核時間 |
|
|
377
|
+
|------|----------|----------|
|
|
378
|
+
| 裕富無卡分期 | 1,000 ~ 300,000 元 | 1-3 工作天 |
|
|
379
|
+
| 中租銀角零卡 | 50 ~ 300,000 元 | 即時 ~ 1 工作天 |
|
|
380
|
+
|
|
381
|
+
### BNPL 專用參數
|
|
382
|
+
|
|
383
|
+
| 參數 | 類型 | 必填 | 說明 |
|
|
384
|
+
|------|------|------|------|
|
|
385
|
+
| `PaymentInfoURL` | String(200) | ● | 訂單建立通知 (需審核) |
|
|
386
|
+
| `ClientRedirectURL` | String(200) | 否 | 裕富方案前台導向 |
|
|
387
|
+
| `OrderResultURL` | String(200) | 否 | 中租方案前台導向 |
|
|
388
|
+
|
|
389
|
+
### BNPL 注意事項
|
|
390
|
+
|
|
391
|
+
1. 交易需經過審核,通知時間較長
|
|
392
|
+
2. 裕富方案退款需聯繫裕富處理
|
|
393
|
+
3. 中租方案可在 ECPay 後台操作退款
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## Apple Pay
|
|
398
|
+
|
|
399
|
+
### ChoosePayment 設定
|
|
400
|
+
|
|
401
|
+
```
|
|
402
|
+
ChoosePayment=ApplePay
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
### Apple Pay 前置作業
|
|
406
|
+
|
|
407
|
+
1. 向 ECPay 申請開通 Apple Pay
|
|
408
|
+
2. 設定 Domain Verification
|
|
409
|
+
3. 上傳 Apple 驗證檔案
|
|
410
|
+
|
|
411
|
+
### Apple Pay 限制
|
|
412
|
+
|
|
413
|
+
- 僅支援 Safari 瀏覽器
|
|
414
|
+
- 僅支援 iOS/macOS 裝置
|
|
415
|
+
- 需要 HTTPS
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## 付款結果通知
|
|
420
|
+
|
|
421
|
+
### 通知流程
|
|
422
|
+
|
|
423
|
+
```
|
|
424
|
+
┌─────────┐ ┌─────────┐ ┌─────────┐
|
|
425
|
+
│ 消費者 │────▶│ ECPay │────▶│ 商店 │
|
|
426
|
+
│ 付款 │ │ 處理 │ │ ReturnURL│
|
|
427
|
+
└─────────┘ └─────────┘ └─────────┘
|
|
428
|
+
│
|
|
429
|
+
│ POST 付款結果
|
|
430
|
+
▼
|
|
431
|
+
┌─────────┐
|
|
432
|
+
│ 商店 │
|
|
433
|
+
│ 處理結果 │
|
|
434
|
+
└─────────┘
|
|
435
|
+
│
|
|
436
|
+
│ 回應 "1|OK"
|
|
437
|
+
▼
|
|
438
|
+
┌─────────┐
|
|
439
|
+
│ ECPay │
|
|
440
|
+
│ 確認收到 │
|
|
441
|
+
└─────────┘
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
### 通知參數
|
|
445
|
+
|
|
446
|
+
| 參數 | 類型 | 說明 |
|
|
447
|
+
|------|------|------|
|
|
448
|
+
| `MerchantID` | String | 商店代號 |
|
|
449
|
+
| `MerchantTradeNo` | String | 訂單編號 |
|
|
450
|
+
| `StoreID` | String | 分店代號 |
|
|
451
|
+
| `RtnCode` | Integer | 交易狀態碼 (`1`=成功) |
|
|
452
|
+
| `RtnMsg` | String | 交易訊息 |
|
|
453
|
+
| `TradeNo` | String | ECPay 交易編號 |
|
|
454
|
+
| `TradeAmt` | Integer | 交易金額 |
|
|
455
|
+
| `PaymentDate` | String | 付款時間 `yyyy/MM/dd HH:mm:ss` |
|
|
456
|
+
| `PaymentType` | String | 付款方式 |
|
|
457
|
+
| `PaymentTypeCharge` | Integer | 支付方式手續費 |
|
|
458
|
+
| `TradeDate` | String | 訂單成立時間 |
|
|
459
|
+
| `SimulatePaid` | Integer | `0`:一般 `1`:模擬付款 |
|
|
460
|
+
| `CheckMacValue` | String | 檢查碼 |
|
|
461
|
+
| `CustomField1~4` | String | 自訂欄位 (原值回傳) |
|
|
462
|
+
|
|
463
|
+
### PaymentType 回傳值對照
|
|
464
|
+
|
|
465
|
+
| 回傳值 | 說明 |
|
|
466
|
+
|--------|------|
|
|
467
|
+
| `Credit_CreditCard` | 信用卡 |
|
|
468
|
+
| `ATM_ESUN` | ATM 玉山銀行 |
|
|
469
|
+
| `ATM_TAISHIN` | ATM 台新銀行 |
|
|
470
|
+
| `CVS_CVS` | 超商代碼 |
|
|
471
|
+
| `CVS_FAMILY` | 超商代碼 - 全家 |
|
|
472
|
+
| `CVS_IBON` | 超商代碼 - 7-11 |
|
|
473
|
+
| `BARCODE_BARCODE` | 超商條碼 |
|
|
474
|
+
| `ApplePay` | Apple Pay |
|
|
475
|
+
| `TWQR_TWQR` | 台灣 Pay |
|
|
476
|
+
|
|
477
|
+
### 商店回應格式
|
|
478
|
+
|
|
479
|
+
**成功**: 回應 `1|OK`
|
|
480
|
+
|
|
481
|
+
```
|
|
482
|
+
HTTP/1.1 200 OK
|
|
483
|
+
Content-Type: text/plain
|
|
484
|
+
|
|
485
|
+
1|OK
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
**失敗**: 回應其他內容,ECPay 會在 24 小時內重新發送通知 (最多 10 次)
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
492
|
+
## 訂單查詢
|
|
493
|
+
|
|
494
|
+
### 端點
|
|
495
|
+
|
|
496
|
+
```
|
|
497
|
+
POST /Cashier/QueryTradeInfo/V5
|
|
498
|
+
Content-Type: application/x-www-form-urlencoded
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### 請求參數
|
|
502
|
+
|
|
503
|
+
| 參數 | 類型 | 必填 | 說明 |
|
|
504
|
+
|------|------|------|------|
|
|
505
|
+
| `MerchantID` | String(10) | ● | 商店代號 |
|
|
506
|
+
| `MerchantTradeNo` | String(20) | ● | 訂單編號 |
|
|
507
|
+
| `TimeStamp` | Integer | ● | Unix 時間戳 (3 分鐘內有效) |
|
|
508
|
+
| `CheckMacValue` | String | ● | 檢查碼 |
|
|
509
|
+
| `PlatformID` | String(10) | 否 | 特約合作平台商代號 |
|
|
510
|
+
|
|
511
|
+
### 回應參數
|
|
512
|
+
|
|
513
|
+
| 參數 | 說明 |
|
|
514
|
+
|------|------|
|
|
515
|
+
| `MerchantID` | 商店代號 |
|
|
516
|
+
| `MerchantTradeNo` | 訂單編號 |
|
|
517
|
+
| `StoreID` | 分店代號 |
|
|
518
|
+
| `TradeNo` | ECPay 交易編號 |
|
|
519
|
+
| `TradeAmt` | 交易金額 |
|
|
520
|
+
| `PaymentDate` | 付款時間 |
|
|
521
|
+
| `PaymentType` | 付款方式 |
|
|
522
|
+
| `HandlingCharge` | ECPay 手續費 |
|
|
523
|
+
| `PaymentTypeChargeFee` | 支付方式手續費 |
|
|
524
|
+
| `TradeDate` | 訂單成立時間 |
|
|
525
|
+
| `TradeStatus` | 交易狀態 |
|
|
526
|
+
| `ItemName` | 商品名稱 |
|
|
527
|
+
| `CheckMacValue` | 檢查碼 |
|
|
528
|
+
|
|
529
|
+
### TradeStatus 交易狀態
|
|
530
|
+
|
|
531
|
+
| 狀態 | 說明 |
|
|
532
|
+
|------|------|
|
|
533
|
+
| `0` | 未付款 |
|
|
534
|
+
| `1` | 已付款 |
|
|
535
|
+
| `10200095` | 退款完成 |
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
539
|
+
## 信用卡請退款
|
|
540
|
+
|
|
541
|
+
### 端點
|
|
542
|
+
|
|
543
|
+
```
|
|
544
|
+
POST /CreditDetail/DoAction
|
|
545
|
+
Content-Type: application/x-www-form-urlencoded
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
### 請求參數
|
|
549
|
+
|
|
550
|
+
| 參數 | 類型 | 必填 | 說明 |
|
|
551
|
+
|------|------|------|------|
|
|
552
|
+
| `MerchantID` | String(10) | ● | 商店代號 |
|
|
553
|
+
| `MerchantTradeNo` | String(20) | ● | 訂單編號 |
|
|
554
|
+
| `TradeNo` | String(20) | ● | ECPay 交易編號 |
|
|
555
|
+
| `Action` | String(1) | ● | 動作代碼 |
|
|
556
|
+
| `TotalAmount` | Integer | ● | 操作金額 |
|
|
557
|
+
| `CheckMacValue` | String | ● | 檢查碼 |
|
|
558
|
+
|
|
559
|
+
### Action 動作代碼
|
|
560
|
+
|
|
561
|
+
| 代碼 | 說明 | 使用時機 |
|
|
562
|
+
|------|------|----------|
|
|
563
|
+
| `C` | 關帳 (請款) | 授權成功後請款 |
|
|
564
|
+
| `R` | 退刷 | 已請款後退款 |
|
|
565
|
+
| `E` | 取消 | 授權成功尚未請款時取消 |
|
|
566
|
+
| `N` | 放棄 | 分期交易放棄 |
|
|
567
|
+
|
|
568
|
+
### 退款限制
|
|
569
|
+
|
|
570
|
+
- 信用卡退款: 請款後 1 年內
|
|
571
|
+
- 部分退款: 支援 (金額需小於等於原交易金額)
|
|
572
|
+
- 多次退款: 支援 (總金額需小於等於原交易金額)
|
|
573
|
+
|
|
574
|
+
---
|
|
575
|
+
|
|
576
|
+
## 定期定額
|
|
577
|
+
|
|
578
|
+
### 建立定期定額訂單參數
|
|
579
|
+
|
|
580
|
+
| 參數 | 類型 | 必填 | 說明 |
|
|
581
|
+
|------|------|------|------|
|
|
582
|
+
| `PeriodAmount` | Integer | ● | 每次授權金額 |
|
|
583
|
+
| `PeriodType` | String(1) | ● | 週期類型 |
|
|
584
|
+
| `Frequency` | Integer | ● | 執行頻率 |
|
|
585
|
+
| `ExecTimes` | Integer | ● | 總執行次數 |
|
|
586
|
+
| `PeriodReturnURL` | String(200) | 否 | 定期定額通知網址 |
|
|
587
|
+
|
|
588
|
+
### PeriodType 週期類型
|
|
589
|
+
|
|
590
|
+
| 代碼 | 說明 | Frequency 範圍 |
|
|
591
|
+
|------|------|----------------|
|
|
592
|
+
| `D` | 日 | 1 ~ 365 |
|
|
593
|
+
| `M` | 月 | 1 ~ 12 |
|
|
594
|
+
| `Y` | 年 | 1 |
|
|
595
|
+
|
|
596
|
+
### 定期定額範例
|
|
597
|
+
|
|
598
|
+
**每月扣款一次,共 12 次**:
|
|
599
|
+
```
|
|
600
|
+
PeriodAmount=500
|
|
601
|
+
PeriodType=M
|
|
602
|
+
Frequency=1
|
|
603
|
+
ExecTimes=12
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
**每 3 天扣款一次,共 30 次**:
|
|
607
|
+
```
|
|
608
|
+
PeriodAmount=100
|
|
609
|
+
PeriodType=D
|
|
610
|
+
Frequency=3
|
|
611
|
+
ExecTimes=30
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
### 定期定額查詢
|
|
615
|
+
|
|
616
|
+
#### 端點
|
|
617
|
+
|
|
618
|
+
```
|
|
619
|
+
POST /Cashier/QueryCreditCardPeriodInfo
|
|
620
|
+
Content-Type: application/x-www-form-urlencoded
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
#### 回應參數
|
|
624
|
+
|
|
625
|
+
| 參數 | 說明 |
|
|
626
|
+
|------|------|
|
|
627
|
+
| `ExecStatus` | 執行狀態 `1`:終止 `2`:執行中 `3`:完成 |
|
|
628
|
+
| `TotalSuccessTimes` | 成功執行次數 |
|
|
629
|
+
| `TotalSuccessAmount` | 成功授權總金額 |
|
|
630
|
+
| `ExecLog` | 執行記錄陣列 (JSON) |
|
|
631
|
+
|
|
632
|
+
### 定期定額操作
|
|
633
|
+
|
|
634
|
+
#### 端點
|
|
635
|
+
|
|
636
|
+
```
|
|
637
|
+
POST /CreditDetail/CreditCardPeriodAction
|
|
638
|
+
Content-Type: application/x-www-form-urlencoded
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
#### Action 動作代碼
|
|
642
|
+
|
|
643
|
+
| 代碼 | 說明 |
|
|
644
|
+
|------|------|
|
|
645
|
+
| `Cancel` | 取消授權 (終止定期定額) |
|
|
646
|
+
| `ReAuth` | 重新授權 |
|
|
647
|
+
| `UpdateAmt` | 更新授權金額 |
|
|
648
|
+
| `UpdateTimes` | 更新執行次數 |
|
|
649
|
+
|
|
650
|
+
---
|
|
651
|
+
|
|
652
|
+
## CheckMacValue 計算
|
|
653
|
+
|
|
654
|
+
### 計算步驟
|
|
655
|
+
|
|
656
|
+
1. **排序參數** - 將所有參數依照 Key 字母順序排序 (A-Z, 區分大小寫)
|
|
657
|
+
2. **組合字串** - 格式 `key1=value1&key2=value2&...`
|
|
658
|
+
3. **加上金鑰** - `HashKey={HashKey}&{參數字串}&HashIV={HashIV}`
|
|
659
|
+
4. **URL Encode** - 使用 URL Encode 編碼
|
|
660
|
+
5. **轉小寫** - 將編碼後的字串轉為小寫
|
|
661
|
+
6. **計算 SHA256** - 計算 SHA256 雜湊值
|
|
662
|
+
7. **轉大寫** - 將雜湊值轉為大寫
|
|
663
|
+
|
|
664
|
+
### URL Encode 特殊字元還原
|
|
665
|
+
|
|
666
|
+
ECPay 要求部分字元需還原:
|
|
667
|
+
|
|
668
|
+
| 編碼後 | 還原為 |
|
|
669
|
+
|--------|--------|
|
|
670
|
+
| `%2d` | `-` |
|
|
671
|
+
| `%5f` | `_` |
|
|
672
|
+
| `%2e` | `.` |
|
|
673
|
+
| `%21` | `!` |
|
|
674
|
+
| `%2a` | `*` |
|
|
675
|
+
| `%28` | `(` |
|
|
676
|
+
| `%29` | `)` |
|
|
677
|
+
|
|
678
|
+
### Python 實作
|
|
679
|
+
|
|
680
|
+
```python
|
|
681
|
+
import hashlib
|
|
682
|
+
import urllib.parse
|
|
683
|
+
|
|
684
|
+
def generate_check_mac_value(params: dict, hash_key: str, hash_iv: str) -> str:
|
|
685
|
+
"""計算 ECPay CheckMacValue"""
|
|
686
|
+
|
|
687
|
+
# 1. 排序
|
|
688
|
+
sorted_params = sorted(params.items())
|
|
689
|
+
|
|
690
|
+
# 2. 組合
|
|
691
|
+
param_str = '&'.join(f'{k}={v}' for k, v in sorted_params)
|
|
692
|
+
|
|
693
|
+
# 3. 加上 HashKey 和 HashIV
|
|
694
|
+
raw = f'HashKey={hash_key}&{param_str}&HashIV={hash_iv}'
|
|
695
|
+
|
|
696
|
+
# 4. URL Encode
|
|
697
|
+
encoded = urllib.parse.quote_plus(raw)
|
|
698
|
+
|
|
699
|
+
# 5. 轉小寫
|
|
700
|
+
encoded = encoded.lower()
|
|
701
|
+
|
|
702
|
+
# 6. SHA256
|
|
703
|
+
sha256 = hashlib.sha256(encoded.encode('utf-8')).hexdigest()
|
|
704
|
+
|
|
705
|
+
# 7. 轉大寫
|
|
706
|
+
return sha256.upper()
|
|
707
|
+
```
|
|
708
|
+
|
|
709
|
+
---
|
|
710
|
+
|
|
711
|
+
## 錯誤碼大全
|
|
712
|
+
|
|
713
|
+
### 交易狀態碼 (RtnCode)
|
|
714
|
+
|
|
715
|
+
#### 成功
|
|
716
|
+
|
|
717
|
+
| 代碼 | 說明 |
|
|
718
|
+
|------|------|
|
|
719
|
+
| `1` | 交易成功 |
|
|
720
|
+
|
|
721
|
+
#### 信用卡相關
|
|
722
|
+
|
|
723
|
+
| 代碼 | 說明 | 處理方式 |
|
|
724
|
+
|------|------|----------|
|
|
725
|
+
| `10100001` | 參數格式錯誤 | 檢查參數格式 |
|
|
726
|
+
| `10100002` | 商店代號不存在 | 確認 MerchantID |
|
|
727
|
+
| `10100003` | 訂單編號重複 | 使用新的訂單編號 |
|
|
728
|
+
| `10100004` | 訂單編號格式錯誤 | 僅英數字,20 字內 |
|
|
729
|
+
| `10100050` | 交易金額錯誤 | 確認金額為正整數 |
|
|
730
|
+
| `10100058` | CheckMacValue 錯誤 | 重新計算檢查碼 |
|
|
731
|
+
| `10100248` | 交易被拒絕 | 請客戶聯繫發卡銀行 |
|
|
732
|
+
| `10100249` | 交易失敗 | 系統錯誤,稍後重試 |
|
|
733
|
+
| `10100251` | 卡片過期 | 請客戶確認卡片效期 |
|
|
734
|
+
| `10100252` | 餘額不足 | 請客戶確認額度或餘額 |
|
|
735
|
+
| `10100253` | 超過交易限額 | 請客戶分筆交易或聯繫發卡銀行 |
|
|
736
|
+
| `10100254` | 交易受限 | 請客戶聯繫發卡銀行 |
|
|
737
|
+
| `10100255` | 掛失卡 | 請客戶使用其他卡片 |
|
|
738
|
+
| `10100256` | 偽卡 | 請客戶使用其他卡片 |
|
|
739
|
+
| `10100257` | 安控失敗 | 3D 驗證失敗,請重試 |
|
|
740
|
+
| `10300066` | 交易結果待確認 | 至後台確認後再出貨 |
|
|
741
|
+
|
|
742
|
+
#### ATM 相關
|
|
743
|
+
|
|
744
|
+
| 代碼 | 說明 |
|
|
745
|
+
|------|------|
|
|
746
|
+
| `2` | ATM 取號失敗 |
|
|
747
|
+
| `10100073` | CVS/BARCODE 取號成功 |
|
|
748
|
+
| `10100074` | CVS/BARCODE 取號失敗 |
|
|
749
|
+
|
|
750
|
+
#### 系統相關
|
|
751
|
+
|
|
752
|
+
| 代碼 | 說明 |
|
|
753
|
+
|------|------|
|
|
754
|
+
| `10200047` | 訂單已關帳 |
|
|
755
|
+
| `10200048` | 訂單已取消 |
|
|
756
|
+
| `10200095` | 退款完成 |
|
|
757
|
+
|
|
758
|
+
### CheckMacValue 錯誤
|
|
759
|
+
|
|
760
|
+
| 錯誤訊息 | 原因 | 解決方式 |
|
|
761
|
+
|----------|------|----------|
|
|
762
|
+
| `CheckMacValue verification failed` | 檢查碼計算錯誤 | 確認 HashKey/HashIV、排序、編碼 |
|
|
763
|
+
| `HashKey 或 HashIV 錯誤` | 金鑰錯誤 | 確認測試/正式環境金鑰 |
|
|
764
|
+
|
|
765
|
+
---
|
|
766
|
+
|
|
767
|
+
## 銀行代碼對照表
|
|
768
|
+
|
|
769
|
+
### ATM 銀行代碼
|
|
770
|
+
|
|
771
|
+
| 代碼 | 銀行名稱 |
|
|
772
|
+
|------|----------|
|
|
773
|
+
| `004` | 臺灣銀行 |
|
|
774
|
+
| `005` | 土地銀行 |
|
|
775
|
+
| `006` | 合作金庫 |
|
|
776
|
+
| `007` | 第一銀行 |
|
|
777
|
+
| `008` | 華南銀行 |
|
|
778
|
+
| `009` | 彰化銀行 |
|
|
779
|
+
| `011` | 上海銀行 |
|
|
780
|
+
| `012` | 台北富邦 |
|
|
781
|
+
| `013` | 國泰世華 |
|
|
782
|
+
| `017` | 兆豐銀行 |
|
|
783
|
+
| `021` | 花旗銀行 |
|
|
784
|
+
| `048` | 王道銀行 |
|
|
785
|
+
| `050` | 臺灣企銀 |
|
|
786
|
+
| `052` | 渣打銀行 |
|
|
787
|
+
| `053` | 台中銀行 |
|
|
788
|
+
| `054` | 京城銀行 |
|
|
789
|
+
| `081` | 滙豐銀行 |
|
|
790
|
+
| `102` | 華泰銀行 |
|
|
791
|
+
| `103` | 新光銀行 |
|
|
792
|
+
| `108` | 陽信銀行 |
|
|
793
|
+
| `118` | 板信銀行 |
|
|
794
|
+
| `147` | 三信銀行 |
|
|
795
|
+
| `803` | 聯邦銀行 |
|
|
796
|
+
| `805` | 遠東銀行 |
|
|
797
|
+
| `806` | 元大銀行 |
|
|
798
|
+
| `807` | 永豐銀行 |
|
|
799
|
+
| `808` | 玉山銀行 |
|
|
800
|
+
| `809` | 凱基銀行 |
|
|
801
|
+
| `810` | 星展銀行 |
|
|
802
|
+
| `812` | 台新銀行 |
|
|
803
|
+
| `816` | 安泰銀行 |
|
|
804
|
+
| `822` | 中國信託 |
|
|
805
|
+
|
|
806
|
+
---
|
|
807
|
+
|
|
808
|
+
## 常見問題排解
|
|
809
|
+
|
|
810
|
+
### CheckMacValue 錯誤
|
|
811
|
+
|
|
812
|
+
**問題**: 收到 `CheckMacValue verification failed`
|
|
813
|
+
|
|
814
|
+
**檢查項目**:
|
|
815
|
+
1. HashKey 和 HashIV 是否正確 (測試/正式環境不同)
|
|
816
|
+
2. 參數排序是否依照字母順序 (區分大小寫)
|
|
817
|
+
3. URL Encode 是否正確 (特殊字元需還原)
|
|
818
|
+
4. 是否轉小寫後再計算 SHA256
|
|
819
|
+
5. 最後是否轉大寫
|
|
820
|
+
|
|
821
|
+
### 訂單編號重複
|
|
822
|
+
|
|
823
|
+
**問題**: 收到 `10100003` 訂單編號重複
|
|
824
|
+
|
|
825
|
+
**解決**:
|
|
826
|
+
- 使用時間戳 + 隨機數產生唯一編號
|
|
827
|
+
- 訂單編號最長 20 字元,僅英數字
|
|
828
|
+
|
|
829
|
+
```python
|
|
830
|
+
import time
|
|
831
|
+
import random
|
|
832
|
+
order_id = f"ORD{int(time.time())}{random.randint(100, 999)}"
|
|
833
|
+
```
|
|
834
|
+
|
|
835
|
+
### 付款通知未收到
|
|
836
|
+
|
|
837
|
+
**問題**: 付款成功但沒收到 ReturnURL 通知
|
|
838
|
+
|
|
839
|
+
**檢查項目**:
|
|
840
|
+
1. ReturnURL 是否為 HTTPS
|
|
841
|
+
2. 伺服器是否能被外網存取
|
|
842
|
+
3. 防火牆是否阻擋 ECPay IP
|
|
843
|
+
4. 是否正確回應 `1|OK`
|
|
844
|
+
|
|
845
|
+
**ECPay 通知 IP 白名單**:
|
|
846
|
+
```
|
|
847
|
+
211.23.128.0/24
|
|
848
|
+
220.130.179.0/24
|
|
849
|
+
210.200.216.0/24
|
|
850
|
+
```
|
|
851
|
+
|
|
852
|
+
### 模擬付款
|
|
853
|
+
|
|
854
|
+
**問題**: SimulatePaid = 1
|
|
855
|
+
|
|
856
|
+
**說明**: 測試環境的模擬付款,正式環境不會有此情況
|
|
857
|
+
|
|
858
|
+
### 金額限制
|
|
859
|
+
|
|
860
|
+
**問題**: 交易金額錯誤
|
|
861
|
+
|
|
862
|
+
**各付款方式限制**:
|
|
863
|
+
| 付款方式 | 最低 | 最高 |
|
|
864
|
+
|----------|------|------|
|
|
865
|
+
| 信用卡 | 1 | 無限制 |
|
|
866
|
+
| ATM | 1 | 5,000,000 |
|
|
867
|
+
| CVS | 27 | 20,000 |
|
|
868
|
+
| BARCODE | 1 | 20,000 |
|
|
869
|
+
| TWQR | 6 | 49,999 |
|
|
870
|
+
|
|
871
|
+
---
|
|
872
|
+
|
|
873
|
+
## 官方資源
|
|
874
|
+
|
|
875
|
+
- **開發者中心**: https://developers.ecpay.com.tw/
|
|
876
|
+
- **API 文件下載**: https://www.ecpay.com.tw/Service/API_Dwnld
|
|
877
|
+
- **商店後台 (測試)**: https://vendor-stage.ecpay.com.tw/
|
|
878
|
+
- **商店後台 (正式)**: https://vendor.ecpay.com.tw/
|
|
879
|
+
- **技術客服**: techsupport@ecpay.com.tw
|
|
880
|
+
- **客服電話**: (02) 2655-1775
|