跳到主要內容

如何使用電子發票應用API

財政部在電子發票推行上,為了方便開發更多應用所以提供了API可供個人或者廠商進行相關應用的開發,申請的方式請參考 –> 電子發票API申請 最簡單的申請方式就是透過自然人憑證或者工商憑證申請,這樣就不需要檢附任何證明文件。不過這不是本篇的重點,當申請到時會給你一組AppID跟APIKey,然後你可以下載電子發票應用規格1.4版來了解怎樣使用這個API,或許是我才疏學淺,所以在1.3版的時候其實搞不太懂他的API文件,到了1.4版才摸清楚發生了什麼事,當然還是花了點時間才搞懂,現在就簡單說明一下API的使用方式,希望看到本篇文章的同好就不需要花時間測試了。

我簡單用API中的[查詢中獎發票號碼清單]這個功能來說明,首先我們根據文件得知要取得API是用HTTPS協定存取https://www.einvoice.nat.gov.tw/這個網址,而[查詢中獎發票號碼清單]的API Method是/PB2CAPIVAN/invapp/InvApp所以完整的查詢URL就是
https://www.einvoice.nat.gov.tw/PB2CAPIVAN/invapp/InvApp
而在API說明的需求參數告訴你有底下幾個參數需要提供:
1. version
2. action
3. invTerm
4. UUID
5. appID
且說明了相關的參數值,如:
version=0.2
action=QryWinningList
invTerm=10106 (101年05-06月該期)
而且底下就提供了範例:
/PB2CAPIVAN/invapp/InvApp?version=&action=QryWinningList&invTerm=&appID= &UUID=
在看起來近乎完美的說明下,其實有許多沒有說清楚的秘密。
1. 參數還需要加上Signature這個參數,而且此參數是必須採用 Base64編碼之 HMAC-SHA1 演算法,以APIKey作為秘密鑰匙, 針對UTF-8字串所有參數,產生簽名結果。
2. UUID其實是用來控管機器用的,防止程式在某些機器上被亂用,因此UUID可以用來控管惡意機器,但是這是非必要條件。
綜合以上的說明,因此我們回頭檢視查詢網址與參數,應該是如下所示:
https://www.einvoice.nat.gov.tw/PB2CAPIVAN/invapp/InvApp?action=QryWinningList&appID=EINV020130529XXXX&invTerm=10106&UUID=&version=0.2&Signature=XXXXXXXXXXXXXXXXXX
簡易說明一下:
1.在URL?後的參數是排序過的
2.appID是申請後財政部電子發票平台發給的格式EINV020130529XXXX
3.Signature=後的XXXXXXXXXXXXXXXXXX是把"action=QryWinningList&appID=EINV020130529XXXX&invTerm=10106&UUID=&version=0.2"的內容以APIKey透過Base64編碼之 HMAC-SHA1 演算法產生出來的。
這樣就可以查詢到你要的資訊,資訊會透過JSON來回傳,如:

{"fifthPrizeAmt":"0001000","firstPrizeAmt":"0200000","firstPrizeNo1":"91180939","firstPrizeNo10":"","firstPrizeNo2":"12753377","firstPrizeNo3":"22638178","firstPrizeNo4":"","firstPrizeNo5":"","firstPrizeNo6":"","firstPrizeNo7":"","firstPrizeNo8":"","firstPrizeNo9":"","fourthPrizeAmt":"0004000","invoYm":"10106","secondPrizeAmt":"0040000","sixthPrizeAmt":"0000200","sixthPrizeNo1":"258","sixthPrizeNo2":"066","sixthPrizeNo3":"","spcPrizeAmt":"2000000","spcPrizeNo":"99028391","spcPrizeNo2":"","spcPrizeNo3":"","superPrizeAmt":"10000000","superPrizeNo":"29734661","thirdPrizeAmt":"0010000","v":"0","code":"200","msg":"查詢成功"}

留言

Unknown寫道…
謝謝您所提供的筆記~~

簡單明瞭又清晰XD

不過可以請問您一下,螢幕上顯示的資訊如何取用呢...

