小弟最近在串接使用財政部的API
看完文件後發現他的API其實蠻單純,但有些地方寫的不清楚 在嘗試的時候也花了不少時間
我索性寫個小框架可方便日後擴展 "電子發票相關的API"
原始碼放到 Github
使用這個API框架很簡單 只須完成以下幾個步驟
- Config輸入 財政部申請的appId和appKey
- 創建兩個Model
- 一個是財政部所需參數的Model
- 一個是財政部回應參數的Model
- 創建一個要實作的Api物件並繼承ApiBase抽象類,並在泛型那邊指定所需 Model的類型
- 在外部使用 MoblieInvoiceApiFactroy.GetInstace 方法將 傳入所需Model,工廠會反射回應相對應的Api物件
- 使用Api物件.ExcuteApi方法 傳入所需Model
下面詳細說明使用方法已 "QryWinningList" 查詢中獎發票號碼清單 為例子
-
打開webConfig輸入你的appKey和appId
<!--在這裡填入跟財政部申請的AppId--> <add key="GovAppId" value="" /> <!--在這裡填入跟財政部申請的AppKey--> <add key="GovAPIKey" value=""/>
-
在Model資料夾中創建2個Class
public class QryWinningListModel { public string invTerm { get; set; } } public class QryWinningListViewModel { public string code { get; set; } public string msg { get; set; } public string invoYm { get; set; } public string superPrizeNo { get; set; } public string spcPrizeNo { get; set; } public string spcPrizeNo2 { get; set; } public string spcPrizeNo3 { get; set; } public string firstPrizeNo1 { get; set; } public string firstPrizeNo2 { get; set; } public string firstPrizeNo3 { get; set; } public string firstPrizeNo4 { get; set; } public string firstPrizeNo5 { get; set; } public string firstPrizeNo6 { get; set; } public string firstPrizeNo7 { get; set; } public string firstPrizeNo8 { get; set; } public string firstPrizeNo9 { get; set; } public string firstPrizeNo10 { get; set; } public string sixthPrizeNo1 { get; set; } public string sixthPrizeNo2 { get; set; } public string sixthPrizeNo3 { get; set; } public string superPrizeAmt { get; set; } public string spcPrizeAmt { get; set; } public string firstPrizeAmt { get; set; } public string secondPrizeAmt { get; set; } public string thirdPrizeAmt { get; set; } public string fourthPrizeAmt { get; set; } public string fifthPrizeAmt { get; set; } public string sixthPrizeAmt { get; set; } public string sixthPrizeNo4 { get; set; } public string sixthPrizeNo5 { get; set; } public string sixthPrizeNo6 { get; set; } }
-
Service資料夾創建 qryInvDetailApi 類別 並繼承 ApiBase<qryInvDetailModel> 在泛型上提供 財政部所需參數Model的型別
public class qryInvDetailApi : ApiBase<qryInvDetailModel> { protected override string SetParamter(qryInvDetailModel model) { SortedDictionary<string, string> paramter = new SortedDictionary<string, string>(); paramter["version"] = "0.3"; paramter["action"] = "qryInvDetail"; paramter["invTerm"] = model.invTerm; paramter["UUID"] = UUID; paramter["type"] = model.type; paramter["invNum"] = model.invNum; paramter["generation"] = model.generation; paramter["invTerm"] = model.invTerm; paramter["invDate"] = model.invDate; paramter["encrypt"] = model.encrypt; paramter["sellerID"] = model.sellerID; paramter["randomNumber"] = model.randomNumber; paramter["appID"] = GovAppId; return PraramterHelper.DictionaryToParamter(paramter); } }
在上面實現父類的 SetParamter 方法提供Paramter參數,而可以使用 SortedDictionary 因為參數要按升冪排列
-
在InvoiceController 使用工廠創建Api物件將所需參數Model傳入
-
使用回傳物件的ExcuteApi方法將所需參數Model傳入
最後財政部就會回傳執行結果Json
以上希望對大家有幫助^^
如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^