java对接微信海关清关接口(亲测有效)

一、创建参数对象

//OrderWechat 参数的实体类
    OrderWechat ow = new OrderWechat();
            ow.setAppid(appid); // 公众账号ID
            ow.setMch_id(mch_id); // 商户号
            ow.setOut_trade_no(out_request_no); // 商户订单号
            ow.setTransaction_id(trade_no);// 微信支付返回的订单号  商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
            ow.setCustoms(customs); //海关申报是的代码
            ow.setMch_customs_no("" + merchant_co_code);//商户代码  	商户在海关登记的备案号,customs非NO,此参数必填

            //备案必填
            ow.setCert_type(cardType);//证件类型  请传固定值IDCARD,暂只支持大陆身份证。
            ow.setCert_id("" + cardId);//身份证号 用户大陆身份证号,尾号为字母X的身份证号,请大写字母X。
            ow.setName("" + name);//姓名

            //封装签名字段
            SortedMap<Object, Object> params = new TreeMap<Object, Object>();
            params.put("appid", appid);
            params.put("mch_id", mch_id);
            params.put("out_trade_no", out_request_no);
            params.put("transaction_id", trade_no);
            params.put("customs", customs);
            params.put("mch_customs_no", "" + merchant_co_code);
            params.put("cert_type", cardType);
            params.put("cert_id", "" + cardId);
            params.put("name", "" + name);
            // 得到签名 生成支付签名,这个签名 给 微信支付的调用使用
            String sign = Sign.createSign("utf-8", params, key);
            ow.setSign(sign); //签名

二、微信签名方法:

//characterEncoding:编码格式  parameters:签名字段  key:微信提供的  用于加签的密钥
 public static String createSign(String characterEncoding, SortedMap<Object, Object> parameters, String key) {
        StringBuffer sb = new StringBuffer();
        Set es = parameters.entrySet();// 所有参与传参的参数按照accsii排序(升序)
        Iterator it = es.iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            String k = (String) entry.getKey();
            Object v = entry.getValue();
            if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
                sb.append(k + "=" + v + "&");
            }
        }
        sb.append("key=" + key);
        String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
        return sign;
    }

三、将对象转换为微信接收格式XML (XML转为对象)

// object to XML.   XStream 这个类需要 依赖xmlpull_1_0_5.jar
    public static String object2Xml(Object ro, Class<?> type) throws Exception {
        if (null == ro) {
            return null;
        }
        XStream xstream = xstreams.get(type.getName());
        if (xstream == null) {
            xstream = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_")));
            xstreams.put(type.getName(), xstream);
        }
        xstream.alias("xml", type);
        return xstream.toXML(ro);
    }
  //XML to  object
  public static <T> T xml2Object(String inputXml, Class<T> type) throws Exception {
        if (null == inputXml || "".equals(inputXml))
            return null;
        XStream xstream = xstreams.get(type.getName());
        if (xstream == null) {
            xstream = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_")));
            xstreams.put(type.getName(), xstream);
        }
        xstream.alias("xml", type);
        return (T) xstream.fromXML(inputXml);
    }

四、封装请求接口

   String url="https://api.mch.weixin.qq.com/cgi-bin/mch/customs/customdeclareorder";
        try{
                // Object转换为XML
                String xml = XmlUtil.object2Xml(ow, OrderWechat.class);
                //请求  微信清关接口 returnXml  返回结果
                String returnXml = HttpUtil.sendPost(url, xml);
                // XML转换为Object
                OrderWechatDeclareResult owr = (OrderWechatDeclareResult) XmlUtil.xml2Object(returnXml,
                        OrderWechatDeclareResult.class);
                        }catch (Exception e) {
                 System.out.println("微信自助清关异常");
            }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值