Spring Boot 集成金蝶 API 演示

? Spring Boot 集成金蝶 API 演示:登錄 / 注銷 + Cookie 保存

本文將通過 Spring Boot 完整實現一套金蝶接口集成模型,包括:

  • ? 普通登錄
  • ? AppSecret 登錄
  • ? 注銷
  • ? Cookie 保存與復用

📅 項目結構

src/
├── controller/
│   └── KingdeeController.java         // API 接口
├── service/
│   ├── KingdeeService.java            // 登錄/注銷邏輯
├── component/
│   └── KingdeeSessionManager.java     // Cookie 管理
├── resources/
│   └── static/pages/kingdee.html      // 前端測試頁

? 1. Cookie 保存組件 KingdeeSessionManager

package org.example.component;import org.springframework.stereotype.Component;import java.util.List;/*** ==================================================* This class KingdeeSessionManager is responsible for [功能描述].** @author Darker* @version 1.0* ==================================================*/@Component
public class KingdeeSessionManager {private String cookie;public void saveFromHeaders(List<String> cookies) {if (cookies != null && !cookies.isEmpty()) {// 可擴展支持多個 Cookie,但這里我們只取第一個this.cookie = cookies.get(0);}}public String getCookie() {return this.cookie;}public boolean hasCookie() {return cookie != null && !cookie.isEmpty();}public void clear() {this.cookie = null;}
}

? 2. 金蝶服務層 KingdeeService

package org.example.service;import org.example.component.KingdeeSessionManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.util.HashMap;
import java.util.Map;/*** ==================================================* This class KingdeeService is responsible for 金蝶 API 服務.** @author Darker* @version 2.0* ==================================================*/
@Service
public class KingdeeService {private static final String BASE_URL = "https://your.kingdee.server/K3Cloud";@Autowiredprivate KingdeeSessionManager sessionManager;private ResponseEntity<String> postWithOptionalCookie(String url, Map<String, Object> payload, boolean withCookie) {RestTemplate restTemplate = new RestTemplate();HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);if (withCookie && sessionManager.hasCookie()) {headers.add("Cookie", sessionManager.getCookie());}HttpEntity<Map<String, Object>> request = new HttpEntity<>(payload, headers);return restTemplate.postForEntity(url, request, String.class);}/*** 普通登錄*/public String login() {String url = BASE_URL + "/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc";Map<String, Object> payload = new HashMap<>();payload.put("parameters", new Object[]{"你的數據中心 ID", "你的用戶名", "你的密碼", 2052});ResponseEntity<String> response = postWithOptionalCookie(url, payload, false);// 記錄 CookiesessionManager.saveFromHeaders(response.getHeaders().get(HttpHeaders.SET_COOKIE));return response.getBody();}/*** AppSecret 登錄*/public String loginByAppSecret() {String url = BASE_URL + "/Kingdee.BOS.WebApi.ServicesStub.AuthService.LoginByAppSecret.common.kdsvc";Map<String, Object> payload = new HashMap<>();payload.put("parameters", new Object[]{"你的數據中心 ID",                             // 數據中心 ID"你的用戶名",                                  // 用戶名"你的 AppID",    							  // AppID"你的 AppSecret",           				  // AppSecret2052});ResponseEntity<String> response = postWithOptionalCookie(url, payload, false);sessionManager.saveFromHeaders(response.getHeaders().get(HttpHeaders.SET_COOKIE));return response.getBody();}/*** 注銷:需要攜帶 Cookie*/public String logout() {String url = BASE_URL + "/Kingdee.BOS.WebApi.ServicesStub.AuthService.Logout.common.kdsvc";Map<String, Object> payload = new HashMap<>();payload.put("parameters", new Object[]{});ResponseEntity<String> response = postWithOptionalCookie(url, payload, true);// 如果注銷成功(返回 true),則清除本地 cookieif ("true".equalsIgnoreCase(response.getBody().trim())) {sessionManager.clear();}return response.getBody();}
}

? 3. Controller 接口 KingdeeController

package org.example.controller;import org.example.service.KingdeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.util.UriComponentsBuilder;/*** ==================================================* This class KingdeeController is responsible for [功能描述].** @author Darker* @version 1.0* ==================================================*/@RestController
@RequestMapping("/kingdee")
public class KingdeeController {@Autowiredprivate KingdeeService kingdeeService;@GetMapping("/login")public ResponseEntity<?> login() {try {String result = kingdeeService.login();return ResponseEntity.ok(result);} catch (Exception e) {return ResponseEntity.internalServerError().body("登錄失敗:" + e.getMessage());}}@GetMapping("/logout")public ResponseEntity<?> logout() {try {String result = kingdeeService.logout();return ResponseEntity.ok(result);} catch (Exception e) {return ResponseEntity.internalServerError().body("注銷失敗:" + e.getMessage());}}@GetMapping("/login-app-secret")public ResponseEntity<?> loginByAppSecret() {try {String result = kingdeeService.loginByAppSecret();return ResponseEntity.ok(result);} catch (Exception e) {return ResponseEntity.internalServerError().body("AppSecret 登錄失敗:" + e.getMessage());}}
}

? 4. 前端測試頁 kingdee.html

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>金蝶 API 測試</title><script>async function callApi(endpoint) {const res = await fetch(`/kingdee/${endpoint}`);const text = await res.text();document.getElementById('result').innerText = `[${endpoint}]:\n` + text;}</script>
</head>
<body><h2>金蝶 API 測試</h2><button onclick="callApi('login')">普通登錄</button><button onclick="callApi('login-app-secret')">AppSecret 登錄</button><button onclick="callApi('logout')">注銷</button><pre id="result"></pre>
</body>
</html>

?? Cookie 保存說明

