海关179加签上报+电子口岸加签实现

china-port-dds (中国电子口岸海关总署XML报文&海关179数据加签)

Gitee源码地址:https://gitee.com/wxm-cookies/china-port-dds

VersionUpdate TimeStatusAuthorDescription
1.0.02023-07-14 10:30创建Weixm创建api文档

application.yml配置说明

名称说明默认值
task.cron定时器cron0/20 * * * * ?
dds.url加签URL[本地加签客户端URL]http://localhost:8080/rpc/eport/signature
dds.gain-url获取加密数据URL
dds.gain-size加密数据的获取条数10
dds.notify-url数据加密好后的回调URL
push-179-url推单179的URLhttps://customs.chinaport.gov.cn/ceb2grab/grab/realTimeDataUpload

Task说明

china-port-dds定时器轮询 -> 获取商城系统的加签数据 -> 循环需要加签数据 -> chinaport-data-signature加签 -> 签名回调给商城
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

公共响应(平台加签数据/Task加签回调 都基于以下格式,data为业务响应)

FieldTypeDescription
codeInteger状态码 200-成功
dataObject数据
msgString描述
@Data
public class DdsR<T> implements Serializable {
    private Integer code;
    private T data;
    private String msg;
    
    public static <T> DdsR<T> ok(T data){
        DdsR<T> r = new DdsR<>();
        r.setCode(200);
        r.setData(data);
        r.setMsg("成功");
        return r;
    }

    public static <T> DdsR<T> error(String msg){
        DdsR<T> r = new DdsR<>();
        r.setCode(500);
        r.setData(null);
        r.setMsg(msg);
        return r;
    }
}

加签数据获取说明(平台准备接口 china-port-dds进行配置调用)

  • URL: application.yml配置中dds.gain-url

  • Type: GET

  • Author: Weixm

  • Description: 获取平台需要加签的数据List

  • Request-fields:

    FieldTypeDescription
    sizeInteger加签数据获取条数 application.yml中配置的dds.gain-size
  • Response-fields:

    FieldTypeDescription
    idInteger平台加签数据唯一标记
    typeString类型[枚举ChinaPortDdsTypeEnum]
    reqValueString加签数据
  • Request-example:

    curl -X GET -i http://localhost:11201/order/china/port/dds/get?size=20
    
  • Response-example:

    {
        "code":200,
        "data":[
            {
                "id":5,
                "type":"179",
                "reqValue":"加签数据xxxxx"
            }
        ],
        "msg":"成功"
    }
    
  • Java-example:

    @GetMapping("/get")
    public DdsR<List<ChinaPortDdsEntity>> get(@RequestParam("size") Integer size){
        try {
            List<ChinaPortDdsEntity> list = this.获取签名的List(size);
            return DdsR.ok(list);
        }catch (Exception e){
            return DdsR.error("查询失败");
        }
    }
    
    
    @Data
    public class ChinaPortDdsEntity implements Serializable {
        /**
         * ID
         */
        private Integer id;
        
        /**
         * 类型[枚举ChinaPortDdsTypeEnum]
         */
        private String type;
    
        /**
         * 加签请求
         */
        private String reqValue;
    }
    

加签数据回调说明(平台准备接口 china-port-dds进行配置调用)

  • URL: application.yml配置中dds.notify-url

  • Type: Post

  • Author: Weixm

  • Description: 加签数据返回

  • Request-fields:

    FieldTypeDescription
    idInteger平台加签数据唯一标记
    typeInteger类型[枚举ChinaPortDdsTypeEnum]
    codeInteger状态 200为成功
    resultJSONObjectString
  • Request-example:

    curl -X POST http://localhost:11201/order/china/port/dds/notify -H "Content-Type: application/json;" -d "{\"msg\":\"成功\",\"code\":200,\"data\":{\"msg\":\"POST请求失败Failed to connect to localhost/0:0:0:0:0:0:0:1:8080\",\"result\":\"POST请求失败Failed to connect to localhost/0:0:0:0:0:0:0:1:8080\",\"code\":500,\"id\":6,\"type\":\"179\"}}"
    
  • Response-example:

    {
        "code":200,
        "data":"成功",
        "msg":"成功"
    }
    
  • Java-example:

    @PostMapping("/notify")
    public DdsR<String> notify(@RequestBody JSONObject param){
          JSONObject data = param.getJSONObject("data");
          //ID
          Integer id = data.getInteger("id");
          //类型
          String type = data.getString("type");
          //状态码
          if (new Integer("200").equals(data.getInteger("code"))){
              //成功处理
              this.处理回调成功加签数据(id,type,data);
          }else {
              //失败处理
              this.处理回调失败加签数据(id,data.getString("result"));
          }
          return DdsR.ok("成功");
    }
    
179响应示例
  • 成功
    {
        "msg":"成功",
        "code":200,
        "data":{
            "result":"上传成功",
            "code":200,
            "id":20,
            "type":"179"
        }
    }
    
  • 失败
    {
        "msg":"成功",
        "code":200,
        "data":{
            "result":"上传失败,入库失败: 唯一标识sessionID重复",
            "code":500,
            "id":20,
            "type":"179"
        }
    }
    
其他加签响应示例
  • 成功

    {
        "msg":"成功",
        "code":200,
        "data":{
            "result":{
                "success":true,
                "certNo":"fzex4q",
                "x509Certificate":"7wj4ki",
                "digestValue":"rakt0t",
                "signatureValue":"pbyy9u"
            },
            "code":200,
            "id":20,
            "type":"621"
        }
    }
    
  • 失败

    {
        "msg":"成功",
        "code":200,
        "data":{
            "result":"加签失败",
            "code":500,
            "id":20,
            "type":"621"
        }
    }
    
js一般都没有问题,我就是之后上传的问题弄了两个礼拜,最后弄清楚了。 以下是数据上报海关方法,我用的是.net的web方式: 1.添三个引用,见dll文件夹。 2.载我写的类:两个cs文件(放到web目录下) 3.组织上报数据实体格式如下 public class payExchangeInfoLists { public string orderNo { get; set; }//String 订单编号 public List goodsInfo { get; set; }// List 商品信息 public string recpAccount { get; set; }// String 收款账号 public string recpCode { get; set; }// String 收款企业代码 public string recpName { get; set; }// String 收款企业名称 } public class goodsInfo { public string gname { get; set; }// String 商品名称 public string itemLink { get; set; }// String 商品展示链接地址 } public class payExchangeInfoHead { public string guid { get; set; }// String 系统唯一序号 public string initalRequest { get; set; }// String 原始请求 public string initalResponse { get; set; }// String 原始响应 public string ebpCode { get; set; }// String 电商平台代码 public string payCode { get; set; }// String 支付企业代码 public string payTransactionId { get; set; }// String 交易流水号 public double totalAmount { get; set; }// double 交易金额 public string currency { get; set; }// String 币制 public string verDept { get; set; }// String 验核机构 public string payType { get; set; }// String 支付类型 public string tradingTime { get; set; }// String 交易成功时间 public string note { get; set; }// String 备注 } public class payExInfoStr { public string sessionID { get; set; }// string Y In 海关发起请求时,平台接收的会话ID。 public payExchangeInfoHead payExchangeInfoHead { get; set; }// String Y In 支付原始数据表头 public List payExchangeInfoLists { get; set; }// List Y In 支付原始数据表体 public string serviceTime { get; set; }// Long Y In 返回时的系统时间 public string certNo { get; set;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小草王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值