费用报销OpenAPI接口说明
1.描述
本openapi接口仅适用于费用报销模块单据导入。
单据导入接口支持导入(通过EAS DEP /BIM工具)动态新增的属性(字段)。
注意:openApi接口在eas8.5.0及以上版本才支持, 8.5需要更新到费用补丁PT151074,
8.6.1需要更新到费用补丁PT155366才支持。
2.接口说明
接口描述:
导入单据
接口URL:
http:// ip : port /easportal/openapi/api?token= ?
(token获取可参考接口调用)
接口API:
cpbcOpenAPI_importBill
接口参数说明:
参数 | 类型 | 含义 |
bosType | String | 单据的bostype(如费用报销单:4A44F49F) |
data | String | 单据对象数组Json字符串 |
params | String | 参数对象,必须包含属性actionType,actionType可选值为submit/save |
(1)http请求的body
{ "api": " cpbcOpenAPI_importBill", "data": [“4A44F49F”, data, {“actionType”:”submit”}] }
其中”data”中的data参数为要导入单据,为数组格式,可放入多张同类型单据,可参考3 .2 单 据 d ata 示例:
请求body示例:
{ "api": "cpbcOpenAPI_importBill", "data": ["4A44F49F", [{"bosType":"4A44F49F","entries":[]}],{"actionType":"submit" }] }
(2)http请求返回值为String , JSON格式。JSON格式如下:
{ “status” : 0, “msg” : “信息” “billErrors”:[{“id”:””,”number”:””,errorMsgs:[“”,””]},{结构同前面的},…] }
值说明:
status:处理结果:0:全部成功 1:全部失败 2:部分成功
msg : 描述信息
billErrors : 单据错误清单,描述不能导入的原因。
status: 0:导入成功 1:导入失败,id:单据id,number:单据编码, errorMsgs:错误信息集。
3.单据字段说明
3.1 数据类型的格式说明
单据的数据格式为JSON,下面的表格描述了每种数据类型的格式要求,传入的数据请严格遵照以下的格式。
数据类型 | 说明 | 格式要求 |
ID | 最大长度为44为的字符串 | “id”:”A093893DF” |
数值 | 小数值,金额类的小数位最多为2位。 | “amount”,23.95 |
整数 | 整数值。 | “year”:2013 |
日期 | 日期,要求为yyyy-mm-dd | “bizDate”:”2013-06-19” |
时间 | 日期,时间类型,要求为 yyyy-mm-dd HH:MM:SS | “createTime”:”2013-06-19 14:58:23” |
字符串 | 字符串 | “name”:”nokia 手机” |
枚举 | 枚举项 | “status”:2 |
基础数据 | EAS系统中的基础数据,采用对象形式表示,需要传入其编码。 | “applier”:{“number”:”ellen”} |
布尔型 | 值为true/false。 | “isTax”:true |
单据数据模型不需要维护单据id 分录id 和分录的billid,会在单据保存时自动生成
引入接口不校验金额关系,需要构建好单据中金额数值关系,否则操作时可能会失败
基础数据类型属性,不推荐加入id,如果id不符合EAS系统id规则且无对应基础数据存在,导入时或者在单据后续流程中可能会发生异常。
说明:单据模型可通过dep单据扩展平台查看实体或者bos开发工具查看元数据
必录字段包含且不限于以下字段:
3.2 单据data示例(为单据对象数组Json字符串):
[{"overAmountDesc":"1111", "bosType":"4A44F49F", "isWithTax":false, "budgetAmount":0, "applier":{"number":"ellen"}, "bizDate":"2013-06-19", "applierCompany":{"number":"LLJT.01"}, "orgUnit":{"number":"LLJT.01.01"}, "company":{"number":"LLJT.01"}, "costedDept":{"number":"LLJT.01.01"}, "currencyType":{"number":"CNY"}, "cause":"cpbcopenApi", "bizReqDate":"2013-06-19", "prior":"30", "state":25, "entries":[{"happenTime":"2013-06-19","amount":1000,"amountOri":1000,"amountOriWithoutTax":1000,"tax":0,"amountApprovedOri":1000,"amountApproved":1000,"operationType":{"number":"LL002"},"expenseType":{"number":"B001.001"},"costCenter":{"number":"LLJT.01.01"}, "company":{"number":"LLJT.01"},"currencyType":{"number":"CNY"},"exchangeRate":1,"convertMode":0,"exchangeRatePrecision":4}], "collectionEntries":[{"payerName":"testPayer","currencyType":{"number":"CNY"},"exchangeRate":1,"convertMode":0,"exchangeRatePrecision":4}] }]
3.3 请求”data”示例:
[ "4A44F49F" , [{"overAmountDesc":"1111", "bosType":"4A44F49F", "isWithTax":false, "budgetAmount":0, "applier":{"number":"ellen"}, "bizDate":"2013-06-19", "applierCompany":{"number":"LLJT.01"}, "orgUnit":{"number":"LLJT.01.01"}, "company":{"number":"LLJT.01"}, "costedDept":{"number":"LLJT.01.01"}, "currencyType":{"number":"CNY"}, "cause":"cpbcopenApi", "bizReqDate":"2013-06-19", "prior":"30", "state":25, "entries":[{"happenTime":"2013-06-19","amount":1000,"amountOri":1000,"amountOriWithoutTax":1000,"tax":0,"amountApprovedOri":1000,"amountApproved":1000,"operationType":{"number":"LL002"},"expenseType":{"number":"B001.001"},"costCenter":{"number":"LLJT.01.01"}, "company":{"number":"LLJT.01"},"currencyType":{"number":"CNY"},"exchangeRate":1,"convertMode":0,"exchangeRatePrecision":4}], "collectionEntries":[{"payerName":"testPayer","currencyType":{"number":"CNY"},"exchangeRate":1,"convertMode":0,"exchangeRatePrecision":4}] }] , {" actionType ":"submit " } ]
4.二开相关
dep扩展字段直接加入data数据模型中,在dep启用的情况,会自动保存到数据库中。
如果需要二次开发开导入处理类
1、修改类路径下:com/kingdee/eas/cp/bc/app/cpbcImporterConfig.properties文件,修改bostype对应的导入处理类为二开的类。
2、该类必须继承自com/kingdee/eas/cp/bc/app/openApi/AbstractDefaultImporter.java或者每个单据的具体导入实现类(如费用报销单:BizAccountBillImporter)
5.接口调用
5.1 http调用方式
1.登录:
先要进行单点登录,有以下两种方式:
(1) 普通用户密码方式
http://127.0.0.1:6888/easportal/openapi/login?authPattern=BaseDB&dcName =EAS850BETA3&isEncodePwd=0&language=l2&password=&user=zqtest
返回格式:
{ "data":"{"token":"qZbT9PATjqwuINItQwIZxCSYjesmiDtSYVIPuvV3LzPty2feKpVeFdJrcRnUS9iL"}, "errCode":0, "errMsg":"执行成功" }
username : 用户
password : 密码
dcName : 数据中心代码
language : 语言
slnName : eas
authPattern :验证方式 默认 "BaseDB" ; 其他认证方式KEY可从easAuthPatterns.xml中获取。如BaseTrdLtpaToken可动态切上下文
isEncodePwd 密码是否加密方式传递,0未加密,1加密(加密方式为DES,key为username,可以引用common.jar )
appid:第三方拥有权限的应用编码(共享模式不用传均可以调通)。目前费用的OpenAPI接口都是非共享的,所以第三方系统调用需要加上这个参数(参考6中OpenAPI用户手册)
errCode 为0代表执行成功,其他为失败
(2) LtpaToken 免密码方式
http://localhost:6888/easportal/openapi/login?user=zj001&dcName=EAS850BETA3&language=l2&password=AAECAzVFOUZCNDUyNUU5RkJCNUF6ajAwMQHwJDFSCal3H3RqdinkCvOAVrKI&authPattern=BaseTrdLtpaToken
username : 用户
password : ltpatoken
dcName : 数据中心代码
language : 语言
slnName : eas
authPattern : BaseTrdLtpaToken
appid:第三方拥有权限的应用编码(共享模式不用传均可以调通)
errCode 为0代表执行成功,其他为失败
ltpatoken 可参照文档附件中的: 第三方系统单点登录到EAS的二次开发指南.docx
如java 为
String username = "user"; String password = LtpaTokenManager.generate(username,filePath).toString();
详细请看上述文档
2.调用:
http://ip:port/easportal/openapi/api?token =?
请求body
{ "api": " cpbcOpenAPI_importBill", "data": [“4A44F49F”, data, {“actionType”:”submit”}] }
返回结果
{ "data":"{}", "errCode":0," errMsg":"执行成功" }
result 为最终执行的结果
5.2 第三方java程序内调用方式
String ip = "172.17.6.176";
int port = 8080;
String userName = "zj003";
String password = "";
String dcName = "EAS860NEW";
String language = "l2";
EASLoginContext loginCtx = new EASLoginContext.Builder(ip, port,
new CommonLogin.Builder(userName, password, dcName, language)
//.appid("test")
.build())
.https(false)//是否https
.build();
OpenApiInfo info = new OpenApiInfo();
info.setApi("cpbcOpenAPI_importBill");
info.setData(3.3 请 求 ” data ” 示例 );
OpenApi openApi = OpenApiFactory.getService(loginCtx);
String result = openApi.invoke(info);
System.out.println("----------result:" + result);
第三方依赖包:
openapi-server.jar或sp-openapi-server.jar
log4j-1.2.15.jar
fastjson-1.2.58.jar
获取方式
\eas\server\lib\common\trd
\eas\server\lib\server\bos\openapi-server.jar或eas\server\lib\patch\ sp-openapi-server.jar(只需要一个)
ps:
1. 具体的调用样例可反编译查看
com.kingdee.bos.openapi.third.login.Example
2. 如果调用过程中出现404报错,有可能是调用的访问路径不在白名单之中,被拦截,需要手动添加白名单路径,配置文件的路径为:apusic/domains/server*/config/web.xml。具体如下图
allow_urls新增/easportal/openapi/
6. OpenAPI常见问题
第三方应用使用OpenAPI之前一定要先看用户手册,了解相关基本配置。调用出现问题或报错先在OpenAPI常见问题里面查找解决方案。
OpenAPI用户手册:
https://vip.kingdee.com/article/98349464997083392
OpenAPI常见问题可参考以下云社区链接。
https://vip.kingdee.com/article/175622642354077952
7. 测试OpenApi接口是否能调用成功
可以通过postman测试
1.获取token
http://127.0.0.1:6888/easportal/openapi/login?authPattern=BaseDB&dcName=EAS85&isEncodePwd=0&language=l2&password=&user=yangappid=124456
username : 用户
password : 密码
dcName : 数据中心代码
language : 语言
slnName : eas
authPattern :验证方式 默认 "BaseDB" ; 其他认证方式KEY可从easAuthPatterns.xml中获取。如BaseTrdLtpaToken可动态切上下文
isEncodePwd 密码是否加密方式传递,0未加密,1加密(加密方式为DES,key为username,可以引用common.jar )
appid:第三方拥有权限的应用编码(共享模式不用传均可以调通)。目前费用的OpenAPI接口都是非共享的,所以第三方系统调用需要加上这个参数(参考6中OpenAPI用户手册)
返回格式:
{ "data":"{"token":"qZbT9PATjqwuINItQwIZxCSYjesmiDtSYVIPuvV3LzPty2feKpVeFdJrcRnUS9iL"}, "errCode":0, "errMsg":"执行成功" }
注意:第三方调用,url要加appid参数
2.调用OpenApi接口
通过以上获取到的token,发起以下http请求,如果返回执行成功,说明OpenApi接口调通了
请求body示例:
{ "api": "cpbcOpenAPI_importBill", "data": ["4A44F49F", [{"bosType":"4A44F49F","entries":[]}], {"actionType":"submit"}] }
8.文档附件:
2. kingdee_Ltpa 见附件
3. EAS费用报销openAPI1.1 见附件
费用报销OpenAPI接口说明
本文2024-09-22 18:48:55发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-103202.html