Lgh2寫道…
「以APIKey透過Base64編碼之 HMAC-SHA1 演算法產生」
請問這段的意思是?
先將明碼做base64再加密
還是先將明碼加密再base64?

謝謝回答
小媛爸寫道…
陳詠菁:
螢幕上顯示的資訊如何使用,沒有很了解你的問題耶???

LukeLai:
先加密,在Base64編碼
Unknown寫道…
請問一下不知道您有沒有使用查詢發票明細的範例能給小弟參考呢@@? 這是我的maill tony790408@gmail.com
幻夢零寫道…
謝謝你提供的資訊,非常有用

這個網誌中的熱門文章

以管理者權限執行批次檔

最近有個專案需要執行批次檔,來進行某些設定或者城市的安裝,在XP上這個Script可以運行沒問題,可是一到Vista以後的Windows版本就無法運行了,最主要的原因是,UAC的管制的問題,幾經尋找,總算找到一個可行的解決辦法。

DataGridView欄位統一格式化

最近的工作內有一個需求,就是由於專案中有許多呈現資料的DataGridView,而其中的欄位需要呈現的包含金額、數字或者日期等格式,若要一個個的設定格式,如果有一天格式突然變更,可能就要苦工做到死,如何讓專案中的這些格式都統一就成了一個問題,經過了一番查找,發現可以透過DataGridView.CellFormatting Event來解決這個問題。

輕話要重聽,重話要輕聽 [IT邦幫忙鐵人賽 Day1]

在職場上總是會有被指導的時候,而這些被指導的過程中,就是你成長的時候,其實指導者願意告訴你,就是覺得你會有機會成長,所以才會提點,但提點的過程就會隨著指導者的EQ而有所不同,EQ高者會用比較婉轉的話語來告訴你,EQ低者會用比較強烈甚至傷其自尊的怒罵來指責你,此時此刻你所要學習的就是【輕話要重聽,重話要輕聽】。 由於明天(星期五)要繳交網頁的版面設計稿件給客戶,加上客戶直至星期二才交付相關素材,因此設計部門並沒有太多時間可以進行設計,這個案子大概是因為工作分配的關係就落在了一個半熟手的設計師手上,直至今天(星期四)早上,基於我是這個案子的PM,所以我找了負責這個專案的設計師開了一個小會討論,會中設計師也大概說明了設計理念與想法,而這些圖稿我也覺得應該還符合客戶期待,所以也就沒再多所著墨,會後我的主管突然提到想要看這些設計稿,當我把圖稿給主管看完後,只見主管的表情變得嚴肅,就像"突然李組長的眉頭一皺,發現結果並不單純",當下請了設計部的資深同仁來討論,頓時我也陷入了一陣糾結。結果當然是稿件還沒到客戶手上,主管當場就打槍了。不過這件事倒讓我發現了兩個現象: 現象1:就我的立場而言,要交給客戶的稿件是我同意的,所以當主管不滿意時,我應該要深刻的反省,包含稿件深度與質量的要求,但主管從頭到尾並沒有提到,也沒有多所責難,而是立即希望設計部進行調整,但當下的我卻選擇了【輕話要重聽】。也就是說,主管沒有責難,但我卻連主管要求的水準都達不到,是該自我反省,而非當作沒事一般。因此我將他列入工作紀錄中自省。 現象2:我們的主管EQ是個不錯的人,因此當他在討論稿件品質時,並沒有多所責難,僅是希望設計部門能趕緊補強調整,但是對於半熟手的設計師來說,等於否定了他的設計,因此設計師的失落感可想而知,這個時候其實他該選擇【重話要輕聽】,這些否定的話其實只是推動進步的一個挑戰,把話輕聽,別想太多,只要記得提點的重點,其他的否定就不該執著於上,因為如果只是執著別人的否定,那你就會忽略提點的重點。誰不是從被否定中成長的呢。 所以學習如何【輕話要重聽,重話要輕聽】這是職場生存的一個訣竅,前者是希望即便與你無關的事情,如果你重視他,將他學習下來,就會讓自己進步。後者是希望別著墨在否定的態度上,應該專心在如何讓否定成為肯定,了解為何否定,自然也會成為成長的動力。 第五屆IT邦幫忙鐵