为了方便查询即时库存,或者方便获取数值,或者为了方便更新数据,我们可以封装金蝶星空的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