java对接金蝶接口

金蝶接口简介

​ 首先吐槽一下金蝶的api文档,由于金蝶是C#开发的,用C#能很方便地实现接口对接,因为他们有开发C#的工具类K/3 Cloud WebAPI进行接口的调用,并且把JSON的格式封装好了。但是JAVA就头疼了,调用接口的JSON格式和字段说明写的不清不楚,对接人员也爱理不理,回答问题牛头不对马嘴,最后只能靠网上资料来解决问题。金蝶系统复杂,这里记录一下我踩过的坑以及解决方案。

​ 这次对接接口主要是部门想将TAPD的工时记录列表导入金蝶的工时记录单,因此这里要调用工时记录单的接口,当时看到金蝶的接口,心里就忍不住吐槽了,登录,查看,删除能够一目了然,但是其他的这是什么?新增和修改呢?再看一下查看接口里的参数,没有经过培训完全看不懂,而且有的字段说是必录其实不录也行。

在这里插入图片描述
在这里插入图片描述

吐槽完了回到正题,多次询问金蝶对接人员之后才知道

1.查看是查询单条记录

2.单据查询是按条件查询多条记录

3.保存是修改和新增记录 (字段多得怀疑人生)

4.formid是表单模板的ID,要在BOS(创建表单模板的设计器)里面查

5.编码是记录的编号(不知道的还以为是字符编码)

登录接口

​ 因为要知道金蝶的JSON格式才能调接口,第一个想到的就是用postman,所以用它来测试登录以及cookie的获取,这里比较顺利,测试成功。其中parameters是必须的,其他可以不填。paramters里面填四个值分别是账套ID,用户名,密码,语言。其中账套ID要到金蝶的webapi里面查,这里是第一个坑,一般登录只要用户密码就行了,而这里还要用到额外的账套ID和语言。

在这里插入图片描述

​ 在postman成功调接口之后,尝试用java调,接口是调到了,但是显示用户密码错误。最大的嫌疑莫非就是JSON格式的错误,之后便进行各种debug,换JSON包,改JSON格式,换UTF-8,GBK编码等等操作,在这卡了一天无果。
在这里插入图片描述

​ 后来百度到金蝶论坛上的代码,便拿来试了试,成功登录了!看了下源码,它将JSON编码转为了UNICODE编码,原来用户密码错误就是这个原因,忍不住吐槽金蝶,文档写的太随便了。

在这里插入图片描述

​ 以下是这两个类的代码,它把每个接口的URL和需要的json格式封装好了,需要哪个接口就调哪个方法

InvokeHelper.java

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import org.json.JSONArray;
import org.json.JSONObject;

public class InvokeHelper {
   

        // K3 Cloud WebSite URL Example "http://192.168.19.113/K3Cloud/"
        public static String POST_K3CloudURL = "http://192.168.19.113/K3Cloud/";

        // Cookie 值
        private static String CookieVal = null;

        private static Map map = new HashMap();
        static {
   
                map.put("Save",
                                "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc");
                map.put("View",
                                "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.View.common.kdsvc");
                map.put("Submit",
                                "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit.common.kdsvc");
                map.put("Audit",
                                "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit.common.kdsvc");
                map.put("UnAudit",
                                "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.UnAudit.common.kdsvc");
                map.put("StatusConvert",
                                "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.StatusConvert.common.kdsvc");
        }

        // HttpURLConnection
        private static HttpURLConnection initUrlConn(String url, JSONArray paras)
                        throws Exception {
   
                URL postUrl = new URL(POST_K3CloudURL.concat(url));
                HttpURLConnection connection = (HttpURLConnection) postUrl
                                .openConnection();
                if (CookieVal != null) {
   
                        connection.setRequestProperty(
对接金蝶云的JAVA接口可以按照以下流程进行: 1. 获取接口所需数据:根据金蝶云的文档,确定物料接口所需的数据字段。可以将测试数据保存到一个文件中,或者构造对应的JAVA对象。 2. 转换数据格式:将数据转换成JSON格式,以便与金蝶云的接口进行交互。可以使用JAVA中的JSON库,如Jackson或Gson,将数据对象转换为JSON字符串。 3. 发送请求:使用JAVA的HTTP库,如HttpClient或HttpURLConnection,发送HTTP请求到金蝶云的WebAPI接口。在请求中包含转换后的JSON数据。 4. 处理响应:接收金蝶云返回的响应,可以使用JAVA的JSON库将响应数据解析为JAVA对象,或者直接处理JSON字符串。 5. 处理异常:根据金蝶云的接口文档,处理可能出现的异常情况,如网络连接失败、请求超时等。 下面是一个简单的示例代码,演示了JAVA对接金蝶云物料接口的基本流程: ```java import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import java.io.IOException; public class K3CloudAPIExample { public static void main(String[] args) { // 构造请求数据 String jsonData = "{\"materialCode\": \"123\", \"materialName\": \"Test Material\"}"; // 发送请求 HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost request = new HttpPost("https://api.k3cloud.com/materials"); request.addHeader("Content-Type", "application/json"); request.setEntity(new StringEntity(jsonData, "UTF-8")); try { HttpResponse response = httpClient.execute(request); HttpEntity entity = response.getEntity(); String responseJson = EntityUtils.toString(entity, "UTF-8"); // 处理响应数据 System.out.println("Response: " + responseJson); } catch (IOException e) { e.printStackTrace(); } } } ``` 请注意,以上代码仅为示例,实际使用时需要根据金蝶云的接口文档进行相应的调整和处理。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值