.NetCore對接各大財務軟件憑證API——金蝶系列(2)


一.前言

今天我們來分析金蝶系列的第二個產品---K3wise,財務版本為15.0.不過好像14.3以上的K3wise就有專門的開放API接口了,這對於我們這些做對接開發的也是一種福利了。
曾經對接過14.2版本的k3wise,當時走的是WebService,過程也是夠心塞。最近聽說14.2的客戶准備轉金蝶K3Cloud了。但是我們的重點是15.0開放API接口的處理了。那么,對接開發API接口的第一步就是開發文檔了,當時也是在金蝶社區看到不少小伙伴問為啥不見K3wise的開發文檔,開發文檔在財務系統的EBDI-->API平台-->API說明
如下圖所示:

二.K3wise財務環境API接口補丁

2.1.接口API補丁

確保對接的客戶所使用的財務環境的API接口已經打過補丁,且補丁已打全。當時就是因為客戶的財務環境沒有打補丁,導致財務對接憑證時科目、憑證各種問題不斷,為了保證開發過程財務環境不會有大問題,請確保補丁打全。

憑證引出如果出現如下圖所示的返回參數,說明補丁已經是最新的,如果不是,請在金蝶社區的補丁下載專區下載補丁https://club.kingdee.com/club/newclub/patch/list?productType=%E9%87%91%E8%9D%B6K/3

2.2所需補丁列表

請確保下載的補丁版本為自己所使用的k3wise的財務版本

補丁號:PT122970 ---增加缺少的API單據接口,包括:投料單,生產任務單,BOM單,工序計划單,生產任務匯報,工序匯報單,工藝路線,工序派工單,工序轉移單,發貨通知單,憑證,調撥單,其他出庫單,其他入庫單,退貨通知單,收料通知/請檢單,料通知單,盤盈入庫,盤虧毀損單,客戶上級組、物料上級組、部門上級組等等。
我們主要用到憑證接口--來進行憑證引入引出的操作。

補丁號 : PT125666 ---完善科目API接口,處理科目核算項目
該補丁用來解決科目API查詢時,正確返回科目的輔助核算項。

補丁號 : PT127053 ---API科目GetList接口沒有按照過濾條件返回數據
該補丁用來解決科目API列表查詢時,過濾條件Filter不起作用。

補丁號 : PT134851---科目、部門、計量單位、倉位、自定義核算項目等基礎資料API接口完善

三.K3wise對接所需參數以及接口列表

3.1Token的獲取

在調用業務接口之前,我們需要先調用Token接口正確獲取到Token,接着使用該Token去調用其他的業務接口,正確操作數據。
Token獲取的請求示例:
http://127.0.0.1/K3API/Token/Create?authorityCode=635e8cd049f1407d0668651d54c90e8696e0ef1e98094961
其中authorityCode 授權碼如何獲取呢?

