【SF顺丰】顺丰开放平台API对接(Java对接篇)

对接前置篇:

【SF顺丰】顺丰开放平台API对接(注册、API测试篇)_顺丰api接口对接指南-CSDN博客

1.实现效果展示

 2.SF顺丰开放平台,JDK资源下载。

     下载地址:顺丰开放平台

3.将下载的JDK放入项目中。

4.将JDK资源引入pom.xml文件中。

<!-- 顺丰丰桥 SDK -->
<dependency>
   <groupId>com.sf</groupId>
   <artifactId>SF-CSIM-EXPRESS-SDK</artifactId>
   <version>2.1.7</version>
   <scope>system</scope>
   <systemPath>${project.basedir}/lib/SF-CSIM-EXPRESS-SDK-V2.1.7.jar</systemPath>
</dependency>

 注:项目启动pom.xml文件中配置打包将外部SDK引入项目包中,否则发布后依然是失效。

<build>
   <plugins>
      <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
         <configuration>
            <!-- 在打包时将引用的外部jar引入到当前项目包中	-->
            <fork>true</fork>
            <includeSystemScope>true</includeSystemScope>
         </configuration>
      </plugin>
   </plugins>
</build>

5.测试DEMO

接下来是一个详细的示例,演示如何使用顺丰丰桥API进行路由信息查询。

    顺丰丰桥Api参考文档:顺丰开放平台

public class SFTestDemo {

    private static final String CLIENT_CODE = "替换自己应用的顾客编码";  //顾客编码

    //沙箱环境的地址
    private static final String CALL_URL_BOX = "https://sfapi-sbox.sf-express.com/std/service";//请求接口
    private static final String CHECK_WORD_BOX = "替换自己应用的沙箱校验码";//沙箱校验码

    //生产环境的地址
    private static final String CALL_URL_PROD = "https://sfapi.sf-express.com/std/service";//请求接口
    private static final String CHECK_WORD = "替换自己的应用的生产校验码";//生产校验码


    /**
     * 查询顺丰路由信息
     * <p>
     * 顺丰快递单号
     * 收件人手机号后四位
     *
     * @return
     * @throws UnsupportedEncodingException
     */
    public static void main(String[] args) throws UnsupportedEncodingException {

        IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_SEARCH_ROUTES;//路由查询

        String timeStamp = String.valueOf(System.currentTimeMillis());//时间戳

        CallExpressServiceTools tools = CallExpressServiceTools.getInstance();//数字签名,API文档有说明

        // set common header
        Map<String, String> params = new HashMap<String, String>();

        //封装查询msgData数据
        Map<String, Object> map = new HashMap<>();
        List<String> list = new ArrayList();
        list.add("替换自己顺丰单号");
        map.put("language", "0");
        map.put("trackingType", "1");
        map.put("methodType", "1");
        map.put("trackingNumber", list);
        map.put("checkPhoneNo", "替换快递单手机号后四位");
        String msgData = JSONObject.toJSONString(map);


//        params.put("Content-type", "application/x-www-form-urlencoded");
        params.put("partnerID", CLIENT_CODE);  // 顾客编码
        params.put("requestID", UUID.randomUUID().toString().replace("-", ""));
        params.put("serviceCode", standardService.getCode());// 接口服务码
        params.put("timestamp", timeStamp);
        params.put("msgData", msgData);
        params.put("msgDigest", tools.getMsgDigest(msgData, timeStamp, CHECK_WORD));

        String result = HttpClientUtil.post(CALL_URL_PROD, params);

        System.out.println("===调用地址 ===" + CALL_URL_PROD);
        System.out.println("===顾客编码 ===" + CLIENT_CODE);
        System.out.println("===返回结果:" + result);

    }
}

### 如何使用 Java 实现与顺丰开放平台 API 对接 #### 准备工作 为了能够顺利对接顺丰开放平台,开发者需提前完成账号注册并获取相应的权限。部分 API 需要在沙箱环境中至少成功调用三次才能申请正式上线[^4]。 #### 请求参数设置 在构建请求时,需要定义好请求类型以及准备必要的业务数据。对于查询类操作而言,可以采用如下方式指定请求指令: ```java public static final String REQUEST_TYPE = "8001"; // 查询请求指令编号 ``` 此段代码设定了用于发起查询请求的具体命令字[^5]。 #### JSON 数据处理 当向服务器发送请求或接收响应时,通常会涉及到 JSON 格式的序列化和反序列化过程。如果遇到无法正常解析返回结果的情况,则可能是由于字符串转义不当所引起的。例如,在某些情况下,可能会收到形如 `"apiResultData": "{\"success\": ... "` 的嵌套 JSON 字符串,此时应当注意去除多余的转义字符以确保能被正确解读为标准 JSON 结构[^3]。 #### 发送 HTTP 请求 下面给出一段简单的示例程序来说明如何通过 Java顺丰开放平台提交 POST 请求,并读取其反馈信息: ```java import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; // 构建URL对象指向目标地址 URL url = new URL("https://example.sf-express.com/api/v2/waybill/query"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("POST"); // 设置HTTP方法为POST conn.setDoOutput(true); // 表明允许写出流即发送实体内容给服务端 conn.setRequestProperty("Content-Type", "application/json"); String jsonInputString = "{ \"requestType\" : \"" + REQUEST_TYPE + "\" }"; try(OutputStream os = conn.getOutputStream()){ byte[] input = jsonInputString.getBytes("utf-8"); os.write(input, 0, input.length); } int responseCode = conn.getResponseCode(); if(responseCode == HttpURLConnection.HTTP_OK){ InputStream inputStream = conn.getInputStream(); } ``` 上述代码片段展示了怎样创建一个 HTTPS 连接实例并向指定路径发出带有 JSON 载荷的数据包;同时也包含了基本错误检测逻辑以便判断是否获得了预期的成功状态码[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不懂英语的程序猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值