綠界Ecbank 超商繳費條碼API實作分享

ECBANK API 串接

最近一個case是關於Ecbank的超商繳費條碼列印程式,接到時覺得很簡單,沒想到也是花了快一天的時間來研究,有鑑於上網搜尋資料的不足,在此寫下一篇作為分享記錄。

要使用他的api,當然是先註冊帳號囉,登入後在"選項設定→商店代號維護"中可以找到交易加密私鑰,也就是API key。

在撰寫程式前,有兩種方式可以選擇去設計:

  1. 使用ECBANK的制式繳費帳單。
  2. 使用自訂的繳費帳單。

選擇好方向之後,我們來看看他的API參數與取號流程:

  1. 取號時,使用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
  2. 此時必須將可設定的參數一併送出,參數表如下:


     
  3. 當取號以GET方式輸入時,會回應以下格式,欄位以 &號分格如下:
    error=0&mer_id=xxx&tsr=xxx&bankcode=xxx&vaccno=xxx&amt=xxx&expire_date=xxx
  4. 回應的參數表:


     

當有回傳值出現,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呢???

分享


站作網站設計工作室 SiteMak Studio
Shinyo Ho 
Founder / Developer
email:shinyo.her@gmail.com|web:www.sitemak.com.tw