SpirngBoot整合快递100

目录

一、注册快递100

二、技术文档地址

三、需要认证的key和comcumer

 四、spring boot 整合快递 100使用

4.1 引入快递100和hutool的依赖

4.2 将key和comcumer写入application.properties文件中

 4.3 新建一个modle,用于将查出来的json数据转成对象

4.4 新建一个controller

4.5 结果显示

五、源码参考


一、注册快递100

https://api.kuaidi100.com/manager/v2/query/overview

二、技术文档地址

https://api.kuaidi100.com/document/5f0ffb5ebc8da837cbd8aefc

三、需要认证的key和comcumer

登录到快递100的后台

key:uxdpeXvk7416

customer: A04A2C3A70259125790AE81164145FE2

 四、spring boot 整合快递 100使用

4.1 引入快递100和hutool的依赖

   <!-- 添加快递100的依赖 -->
        <dependency>
            <groupId>com.github.kuaidi100-api</groupId>
            <artifactId>sdk</artifactId>
            <version>1.0.11</version>
        </dependency>
        <!--添加hutool的依赖 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.18</version>
        </dependency>

4.2 将key和comcumer写入application.properties文件中

# 定义出快递100 key和customer
kuaidi100.key=uxdpeXvk7416
kuaidi100.customer=A04A2C3A70259125790AE81164145FE2

 4.3 新建一个modle,用于将查出来的json数据转成对象

/*
 * Copyright (c) 2020, 2024, webrx.cn All rights reserved.
 *
 */
package com.beiyou.model;

import lombok.Data;

import java.util.List;

@Data
public class KuaidiInfo {

    private String message;
    private List<Step> data;
    @Data
    class  Step {
        private String time;
        private String ftime;
        private String context;
    }
}

4.4 新建一个controller

/*
 * Copyright (c) 2020, 2024, webrx.cn All rights reserved.
 *
 */
package com.beiyou.controller;

import cn.hutool.json.JSONUtil;
import com.beiyou.model.KuaidiInfo;
import com.google.gson.Gson;
import com.kuaidi100.sdk.api.QueryTrack;
import com.kuaidi100.sdk.contant.CompanyConstant;
import com.kuaidi100.sdk.core.IBaseClient;
import com.kuaidi100.sdk.pojo.HttpResult;
import com.kuaidi100.sdk.request.QueryTrackParam;
import com.kuaidi100.sdk.request.QueryTrackReq;
import com.kuaidi100.sdk.utils.SignUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/kd100")
public class KD100Controller {
    /**
     * 定义出快递100 的customer和key
     */
    @Value("${kuaidi100.customer}")
    private String customer;
    @Value("${kuaidi100.key}")
    private String key;

    @GetMapping
    public KuaidiInfo queryTrack() throws Exception {
        QueryTrackReq queryTrackReq = new QueryTrackReq();
        QueryTrackParam queryTrackParam = new QueryTrackParam();
        queryTrackParam.setCom(CompanyConstant.ZT);
        queryTrackParam.setNum("78414126296826");
        String param = new Gson().toJson(queryTrackParam);

        queryTrackReq.setParam(param);
        queryTrackReq.setCustomer("A04A2C3A70259125790AE81164145FE2");
        queryTrackReq.setSign(SignUtils.querySign(param, key, customer));
        IBaseClient baseClient = new QueryTrack();
        HttpResult h = baseClient.execute(queryTrackReq);
        String body = h.getBody();
        /**
         * 1. 使用hutooL工具将json字符串转换为对象
         */
        KuaidiInfo kuaidiInfo = JSONUtil.toBean(body, KuaidiInfo.class);
        /**
         * 通过debug可以得出 无论输入的信息是否有误 都会返回200
         * 所以我们可以根据message来判断是否成功
         */
        return kuaidiInfo;

    }

}

4.5 结果显示

 还差一个state状态

我们可以新建一个枚举 用于定义状态

package com.beiyou.emul;


import lombok.Getter;
import lombok.Setter;

import java.util.Arrays;
import java.util.Optional;

