先吐槽一波海关179公告对接,偌大一个海关,但是没有完成的流程进行179海关对接,文件7788的,前后对接不上,没有完整的技术文档,不少人碰壁,感觉很无语。
接下来还是进入正题。
首先,我们会进入到一个海关的官方对接群
但是他们只处理我们提交的审核,基本不会有问题回答,群里面有大佬可以多问问。
直接进入正题:
1,导出证书编号及文件(链接:报关工具大全)
2,去海关官网进行信息注册
。。。图片违规了,只能放一个菜单栏
注:(服务地址是需要填写自己的一个可供外网访问的地址,是海关需要对我们进行检测的接口,如果没有服务器可以将本地进行代理出去,后面审核的时候海关需要使用这个接口看是否能调通)
将地址添加好之后,在群里面让官方的人进行审核,审核通过就是这个样子的一个地址,审核通过之前这个接口一定要随时能访问,不知道什么时候会对你进行审核,如果失败,就删除掉地址重新进行申请就好;
3,海关调用我们之后,会给我们发送一个消息体,这个消息体我们接收之后,将一些数据进行存储,然后对海关进行一个接收成功的响应
// 这里的地址就是刚刚配置的服务地址的路径了,一定要对
@RequestMapping(value = "/realTimeDataUpload")
@ResponseBody
@Transactional(rollbackFor = Exception.class)
public Object realTimeDataUpload(HttpServletRequest request, HttpServletResponse response) {
String openReq = request.getParameter("openReq");
JSONObject openObj = JSONObject.parseObject(openReq);
String orderNo = openObj.getString("orderNo");
String sessionID = openObj.getString("sessionID");
String serviceTime = openObj.getString("serviceTime");
Map<String,Object> map = new HashMap<>();
try {
AppRealTimeDataUpload appRealTimeDataUpload = new AppRealTimeDataUpload();
appRealTimeDataUpload.setOrderNo(orderNo);
appRealTimeDataUpload.setSessionID(sessionID);
appRealTimeDataUpload.setServiceTime(serviceTime);
appRealTimeDataUploadService.insert(appRealTimeDataUpload);
map.put("code","10000");
map.put("message","SUCCESS");
map.put("serviceTime",Double.parseDouble(String.valueOf(System.currentTimeMillis())));
return JSONObject.toJSON(map);
}catch (Exception e){
map.put("code","20000");
map.put("message","FAIL");
map.put("serviceTime",Double.parseDouble(String.valueOf(System.currentTimeMillis())));
return JSONObject.toJSON(map);
}
}
响应之后表示我们接收消息成功,接下来就要将海关需要检验的订单返回给海关,进行socket链接,这时候就要用到前面海关请求我们时的参数,之前存起来的,对订单数据进行加密之后,结合sessionId进行返回数据;
具体可以看一个demo,地址链接:(https://gitee.com/xiaochen991015/customs.git)
里面是之前找到的一个开源项目有关179公告对接的socket代码,需要进行业务修改,亲测成功的,希望大家可以多多指教,多多交流,互相进步,感谢