Node JS 封装金蝶云星空WebApi _NodeJS

为了方便查询即时库存,或者方便获取数值,或者为了方便更新数据,我们可以封装金蝶星空的WebApi接口,构建自定义WebApi来返回我们想要的数据,例如:即时库存。

以Node JS 为示例,使用到的技术,express,axios

首先创建Node项目,并安装依赖:

npm install express
npm install axios --save

代码示例:

const express = require('express');
const axios = require('axios');
// 创建Express应用
const app = express();
// 登录API
const loginUrl = 'https://ServerIP/K3cloud/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc';
const httpUrl = 'https://ServerIP/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BillQuery.common.kdsvc';
const loginData = {
    "acctid": "账套ID",
    "UserName": "用户名",
    "Password": "密码",
    "Lcid": "2052"
}
// 即时库存JSON
const httpData ={
	"data": {
		    "FormId": "STK_Inventory",
		    "FieldKeys": "FStockOrgId.FName,FMaterialid.FNumber,FMaterialid.FName,FMaterialid.FSpecification,FBaseUnitId.FName,FBaseQty",
		    "FilterString": "FBaseQty>0",
		    "OrderString": "",
		    "TopRowCount": 0,
		    "StartRow": 0,
		    "Limit": 2000,
		    "SubSystemId": ""
			}
}
  // 定义express API路由
  
  app.get('/WebApi/kingdeeWebApi', (req, res) => {
    axios.post(loginUrl, loginData)
        .then(response => {
            // 保存cookie
            const cookies = response.headers['set-cookie'];
            // 发起后续请求    
            // 使用同样的cookie发起后续请求
            axios.post(httpUrl,httpData, 
    		{
                headers: { 'Cookie': cookies.join(';') }
            })
            .then(response => {
                //console.log('后续请求返回的数据:', response.data);
    			res.json(response.data);
            })
            .catch(error => {
                console.error('后续请求出错:', error);
            });
        })
        .catch(error => {
            console.error('登录请求出错:', error);
        });
  });

  const hostname = '0.0.0.0'; // 绑定到所有网络接口
  // 监听端口
  const port = 3000;
  app.listen(port,hostname,() => {
    console.log(`服务器运行在 http://localhost:${port}`+`/WebApi/kingdeeWebApi`);
  });

运行后自定义WebApi地址:

http://localhost:3000/WebApi/kingdeeWebApi