首先,非常感谢前人的努力,开发是依照此文档进行,在此主要给出个人的流程图及JAVA版本注意的地方。 转载学习文档:https://blog.csdn.net/ccbox_net/article/details/89031736, 好人一生平安!
以下内容多为个人理解,如有谬误,请回复指证,共同进步
关于海关公告:
个人理解为海关需要一个抽检功能,会在电商平台在海关指定页面注册服务提供接口后,会随机在清关的订单中通过接口拉取数据进行手抽查
前期准备
1.海关提供插卡机(含操作员卡和法人卡)或U盘等
2.windows电脑一台,用来插卡
3.登陆海关页面,下载《中国电子口岸客户端控件》, 这个工具启动后就会包含websocket的服务, 我在用的系统为win10
4. 开始读取卡信息
需要一个海关查证书与编号的工具SignTool(工具在转载页面有提供,如需要提供可私信我)
相关页面及工具页面
以下步骤完成接下来就是开发了
流程方式:
方式1: JAVA进行websocket加签,需要本地插卡机(操作员卡)有固定IP,或者说商城的服务要能请求到插卡机,能进行websocket进行请求就可以
优势:数据实时性高,收到海关通知后,随即进行数据组装加签上传
缺点:如果商城服务和插卡机不在一起,需要建立之间的通信, 可能会涉及内网端口开放转发等
本人用的就是这种,虽然本身没有固定IP,开始是拒绝的,但是因为清单申报的时候就必须要,所以只能想办法提供了固定IP地址,所以就用了这一种
值得注意的是第2步,websocket获取签名的时候的参数: {"_id":"1", "_method":"cus-sec_SpcSignDataAsPEM", "args":{"inData":"《加签串》", "passwd":"《操作员卡密码》"}}
方式2:JAVA服务负责接口海关请求,保存请求,不主动触发,然后提供轮巡查询接口, 由插卡机上的JS脚本程序或C#等进行数据拉取进行加签后,再请求到JAVA服务,再由JAVA服务上传
优势:不需要固定IP等网络调整
缺点:1,JAVA服务一直会被轮巡请求,造成一定压力;2,需要在插卡机运行程序进行轮巡,可能需要具备一定的其他的语言开发能力(JS版本在转载文档里有现成DEMO)
因为http轮巡的缺点,建议使用websocket的方式去请求自己的服务
以下是开发过程进过的坑:
1.加签的文档和发送的文本中:字段顺序必须与文本一模一样,所以需要使用 LinkedHashMap, 还有注意JSON库的序列化不能改变字段顺序 。
2.证书编号一定要小写
其他的等想到了再补充......
再次感谢 学习文档:https://blog.csdn.net/ccbox_net/article/details/89031736, 好人一生平安!需要资源包的可以去这个地址获取