ECBANK API 串接
最近一個case是關於Ecbank的超商繳費條碼列印程式,接到時覺得很簡單,沒想到也是花了快一天的時間來研究,有鑑於上網搜尋資料的不足,在此寫下一篇作為分享記錄。
要使用他的api,當然是先註冊帳號囉,登入後在"選項設定→商店代號維護"中可以找到交易加密私鑰,也就是API key。
在撰寫程式前,有兩種方式可以選擇去設計:
- 使用ECBANK的制式繳費帳單。
- 使用自訂的繳費帳單。
選擇好方向之後,我們來看看他的API參數與取號流程:
-
取號時,使用HTML GET 背景取值,QueryString如下:
https://ecbank.com.tw/gateway.php?mer_id=xxxx&payment_type=barcode&enc_key=xxxx&od_sob=xxxx&amt=200&expire_day=3&ok_url=xxxx -
此時必須將可設定的參數一併送出,參數表如下:
-
當取號以GET方式輸入時,會回應以下格式,欄位以 &號分格如下:
error=0&mer_id=xxx&tsr=xxx&bankcode=xxx&vaccno=xxx&amt=xxx&expire_date=xxx -
回應的參數表:
當有回傳值出現,API的串接已經成立,ECBANK會回傳所有帳單上需要用到的所有參數,所以可以將參數使用在自訂的帳單上,他也提供了制式帳單的網址,只要將回傳的交易單號與商店代號代入網址即可馬上使用: https://ecbank.com.tw/order/barcode_print.php?mer_id=xxx&tsr=xxx。
而自訂帳單則需要多取一個條碼的值,格式為: https://ecbank.com.tw/web_service/barcode.php?mer_id=xxx&tsr=xxx&barcode=xxxx。
每次會有三個條碼出現,所以若是自訂帳單,條碼圖形html語法可參考如下 :
<img src="https://ecbank.com.tw/web_service/barcode.php?mer_id=xxx&tsr=xxx&barcode=xxxxx" alt="條碼1">
那我們進入實作範例,制式帳單只需取網址即可馬上使用,在此範例為自訂帳單。
使用ECBANK上提供的範例
<?php
// 您的ECBank商店代號
$mer_id = '1'; // 商店設定在ECBank管理後台的交易加密私鑰
$enc_key = '12345678901234567890';
// 繳費金額
$amt = '300';
// 有效繳費天數
$expire_day = 3;
// 付款完成通知網址
$ok_url =rawurlencode('https://xxxx.com.tw/test/ecbank_auth.jsp');
// ECBank 超商條碼帳號取號網址
$ecbank_auth_url = 'https://ecbank.com.tw/gateway.php?payment_type=barcode'.
'&mer_id='.$mer_id.
'&enc_key='.$enc_key.
'&expire_day='.$expire_day.
'&amt='.$amt.
'&ok_url='.$ok_url;
// 以GET方式背景取號 (也可以使用curl)
$strAuth = file_get_contents($ecbank_auth_url);
// 分解字串
parse_str($strAuth, $res);
// 判斷取號結果
if(!isset($res['error']) || $res['error'] != '0')
echo '取號錯誤';
else {
echo '交易單號: '.$res['tsr'];
echo '條碼1: '.$res['barcode1'];
echo '條碼2: '.$res['barcode2'];
echo '條碼3: '.$res['barcode3'];
echo '制式帳單列印網址: https://ecbank.com.tw/order/barcode_print.php?mer_id='.$mer_id.
'&tsr='.$res['tsr'];
echo '<img src="https://ecbank.com.tw/web_service/barcode.php?mer_id='.$mer_id.
'&tsr='.$res['tsr'].'&barcode='.$res['barcode1'].'" alt="條碼1">';
echo '<img src="https://ecbank.com.tw/web_service/barcode.php?mer_id='.$mer_id.
'&tsr='.$res['tsr'].'&barcode='.$res['barcode2'].'" alt="條碼2">';
echo '<img src="https://ecbank.com.tw/web_service/barcode.php?mer_id='.$mer_id.
'&tsr='.$res['tsr'].'&barcode='.$res['barcode3'].'" alt="條碼3">';
}
?>
參考參數表填入資訊,填入的資訊可以是資料庫的值,直接使用上述的程式碼可以在網頁上呈現出echo部分的回傳值。
所以可以在自訂帳單的HTML中所要呈現資料的加入直接使用,如下繳費期限可這樣寫:
<b>繳費期限:<? echo $res['expire_date'];?></b></font><br>
測試完成後將範例程式碼中的echo部分註解掉,保留錯誤判斷即可:
if(!isset($res['error']) || $res['error'] != '0')
echo '取號錯誤';
最後提醒一點,條碼圖的HTML可以這樣使用:
<tr><td align=center> <?echo '<img src="https://ecbank.com.tw/web_service/barcode.php?mer_id='.$mer_id.'&tsr='.$res['tsr'].'&barcode='.$res['barcode1'].'" alt="條碼1">';?>
</td></tr>
呈現結果 :
這樣就完成啦!
小抱怨一下我這個月都被抓去搞PHP的東西實在很煩阿~~想念ASP.NET :(
P.S. 點部落為什麼不可以貼PHP的CODE呢???
|