//轨迹当前状态,如:0在途,1揽收,2疑难,3签收,4退签,5派件,6退回,7转单,10待清关,11清关中,12已清关,13清关异常,14收件人拒签等
public enum KDstate {
    SALE(0, "在途"),
    OFF_SALE(1, "揽收"),
    DELETE(5, "派件");
    @Setter
    @Getter
    private Integer code; //状态
    @Setter
    @Getter
    private String desc; //状态描述

    KDstate(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public static KDstate findByCode(Integer code) {
        //jdk1.8提供了哪些新特性
        Optional<KDstate> optional = Arrays.stream(KDstate.values()).filter(item -> item.getCode().equals(code)).findFirst();
        /*
        if (optional.isPresent()){
            return optional.get();
        }
        return null;
        */
        return optional.orElse(null);
    }
}

修改最开始的KuaidiInfo 

/*
 * Copyright (c) 2020, 2024, webrx.cn All rights reserved.
 *
 */
package com.beiyou.model;

import com.beiyou.emul.KDstate;
import lombok.Data;

import java.util.List;

@Data
public class KuaidiInfo {

    private String message;
    private List<Step> data;
    // 定义快递状态
    private String  state;

    /**
     * 根据传来的state 返回对应的描述
     * @return
     */
    public String getStateX() {
        return KDstate.findByCode(Integer.parseInt(this.state)).getDesc();
    }

    private String stateX;
    @Data
    class  Step {
        private String time;
        private String ftime;
        private String context;
    }
}

此时前端只需要渲染 stateX的数据即可

五、源码参考

 源码我已经放到了云效,有兴趣可以参考

https://codeup.aliyun.com/62858d45487c500c27f5aab5/SpringBoot-KD100-Huang.git 

### Spring Boot 整合 快递100 API 示例教程 #### 1. 创建Spring Boot项目 为了创建一个新的Spring Boot项目,可以使用Spring Initializr来初始化项目结构。确保选择了Web和Rest Repositories作为依赖项。 ```java package com.example.kuaidi; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class KuaidiApplication { public static void main(String[] args) { SpringApplication.run(KuaidiApplication.class, args); } } ``` #### 2. 添加快递100 API依赖 在`pom.xml`文件中加入快递100 SDK或其他HTTP客户端库(如OkHttp或Apache HttpClient),以便于发起API请求。 对于Maven项目,在`<dependencies>`标签内添加如下内容: ```xml <!-- OkHttp --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.9.1</version> </dependency> <!-- JSON处理工具 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` #### 3. 配置快递100服务接口 定义一个用于调用快递100查询接口的服务类。此服务负责构建URL参数并发送GET/POST请求给快递100服务器获取物流信息。 ```java package com.example.kuaidi.service.impl; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.json.JSONObject; import java.io.IOException; public class ExpressService { private final String apiKey = "your_api_key"; // 替换成自己的key /** * 查询指定运单号对应的物流详情. */ public JSONObject queryExpressInfo(String expNo, String compCode){ OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://api.kdniao.com/api/tracesearch?"+ "EBusinessID=xxx&RequestType=1002&Data=" + "{%22OrderCode%22:%22%22,%22ShipperCode%22:%22" + compCode + "%22,%22LogisticCode%22:%22" + expNo +"%22}") .addHeader("Accept", "application/json") .addHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8") .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); return new JSONObject(response.body().string()); } catch (IOException e) { System.out.println(e.getMessage()); return null; } } } ``` 注意:上述代码中的URL应替换为实际的快递100官方提供的API地址,并且需要根据实际情况调整请求头和其他参数设置[^1]。 #### 4. 控制器实现 编写控制器接收前端传来的订单编号等数据,并调用上面提到的服务方法返回结果。 ```java package com.example.kuaidi.controller; import com.example.kuaidi.service.impl.ExpressService; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/express") public class ExpressController { private final ExpressService expressService; public ExpressController(ExpressService expressService) { this.expressService = expressService; } @GetMapping("/{expNo}/{compCode}") public Object getExpress(@PathVariable String expNo,@PathVariable String compCode){ return expressService.queryExpressInfo(expNo, compCode); } } ``` 这样就完成了一个简单的Spring Boot应用与快递100 API之间的整合示例。当然这只是一个基础版本,具体实施过程中还需要考虑异常处理、安全性等问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今天的接口写完了吗?

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

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

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

打赏作者

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

抵扣说明:

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

余额充值