代碼示例:

    private static long? timestamp;
        private const long MILLISECONDS_EXPIRED = 3300000; //1000 * 60 * 60  - 1000 * 60 * 5 (55分鍾);
        private static string token = String.Empty;
  
  public string GetToken()
        {
            long nowTimestamp = (long)DateTime.Now.Subtract(DateTime.Parse("1970-1-1")).TotalMilliseconds;
            if ((timestamp == null)
                || (nowTimestamp - timestamp > MILLISECONDS_EXPIRED))
            {
                var result = APIClient.CreateAPIOperation<GetToken>(_Config.URL)
                 .SetAuthorityCode(_Config.AuthorityCode)
                 .ToAPIRequest().GetToken<GetTokenResult>();
                if (result != null && result.StatusCode == 200)
                {
                    timestamp = (long)DateTime.Now.Subtract(DateTime.Parse("1970-1-1")).TotalMilliseconds;
                    token = result.Data.Token;
                }
            }
            return token;

得到授權碼后我們就可以正確調用該Token接口了,看一下正確返回的Token

{
  "StatusCode": 200,
  "Message": "Token申請成功!",
  "Data": {
    "AcctID": 2,
    "UserID": 16394,
    "Token": "4CB9FA43B24FFE35DEB4AC14FC2903421182845FC6F634B9B0661FF924E154EB346C18446F7A514D",
    "Code": "001",
    "Validity": 3600.0,
    "IPAddress": "1.196.178.5",
    "Language": "CHS",
    "Create": "2020-05-14 11:00:21"
  }
}

3.2調用業務接口

得到上面的Token后,我們就可以來調用業務接口返回數據了,我們以科目為例,來看一下如何獲取科目列表

請求示例: http://127.0.0.1/K3API/Account/GetList?token=63FD9BBF16FC2C343D708CEA56157C1861945458A7E95B1D4838FFC120BBB0F1A2304662E019DF94

請求參數:

{
	"Data": {
		"Top": "100",
		"PageSize": "10",
		"PageIndex": "1",
		"Filter": "FNumber like '%003%' ",
		"OrderBy": "FNumber asc",
		"Fields": "FNumber,FName"
	}
}

返回參數:

{
  "StatusCode": 200,
  "Message": "Success",
  "Data": {
    "ROWCOUNT": 0,
    "PAGESIZE": 10,
    "PAGEINDEX": 1,
    "DATA": null
  }
}

我們要獲取的字段為科目名稱,科目編碼,是否末級科目,科目全稱等信息。如下代碼所示

        public List<AccountListModel> GetAccountList()
        {
            var tokenStr = GetToken();
            var result = APIClient.CreateAPIOperation<GetList>(_Config.URL)
              .SetObjectTypeId(OrderTypeIDConsts.科目)
              .SetToken(tokenStr)
              .AddFieldKey("FName")
              .AddFieldKey("FNumber")
              .AddFieldKey("FDetail")
              .AddFieldKey("FFullName")
              .ToAPIRequest().Excute<GetListResult>();
            var list = new List<AccountListModel>();
            if (result.StatusCode == 200)
            {
                list = JsonConvert.DeserializeObject<List<AccountListModel>>(result.Data.DATA.ToString());
                list.ForEach(t =>
                {
                    t.FItemDetailName = t.FAccountItem == null ? "" : string.Join(",", t.FAccountItem.Select(x => x.FItemClassName).Distinct().ToList());
                });
            }
            return list;
        }

3.3 憑證接口

憑證引入

請求示例:

http://127.0.0.1/K3API/VoucherData/UpdateVoucher?token=63FD9BBF16FC2C343D708CEA56157C1861945458A7E95B1D4838FFC120BBB0F1A2304662E019DF94

請求參數:

{
  "Replace": "false",
  "VoucherData": {
    "Entries": [
      {
        "FAccountName": "管經理現金",
        "FAccountNumber": "1001.01",
        "FAmount": 500,
        "FAmountFor": 500,
        "FCurrencyName": "人民幣",
        "FCurrencyNumber": "RMB",
        "FDC": 1,
        "FEntryID": 1,
        "FExchangeRate": 1,
        "FExplanation": "test_s1",
        "FMeasureUnit": null,
        "FMeasureUnitUUID": 621,
        "FQuantity": 50,
        "FSettleNo": null,
        "FSettleTypeName": "",
        "FTransNo": "",
        "FUnitPrice": 10
      },
      {
        "FAccountName": "應收股利",
        "FAccountNumber": "1131",
        "FAmount": 500,
        "FAmountFor": 500,
        "FCurrencyName": "人民幣",
        "FCurrencyNumber": "RMB",
        "FDC": 0,
        "FEntryID": 0,
        "FExchangeRate": 1,
        "FExplanation": "test97_s1",
        "FMeasureUnit": null,
        "FMeasureUnitUUID": 279,
        "FQuantity": 50,
        "FSettleNo": null,
        "FSettleTypeName": "",
        "FTransNo": "",
        "FUnitPrice": 10
      }
    ],
    "FAttachments": 0,
    "FCashier": "NONE",
    "FDate": "2018-01-31",
    "FExplanation": "66666",
    "FGroup": "記",
    "FHandler": "",
    "FNumber": 19,
    "FPeriod": 1,
    "FPoster": "NONE",
    "FPreparer": "Administrator",
    "FReference": "",
    "FSerialNum": 2,
    "FTransDate": "2018-01-31",
    "FYear": 2018
  }
}

Replace為true表示修改,此時FVoucherID必傳,為要修改的憑證ID;false表示新增

  public SaveVoucherResult UpdateVoucher(object model, string IsReplace)
        {
            var tokenStr = GetToken();
            var result = APIClient.CreateAPIOperation<UpdateVoucher>(_Config.URL)
            .SetObjectTypeId<UpdateVoucher>(OrderTypeIDConsts.憑證)
            .SetToken(tokenStr)
           .SetModel(model)
           .SetReplace(IsReplace)
            .ToAPIRequest().Excute<SaveVoucherResult>();
            return result;
        }

四.源碼下載

此部分的代碼封裝邏輯思路和K3Cloud的處理大致一致,通過APIClient的調用來處理各個接口的邏輯。

源碼下載:k3wise15.0源碼下載
微信搜索【程序猿貝塔】回復“金蝶” 即可獲取金蝶系列文章中的源代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM