電商購物平台-信用卡刷卡串接(API授權方式)教學

有鑑於購物車的電商系統一直是前端工程師最常見的SideProject之一。

但是許多人對於訂單成立後的結帳付款,卻不了解後續要做哪些事,以及有哪些常用的付款方式。

因此寫了一系列的介紹文,帶各位一窺全貌,了解電商平台在使用信用卡刷卡結帳時如何進行金流串接的。

本篇教學以中國信託的信用卡刷卡為教學範例。

API授權方式

 在上一篇教學中我們利用 URL授權的方式進行信用卡刷卡。

也就是卡號的輸入以及驗證均由該銀行提供。我們的購物系統本身不涉及刷卡驗證這段。

 但若是需要進行退款,取消請款等操作,我們就需要透過API授權的方式才能進行操作。 因此本文會針對以中國信託為例,介紹如何進行退款,取消請款等動作。

信用卡刷卡請款的動作,一共分為兩個動作:

1.      交易後入請款檔

2.      將請款檔內的帳務進行請款

在上一篇URL授權當中,我們將AutoCap設定為1則代表刷卡交易後系統都會將該筆交易自動入中信的請款檔,也就是操作帳務管理後台的人員不需要將一筆一筆的交易設定入請款檔。只要等中國信託跑批次請款的時間到,該筆交易就會自動跟中國信託進行請款。

因此在執行退款動作的時候,並不會馬上進行退款,而是批次作業。

其中,在中國信託進行批次請款的時候,此時有將近兩個小時是不能針對請款檔內的帳務進行任何作業的,如:取消請款,取消退款等。

因此在設計上我們不能立刻將退款的訂單做處理,必須要有一個Buffer來儲存這些已經申請退款的訂購單。

 

為了確保每一張訂購單的退款都能妥善處理,我們的流程應該會是這樣:

1.      將所有要退款的訂購單,狀態設定為申請退款

2.      利用排程定時(每隔1~2小時)將狀態為申請退款的單據進行退款

3.      判斷該單據是否要進行取消訂單抑或是取消退款

4.      執行退款相關API

在第二點的流程中,如同上述提到,並不是任何時間我們都能夠操作中國信託的API進行帳款相關的操作。

因此我們需要利用排程定時去跑這些狀態為申請退款的訂購單,一旦操作成功將狀態更改為已退款。以確保單據不會重複操作。

第三點的流程中,操作退款的機制分為已請款以及已結帳兩個狀態,不同狀態下的帳款,在處理退款的行為上會有不同的流程。

因此流程上來說會分成兩種:

l   已請款--> CapRevTransac 取消轉入請款-->AuthRevTransac 取消授權交易

l   已請款(請款成功) --> Refund 呼叫退貨

以第一種狀況來說,由於還沒有進行結帳請款,只是先將此筆交易放入請款檔內,等待中信的排程進行請款檔的批次處理。因此流程上只需要將該筆交易從請款檔移出,並且取消授權。那麼就可以結束這張訂單。

這裡有一點需要特別注意的地方是:取消授權的訂單,是不能在帳務後台再次進行請款的動作,因為這個授權的權利已經被取消了

而第二種狀況的話,因為已經結帳請款,並將款項撥款給公司了。因此若要進行退款操作的話,那就需要額外輸入退款金額,並且只能進行退貨,不能取消授權。

 

兩者的差異主要是該筆交易資料會不會顯示在刷卡人的帳單上,若是第一種狀況的話,由於尚未進行結帳請款,因此可以將該筆交易退回,直接取消授權,那麼該筆交易公司就不會跟銀行進行請款,也就是說這筆交易並不存在,也就不會顯示在刷卡人的帳單中了。

反之,因為該筆款項已經轉入公司帳款,因此會出現刷卡紀錄,並且以刷退的方式沖銷,退回給銀行。總之,不管是哪一種方式,都不會使刷卡人無法退款。唯一要注意的是,由於第二種狀況會需要額外輸入退款金額,所以有可能因為公司退款政策而無法全部退款,而是返回的退款比例。

片段的程式碼如下:

CTBCCredit ctbc = new CTBCCredit(ServerName, MerID , order.oid, result.XID, result.authAmt);

  Inquiry inquiry = ctbc.queryOrder();

  switch ((交易狀態)inquiry.CurrentState) {

     case 交易狀態.已請款:

          ctbc.CapRev().Reversal();
           logger.Info($"訂單編號:{order.oid} 已轉出請款檔並取消授權");

     break;

     case 交易狀態.已請款_清算成功:

          ctbc.RefundOrder(refundDiscount);

          logger.Info($"訂單編號:{order.oid} 已退款");

     break;

     default:
        logger.Error($"訂單編號:{order.oid},訂單編號交易狀態有誤({inquiry.CurrentState}),無法退款");
     break;

 }

由於牽涉到一些公司機密,所以細節的部分的操作以及程式碼的部分沒辦法講得太仔細。

僅列出大方向的運作流程,搭配中國信託給的金流文件,快速了解整的脈絡。

因此若有讀者在實作中有問題,歡迎來信詢問。

最後提醒一下,信用卡刷卡測試完成後,要開通正式環境需要約兩週的時間開通,並且只限定有開通的IP才能連到他們的正式主機

這點還請注意一下。

下一篇我們將講到電子發票開立的方式:

電商購物平台-電子發票開立介紹

 

以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教:)

有任何家教、案子 或技術相關問題 請都歡迎聯繫我

http://www.zhenghui.idv.tw/