java实现物流查询(使用阿里云物流查询接口)

快递物流查询接口【最新版】_快递查询_数据API_电商-云市场-阿里云 (aliyun.com)

首先进行购买阿里云快递物流查询接口,有免费的,测试的话大家可以购买免费的,非常方便。

 购买完成后,点击进入自己的控制台。就可以看到自己需要的参数数据:

以及上方提供的接口详情,点进去复制直接用即可。 

 

对应的接口信息都有,只需对应放入所需参数即可使用。 

 JAVA代码实现:

获取所有物流的编码,其实不传编码依旧可以查到,95%能自动检测,但是为了百分百保证查到准确的建议传入当前的物流编码:如:中通 --->  zto

代码中包含,查询物流的编码

逻辑如下:当发货人员发完货物,应记录商品的发货单号,以及物流编码存入数据库中

查询时,获取当前订单,当前订单的发货单号,以及物流编码查询详细的物流详情。

import com.alibaba.fastjson2.JSONObject;
import com.furnish.web.wn.vo.R;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/wnapp/wl")
@CrossOrigin
public class WuLiuController {

    /**
     * 采用阿里云快递物流查询接口 ================
     * @param
     */
    @GetMapping ("/getWl")
    public String getWl(String no,String phone ,String type) {//物流码【4】请求参数,不知道可不填 95%能自动识别
        
        //传过来电话的后四位
        String host = "https://kdwlcxf.market.alicloudapi.com";// 【1】请求地址 支持http 和 https 及 WEBSOCKET
        String path = "/kdwlcx";// 【2】后缀
        //TODO 测试用AppCode 后期需更改正式的
        String appcode = "123465"; // 【3】开通服务后 买家中心-查看AppCode
        no = no+":"+phone; // 【4】请求参数,物流单号+电话后四位
        String urlSend = host + path + "?no=" + no + "&type=" + type; // 【5】拼接请求链接
        try {
            URL url = new URL(urlSend);
            HttpURLConnection httpURLCon = (HttpURLConnection) url.openConnection();
            httpURLCon.setRequestProperty("Authorization", "APPCODE " + appcode);// 格式Authorization:APPCODE
            // (中间是英文空格)
            int httpCode = httpURLCon.getResponseCode();
            if (httpCode == 200) {
                String json = read(httpURLCon.getInputStream());
//                System.out.println("正常请求计费(其他均不计费)");
//                System.out.println("获取返回的json:");
//                System.out.print(json);
                return json;
            } else {
                Map<String, List<String>> map = httpURLCon.getHeaderFields();
                String error = map.get("X-Ca-Error-Message").get(0);
                if (httpCode == 400 && error.equals("Invalid AppCode `not exists`")) {
                    System.out.println("AppCode错误 ");
                } else if (httpCode == 400 && error.equals("Invalid Url")) {
                    System.out.println("请求的 Method、Path 或者环境错误");
                } else if (httpCode == 400 && error.equals("Invalid Param Location")) {
                    System.out.println("参数错误");
                } else if (httpCode == 403 && error.equals("Unauthorized")) {
                    System.out.println("服务未被授权(或URL和Path不正确)");
                } else if (httpCode == 403 && error.equals("Quota Exhausted")) {
                    System.out.println("套餐包次数用完 ");
                } else if (httpCode == 403 && error.equals("Api Market Subscription quota exhausted")) {
                    System.out.println("套餐包次数用完,请续购套餐");
                } else {
                    System.out.println("参数名错误 或 其他错误");
                    System.out.println(error);
                }
            }

        } catch (MalformedURLException e) {
            return "URL格式错误";
        } catch (UnknownHostException e) {
            return "URL地址错误";
        } catch (Exception e) {
            // 打开注释查看详细报错异常信息
            // e.printStackTrace();
        }
        return "";
    }

    /**
     * 查询物流编码
     * @param type
     */
    @GetMapping ("/getType")
    @ApiOperation("查询物流的公司编码")
    public String main(String type) {

        String host = "https://kdwlcxf.market.alicloudapi.com";// 【1】请求地址 支持http 和 https 及 WEBSOCKET
        String path = "/cExpressLists";// 【2】后缀
        //TODO 个人测试用的,后续需更改正式的
        String appcode = "123456"; // 【3】开通服务后 买家中心-查看AppCode

        String urlSend = host + path + "?type=" + type; // 【5】拼接请求链接
        try {
            URL url = new URL(urlSend);
            HttpURLConnection httpURLCon = (HttpURLConnection) url.openConnection();
            httpURLCon.setRequestProperty("Authorization", "APPCODE " + appcode);// 格式Authorization:APPCODE
            // (中间是英文空格)
            int httpCode = httpURLCon.getResponseCode();
            if (httpCode == 200) {
                String json = read(httpURLCon.getInputStream());
                System.out.println("正常请求计费(其他均不计费)");
                System.out.println("获取返回的json:");
                System.out.print(json);
                return  json;
            } else {
                Map<String, List<String>> map = httpURLCon.getHeaderFields();
                String error = map.get("X-Ca-Error-Message").get(0);
                if (httpCode == 400 && error.equals("Invalid AppCode `not exists`")) {
                    System.out.println("AppCode错误 ");
                } else if (httpCode == 400 && error.equals("Invalid Url")) {
                    System.out.println("请求的 Method、Path 或者环境错误");
                } else if (httpCode == 400 && error.equals("Invalid Param Location")) {
                    System.out.println("参数错误");
                } else if (httpCode == 403 && error.equals("Unauthorized")) {
                    System.out.println("服务未被授权(或URL和Path不正确)");
                } else if (httpCode == 403 && error.equals("Quota Exhausted")) {
                    System.out.println("套餐包次数用完 ");
                } else if (httpCode == 403 && error.equals("Api Market Subscription quota exhausted")) {
                    System.out.println("套餐包次数用完,请续购套餐");
                } else {
                    System.out.println("参数名错误 或 其他错误");
                    System.out.println(error);
                }
            }

        } catch (MalformedURLException e) {
            System.out.println("URL格式错误");
        } catch (UnknownHostException e) {
            System.out.println("URL地址错误");
        } catch (Exception e) {
            // 打开注释查看详细报错异常信息
            // e.printStackTrace();
        }
        return "";
    }

    /*
     * 读取返回结果
     */
    private static String read(InputStream is) throws IOException {
        StringBuffer sb = new StringBuffer();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine()) != null) {
            line = new String(line.getBytes(), "utf-8");
            sb.append(line);
        }
        br.close();
        return sb.toString();
    }
}

猜你喜欢

转载自blog.csdn.net/Java_Mr_Jin/article/details/126318883