JAVA版海关179号对接流程

代码借鉴海关179对接API.(如有侵权马上删除)

步骤

  • 拿到ukey(运营或产品哪里应该会有)
  • 获取开发文档179号开发文档
  • 开发接收海关请求接口(按文档要求不能有端口号)
  • 组装数据进行加签
  • 拼接加签数据上报
  • 完成

以上文档等不多介绍主要是开发(身为CV工程师直接上代码)

接收海关请求
接收海关请求并存储请求(因为加签需要在本地而接收请求要在开放服务器所以使用mq传输数据)

@PostMapping(value = "/platDataOpen")
    @ResponseBody
    public JSONObject platDataOpen(@RequestParam String openReq){
   

        //解析获取数据
        openReq = StringUtils.replace(openReq, """, "\"");
        JSONObject jsonObject = JSONObject.parseObject(openReq);
        String orderNo = jsonObject.getString("orderNo");
        String sessionID = jsonObject.getString("sessionID");
        Long serviceTime = jsonObject.getLong("serviceTime");

        System.out.println(orderNo+sessionID+serviceTime);

        //查询是否有订单
        String source = customsService.insertCustoms(orderNo,sessionID,serviceTime);

        JSONObject result = new JSONObject();
        if (source.equals("10000")){
   
            result.put("code", "10000");
            result.put("message", "");
        }else{
   
            result.put("code", "205");
            result.put("message", "没有此订单");
        }
        result.put("serviceTime", System.currentTimeMillis());

        return result;
    }

	@Resource
    RabbitTemplate rabbitTemplate;

 /**
     * 添加请求数据
     * @param orderNo
     * @param sessionID
     * @param serviceTime
     * @return
     */
    @Override
    public String insertCustoms(String orderNo, String sessionID, Long serviceTime) {
   
        logger.info("海关抽查订单"+orderNo);

        OmsOrderExample omsOrderExample = new OmsOrderExample();
        omsOrderExample.createCriteria().andOrderSnEqualTo(orderNo);
        List<OmsOrder> omsOrders = omsOrderMapper.selectByExample(omsOrderExample);
        //判断是否有指定订单
        if(omsOrders.size()>0){
   

            //查询是否存在订单号
            PaycheckExample example = new PaycheckExample();
            example.createCriteria().andOrderNoEqualTo(orderNo);
            List<Paycheck> paychecks = paycheckMapper.selectByExample(example);
            if(paychecks.size()>0){
   
                paychecks.get(0).setSessionId(sessionID);
                int num = paycheckMapper.updateByPrimaryKey(paychecks.get(0));
                if(num>0){
   
                    System.out.println("修改成功");
                }
            }else{
   
                Paycheck paycheck = new Paycheck();
                paycheck.setOrderNo(orderNo);
                paycheck.setSessionId(sessionID);
                paycheck.setAddTime(new Date());
                paycheck.setStatus((byte) 0);
                paycheck.setBackTime(new Date());
                int num = paycheckMapper.insert(paycheck);
                if (num>0){
   
                    System.out.println("添加成功");

                }
            }

            logger.info("发送消息到CUSTOMS_EXPORT_QUEUE");
			rabbitTemplate.convertAndSend(DirectRabbitConfig.CUSTOMS_EXPORT_EXCHANGE,DirectRabbitConfig.CUSTOMS_EXPORT_ROUTING,orderId);



            //webscoketTest(orderNo);
            return "10000";
        }

            return "205";
    }

创建实体类存放数据

import lombok.Data;

import java.util.List;

/**
 * @author qjy
 * @Explanation
 * @create 2021-11-07 18:30
 */
@Data
@JSONType(orders={
   "sessionID","payExchangeInfoHead","payExchangeInfoLists","serviceTime","certNo","signValue"})
public class HaiguanVO {
   
	//@JSONType很重要作用就是JSON化的时候数据的排序
	//@JSONType(orders={"sessionID","payExchangeInfoHead","payExchangeInfoLists","serviceTime","certNo","signValue"})

    /** 海关发起请求时,平台接收的会话ID  */
    public String sessionID;

    public PayExchangeInfoHead payExchangeInfoHead;

    public List<PayExchangeInfoLists> payExchangeInfoLists;
    
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
/api/USB 接口地址 常见错误结果和解决方法: 下面凑字数 {“code”:“20004”,“message”:“企业实时数据获取验签证书未在服务系统注册”,“total”:0,“serviceTime”:1500000000000} 得到这个结果,说明证书没有注册,测试环境联系管理员,生产环境需要到单一窗口去注册上传。如果已经上传了的,去看看你填的ebpCode是否是你自己的。 {“code”:“20000”,“message”:“上传失败 java.lang.IllegalStateException: xxxx这里是错误信息内容”,“total”:0,“serviceTime”:1500000000000} 这个错误说明上传的数据格式不对,海关系统无法解析,注意看看是否有字段类型或者格式错误,也注意看具体看错误内容,一般都有提示。 {“code”:“20005”,“message”:“验签失败”,“total”:0,“serviceTime”:1500000000000} 得到这个信息,说明上传的内容格式没问题了,验签失败,可能加签过程不对,一般都是字符串或者加签格式不对导致的,相见加签部分的细节,注意比对加签内容的格式和样例是否一致。另外也要看看用得证书什么的有没有问题。 {“code”:“20006”,“message”:“上传失败,入库失败 java.sql.SQLException: ORA-00001: 违反唯一约束条件 (sessionID重复)”,“total”:0,“serviceTime”:1500000000000} 得到这个消息,恭喜你,测试基本成功了:加签成功、数据格式没有问题了,接下来就可以自己生成模拟数据去测试了。 {“code”:“10000”,“message”:“上传成功”,“total”:0,“serviceTime”:1500000000000} 恭喜,测试成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值