  • 登錄成功后,金蝶服務器會通過 Set-Cookie 頭返回一個會話ID
  • 后續操作(注銷 / 探量 / 單據傳遞)必須附帶 Cookie
  • 本文中通過 KingdeeSessionManager 自動管理 Cookie,無需手動處理

🔗 金蝶 API 官方開發文檔

官方開放平臺:

  • 【K3Cloud Web API】總覽:https://open.kingdee.com
  • 登錄接口說明:https://open.kingdee.com/doc/view?doc_id=1055
  • App ID / Secret 說明:https://open.kingdee.com/doc/view?doc_id=1297
  • 提交單據示例:https://open.kingdee.com/doc/view?doc_id=1061

🔧 擴展方向

  • ? 增加 callKingdeeService(String serviceName, Object[] parameters) 通用調用方法
  • ? 支持查詢單據 / 提交審核 / 操作單據
  • 📄 將登錄狀態持久化到 Redis

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901938.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901938.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901938.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React 受控表單綁定基礎

React 中最常見的幾個需求是&#xff1a; 渲染一組列表綁定點擊事件表單數據與組件狀態之間的綁定 受控表單綁定是理解表單交互的關鍵之一。 &#x1f4cd;什么是受控組件&#xff1f; 在 React 中&#xff0c;所謂“受控組件”&#xff0c;指的是表單元素&#xff08;如 &l…

基于FPGA的AES加解密系統verilog實現,包含testbench和開發板硬件測試

目錄 1.課題概述 2.系統測試效果 3.核心程序與模型 4.系統原理簡介 4.1 字節替換&#xff08;SubBytes&#xff09; 4.2 行移位&#xff08;ShiftRows&#xff09; 4.3 列混合&#xff08;MixColumns&#xff09; 4.4 輪密鑰加&#xff08;AddRoundKey&#xff09; 4.…

6.5 GitHub監控系統實戰:雙通道采集+動態調度打造高效運維體系

GitHub Sentinel Agent 定期更新功能設計與實現 關鍵詞:GitHub API 集成、定時任務調度、Python 爬蟲開發、SMTP 郵件通知、系統穩定性保障 1. GitHub 項目數據獲取功能 1.1 雙通道數據采集架構設計 #mermaid-svg-ZHJIMXcMAyDHVhmV {font-family:"trebuchet ms",v…

Explorer++:輕量級高效文件管理器!!

項目簡介 Explorer 是一款專為Windows操作系統設計的輕量級且高效的文件管理器。作為Windows資源管理器的強大替代方案&#xff0c;它提供了豐富的特性和優化的用戶體驗&#xff0c;使得文件管理和組織變得更加便捷高效。無論是專業用戶還是普通用戶&#xff0c;都能從中受益&a…

7、生命周期:魔法的呼吸節奏——React 19 新版鉤子

一、魔法呼吸的本質 "每個組件都是活體魔法生物&#xff0c;呼吸節奏貫穿其生命始終&#xff0c;"鄧布利多的冥想盆中浮現三維相位圖&#xff0c;"React 19的呼吸式鉤子&#xff0c;讓組件能量流轉如尼可勒梅的煉金術&#xff01;" ——以霍格沃茨魔法生理…

理解計算篇--正則表達式轉NFA--理論部分

空正則表達式轉NFA單字符正則表達式轉NFA拼接正則表達式轉NFA選擇正則表達式轉NFA重復正則表達式轉NFA 正則表達式轉NFA–實戰部分 空正則表達式轉NFA 轉換步驟&#xff1a; 構建1個只有1個狀態的NFA起始狀態也是接受狀態沒有規則&#xff0c;即規則集為空 單字符正則表達式…

穩態模型下的異步電機調速【運動控制系統】

異步電動機&#xff1a; n1是同步轉速&#xff08;電機和磁芯同步時候的轉速&#xff09; n&#xff1a;電機的實際轉速 異步電動機恒壓頻比的概念&#xff0c;為什么基頻以下可以采取恒壓頻率&#xff0c;基頻以上不可以采用恒壓頻比&#xff1a; 異步電動機的恒壓頻比&…

【KWDB 創作者計劃】_算法篇---Stockwell變換

文章目錄 前言一、Stockwell變換原理詳解1.1 連續S變換定義1.2 離散S變換1.3簡介 二、S變換的核心特點2.1頻率自適應的時頻分辨率2.1.1高頻區域2.1.2低頻區域 2.2無交叉項干擾2.3完全可逆2.4相位保持2.5與傅里葉譜的直接關系 三、應用領域3.1地震信號分析3.2生物醫學信號處理3.…

云計算(Cloud Computing)概述——從AWS開始

李升偉 編譯 無需正式介紹亞馬遜網絡服務&#xff08;Amazon Web Services&#xff0c;簡稱AWS&#xff09;。作為行業領先的云服務提供商&#xff0c;AWS為全球開發者提供了超過170項隨時可用的服務。 例如&#xff0c;Adobe能夠獨立于IT團隊開發和更新軟件。通過AWS的服務&…

Python爬蟲第17節-動態渲染頁面抓取之Selenium使用下篇

目錄 引言 一、獲取節點信息 1.1 獲取屬性 1.2 獲取文本值 1.3 獲取ID、位置、標簽名、大小 二、切換Frame 三、延時等待 3.1 隱式等待 3.2 顯式等待 四、前進后退 五、Cookies 六、選項卡管理 七、異常處理 引言 這一節我們繼續講解Selenium的使用下篇&#xff0…

容器docker入門學習

這里寫目錄標題 容器容器的軟件廠商 dockerdocker引擎 虛擬化虛擬化技術 docker安裝詳解1、安裝檢查2、安裝yum相關的工具3、安裝docker-ce軟件4、查看docker版本5、啟動docker服務6、設置docker開機啟動7、查看有哪些docker容器運行進程8、查看容器里有哪些鏡像9、下載nginx軟…

文獻總結:NIPS2023——車路協同自動駕駛感知中的時間對齊(FFNet)

FFNet 一、文獻基本信息二、背景介紹三、相關研究1. 以自車為中心的3D目標檢測2. 車路協同3D目標檢測3. 特征流 四、FFNet網絡架構1. 車路協同3D目標檢測任務定義2. 特征流網絡2.1 特征流生成2.2 壓縮、傳輸與解壓縮2.3 車輛傳感器數據與基礎設施特征流融合 3. 特征流網絡訓練流…

git 出現 port 443 Connection timed out

梯子正常延遲不算嚴重&#xff0c;但在使用git push時反復出現 fatal: unable to access https://github.com/irvingwu5/xxxx.git/ Error in the HTTP2 framing layer Failed to connect to github.com port 443 after 136353 ms: Connection timed out 將git的網絡配置與梯子…

【2025年4月18日】android studiio最新設置沉浸式狀態欄教程

&#x1f62b;【2025年4月18日】搞了一整天&#xff0c;終于完美搞定 Android 沉浸式狀態欄&#xff08;WebView 本地HTML&#xff09; 最近在做一個個人項目&#xff0c;用 Android 加載本地 HTML 做個小工具。按理說用 WebView 加載頁面很簡單嘛——結果沉浸式狀態欄這個坑…

如何刪除 Launchpad 中 Chrome 的圖標

有一天突然在 Launchpad 中出現下面的圖標&#xff0c;在 Finder 的 Applications 中也沒有&#xff0c;不知道如何刪除。最終在《How to remove chrome app icons from launchpad?》中找到了答案。中文互聯網上并沒有搜到相關帖子&#xff0c;遂作記錄。 解決辦法很簡單&am…

PHP8.2.9NTS版本使用composer報錯,擴展找不到的問題處理

使用composer install時報錯&#xff1a; The openssl extension is required for SSL/TLS protection but is not available. If you can not enable the openssl extension, you can disable this error, at y our own risk, by setting the ‘disable-tls’ option to true.…

一本通 2063:【例1.4】牛吃牧草 1005:地球人口承載力估計

Topic&#xff1a; Ideas&#xff1a; 為什么把這兩道題放在一起呢&#xff1f;就是因為這兩道題很類似&#xff0c;都是很簡單的數學題&#xff0c;只要你會列出數學等式&#xff0c;你就學會這道題了&#xff01; 下面把計算過程展示給大家 Code&#xff1a; //2025/04/18…

基于用戶的協同過濾推薦系統實戰項目

文章目錄 基于用戶的協同過濾推薦系統實戰項目1. 推薦系統基礎理論1.1 協同過濾概述1.2 基于用戶的協同過濾原理1.3 相似度計算方法1.3.1 余弦相似度(Cosine Similarity)1.3.2 皮爾遜相關系數(Pearson Correlation)1.3.3 歐幾里得距離(Euclidean Distance)1.3.4 調整余弦相似度…

【SpringBoot】基于Filter實現SQL注入過濾器

最近掃出了一個SQL注入安全漏洞&#xff0c;用戶的非法輸入可能導致數據泄露、數據篡改甚至系統崩潰&#xff0c;為了有效防范 SQL 注入攻擊&#xff0c;除了在代碼層面使用參數化查詢和預編譯語句外&#xff0c;還可以通過實現一個Filter來過濾掉潛在的危險輸入。本文將介紹如…