1.登录金蝶云星空的客户端,金蝶测试环境的账号:demo 密码:888888,登录界面如下:
金蝶系统比较复杂,对接接口之前,最好请金蝶的售前人员对业务流程培训一下,确认好要对接的接口
2.查看web api接口文档,接口地址
3.找到要对接的接口,这里我们以物料接口为例:
4.物料接口的字段非常多,而且没有java对接的事例的,java开发人员看到这里一般都想爆粗口,这特么什么接口?当初我也是这样的。接下来,我讲一下接口对接具体流程
1.调用金蝶的登录接口
2.登录成功获取金蝶的kdservice-sessionid
3.调用金蝶保存接口,并带上kdservice-sessionid,否则调用不成功
4.调用金蝶的提交接口,并带上kdservice-sessionid
5.调用金蝶的审核接口,并带上kdservice-sessionid
一般来说,通过这几步整个接口的流程也就完成,如果有还有其他需求的,比如要查询,或者不要提交、审核的,在加上查询或去掉第四部第五步就行了,其他接口的调用方式都一下。
5.上面讲了,接口调用的具体流程,接下来讲一下物料基础数据的构造,上面看到了物料的字段非常多,我们根本就不知道要传那些数据,这里有个简单的方法,步骤如下:
这里你就拿到物料接口需要的数据了,接下来可以把测试数据,拷贝出来,转换成json格式,保存到一个文件里面,当做物料接口的基础数据。当然如果你不怕麻烦,你也可以建对应的java对象,然后构造成物料接口需要的数据格式。
6.基础数据有了,接下来就简单了,在来看物料接口的api
上面这三个字段是接口的必须字段,刚刚我们获取的基础数据就是data里面的数据
formid就是接口对应的表单id,物料接口对应的就是BD_MATERIAL,不同的接口对应的表单id不同,不知道表单id的可以找到对应的api,然后选择保存,在事例里面就可以找到对应的表单id
7.接下来开始编码
金蝶接口配置,配置为yml格式:
kingdee:
url: http://192.168.0.215/K3Cloud/
login: Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc #登录接口
view: Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.View.common.kdsvc #查看表单数据接口
viewList: Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc #表单数据查询接口
save: Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc #保存接口
batchSave: Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BatchSave.common.kdsvc #批量保存接口
submit: Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc #提交接口
audit: Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc #审核接口
statusConver: Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.StatusConvert.common.kdsvc #状态转换接口
K3CloundConfig.java
package com.kn.common.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@ConfigurationProperties(prefix = "kingdee")
@Component
public class K3CloundConfig {
/**
* 金蝶url前缀
*/
private String url;
/**
* 登录接口
*/
private String login;
/**
* 查看接口
*/
private String view;
/**
* 保存接口
*/
private String save;
/**
* 提交接口
*/
private String submit;
/**
* 审核接口
*/
private String audit;
/**
* 状态改变接口
*/
private String statusConver;
}
KDFormIdEnum.java
package com.kn.common.enums;
import lombok.Getter;
@Getter
public enum KDFormIdEnum {
MATERIAL("BD_MATERIAL"),//物料
OUT_STOCK("SAL_OUTSTOCK"),//出库单
STOCK("BD_STOCK"),//仓库
CUSTOMER("BD_Customer");//客户
private String formid;
KDFormIdEnum(String formid) {
this.formid = formid;
}
}
HttpUtil.java
package com.kn.common.utils.http;
import org.springframework.http.*;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class HttpUtil {
private HttpUtil(){
}
/**
* 连接超时时间
*/
private static final int CONN_TIMEOUT = 30000;
/**
* 请求超时时间
*/
private static final int READ_TIMEOUT = 30000;
private static RestTemplate restTemplate = null;
static{
//设置超时时间
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(CONN_TIMEOUT);
requestFactory.setReadTimeout(READ_TIMEOUT);
restTemplate = new RestTemplate(requestFactory);
}
/**
* 设置header公共参数
*/
private static HttpHeaders initHeader(){
HttpHeaders headers = new HttpHeaders();
headers.add("Accept", "application/json");
headers.add("Accpet-Encoding", "gzip");
headers.add("Content-Encoding", "UTF-8");
headers.add("Content-Type", "application/json; charset=UTF-8");
return headers;
}
/**
* 设置header参数
* @param httpHeaders
* @param headers
*/
private static void setHeaderParam(HttpHeaders httpHeaders,Map<String,Object> headers){
if(!CollectionUtils.isEmpty(headers)){
Set<String> keys = headers.keySet();
for(String key:keys){
httpHeaders.add(key,headers.get(key).toString());
}
}
}
/**
* 设置参数
* @param param
* @