JAVA对接顺丰快递(丰桥API)

我们公司是做电商平台的,之前有接到过需求是对接顺丰快递,主要是用于查询物流信息以及预计派送时间。我这边经过查询相关资料整理出了以下代码。

对接顺丰快递是通过丰桥api实现的,首先需要到顺丰开放平台注册一个账号。

网址如下,大家自行注册:顺丰开放平台


注册成功以后点击控制台选择开发者对接

第一次进来是需要创建一个自己的应用的具体的细节可以参考一下文档,我这边就不在进行讲解了:顺丰开放平台

因为我这边用到的是查物流状态和预计派送信息所以就只签约了这些。其它的对接起来都是差不多的,只是传入的参数和返回的值不一样,你们只需要根据要求传参和接收对应返回值即可。我这边就直接上代码咯。

 一、下载SDK

目前官方提供SDK只有jar包,不知道是不是因为我还没有找到,官方的SDK文档如下:顺丰开放平台

将下载好的项目里面的jar导入到自己的项目里面。如果是boot项目大家可以把jar发布到自己的本地仓库里面 :第三方jar上传本地仓库_批量上传jar到三方库_超哥带你上王者的博客-CSDN博客

二、顺丰配置类

/**
 * @author lihao
 * @create 2023-03-01 13:29
 * @desc 顺丰快递 丰桥接口配置类
 **/
@Data
public class ShunFenConfig {

    public static String CLIENT_CODE = "";  //此处替换为您在丰桥平台获取的顾客编码
    public static String CHECK_WORD = "";//生产校验码
    public static String CHECK_WORD_BOX = "";//沙箱校验码



    //沙箱环境的地址 -PRO
    public static String CALL_URL_BOX = "https://sfapi-sbox.sf-express.com/std/service";
    //生产环境的地址 -PRO
    public static String CALL_URL_PROD = "https://sfapi.sf-express.com/std/service";

}

三、核心业务代码

/**
* 查询顺丰路由信息
* @param id 顺丰快递单号
* @param phone 收件人手机号后四位
* @return
* @throws UnsupportedEncodingException
*/
private JSONObject sfRoutes(String id,String phone) throws UnsupportedEncodingException{
        //IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_CREATE_ORDER; //下订单
        //	IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_SEARCH_ORDER_RESP; //查订单
        //  IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_UPDATE_ORDER;//订单取消
        // 	IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_FILTER_ORDER_BSP;//订单筛选
        IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_SEARCH_ROUTES;//查路由
        //	IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_GET_SUB_MAILNO;//子单号
        //	IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_QUERY_SFWAYBILL;//查运费
        //	IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_REGISTER_ROUTE;//注册路由
        //	IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_CREATE_REVERSE_ORDER;//退货下单
        //	IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_CANCEL_REVERSE_ORDER;//退货消单
        //	IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_WANTED_INTERCEPT;//截单转寄
        // 	IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_QUERY_DELIVERTM;//时效标准及价格查询
        //  IServiceCodeStandard standardService = ExpressServiceCodeEnum.COM_RECE_CLOUD_PRINT_WAYBILLS;//面单打印
        //  IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_UPLOAD_ROUTE;//路由上传
        //   IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_SEARCH_PROMITM;//预计派送时间查询
        //  IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_EXCE_CHECK_PICKUP_TIME;//揽件服务时间查询
        //  IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_VALIDATE_WAYBILLNO;//运单号合法性校验

        CallExpressServiceTools tools=CallExpressServiceTools.getInstance();
        // set common header
        Map<String, String> params = new HashMap<String, String>();
        String timeStamp = String.valueOf(System.currentTimeMillis());
        String msgData ="{\"trackingType\":1,\"trackingNumber\":[\""+id+"\"],\"checkPhoneNo\":\""+phone+"\"}";//无月结卡号通过运单和手机后4位即可
        params.put("partnerID", ShunFenConfig.CLIENT_CODE);  // 顾客编码 ,对应丰桥上获取的clientCode
        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,ShunFenConfig.CHECK_WORD));

        long startTime = System.currentTimeMillis();

        log.debug("====调用实际请求:" + params);
        String result = HttpClientUtil.post(ShunFenConfig.CALL_URL_PROD, params);

        log.debug("====调用丰桥的接口服务代码:" + (standardService.getCode()) + " 接口耗时:"+ (System.currentTimeMillis()-startTime)+"====");
        log.debug("===调用地址 ==="+ShunFenConfig.CALL_URL_PROD);
        log.debug("===顾客编码 ==="+ShunFenConfig.CLIENT_CODE);
        log.debug("===返回结果:" +result);
        JSONObject apiResultData =JSONObject.parseObject(JSONObject.parseObject(result).getString("apiResultData"));
        if(!apiResultData.getBoolean("success")){
            throw new CommonException(apiResultData.getString("errorMsg"));
        }
        JSONObject resultMsgData = JSONObject.parseObject(apiResultData.getString("msgData"));
        JSONArray routeResps = JSONArray.parseArray(resultMsgData.getString("routeResps"));
        JSONObject routeRespsObj = routeResps.getJSONObject(0);
        return routeRespsObj;
    }
/**
* 查询顺丰快递预计派送时间
* @param id 顺丰快递单号
* @param phone 手机后四位
* @return
*/
private String arrivalTime(String id,String phone) throws UnsupportedEncodingException {
        IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_SEARCH_PROMITM;//预计派送时间查询
        CallExpressServiceTools tools=CallExpressServiceTools.getInstance();
        // set common header
        Map<String, String> params = new HashMap<String, String>();
        String timeStamp = String.valueOf(System.currentTimeMillis());
        String msgData ="{\"searchNo\":\""+id+"\",\"checkType\":1,\"checkNos\":[\""+phone+"\"]}";//无月结卡号通过运单和手机号
        params.put("partnerID", ShunFenConfig.CLIENT_CODE);  // 顾客编码 ,对应丰桥上获取的clientCode
        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,ShunFenConfig.CHECK_WORD));

        long startTime = System.currentTimeMillis();

        log.debug("====调用实际请求:" + params);
        String result = HttpClientUtil.post(ShunFenConfig.CALL_URL_PROD, params);

        log.debug("====调用丰桥的接口服务代码:" + (standardService.getCode()) + " 接口耗时:"+ (System.currentTimeMillis()-startTime)+"====");
        log.debug("===调用地址 ==="+ShunFenConfig.CALL_URL_PROD);
        log.debug("===顾客编码 ==="+ShunFenConfig.CLIENT_CODE);
        log.debug("===返回结果:" +result);
        JSONObject apiResultData =JSONObject.parseObject(JSONObject.parseObject(result).getString("apiResultData"));
        if(!apiResultData.getBoolean("success")){
            log.debug(apiResultData.getString("errorMsg"));
            return "";
        }
        JSONObject resultMsgData = JSONObject.parseObject(apiResultData.getString("msgData"));
        String promiseTm = resultMsgData.getString("promiseTm");
        return promiseTm;
    }

                
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java接入丰桥并实现下单查询功能可以通过以下步骤完成: 首先,需要引入丰桥SDK依赖,可以通过在项目的pom.xml文件中添加以下代码引入丰桥SDK: ```xml <dependency> <groupId>com.sf</groupId> <artifactId>sf-express-api-sdk</artifactId> <version>1.0.0</version> </dependency> ``` 然后,在代码中调用丰桥SDK提供的接口来实现下单和查询功能。下单功能可以通过调用`com.sf.api.client.SfExpressServiceClient`类的`createOrder`方法来创建订单,传入相应的参数,如发货人信息、收货人信息、包裹详情等。示例代码如下: ```java SfExpressServiceClient client = new SfExpressServiceClient(); CreateOrderRequest request = new CreateOrderRequest(); request.setShipperName("发货人姓名"); request.setShipperMobile("发货人手机号码"); // 更多发货人信息设置 request.setConsigneeName("收货人姓名"); request.setConsigneeMobile("收货人手机号码"); // 更多收货人信息设置 CreateOrderResponse response = client.createOrder(request); ``` 查询功能可以通过调用`com.sf.api.client.SfExpressServiceClient`类的`queryOrder`方法来查询订单状态,传入相应的参数,如订单号、客户订单号等。示例代码如下: ```java SfExpressServiceClient client = new SfExpressServiceClient(); QueryOrderRequest request = new QueryOrderRequest(); request.setOrderId("订单号"); // 更多查询参数设置 QueryOrderResponse response = client.queryOrder(request); ``` 以上就是使用Java接入丰桥并实现下单查询功能的简要步骤。需要注意的是,具体的参数设置和接口调用方式可能会有所不同,可以参考丰桥提供的官方文档进行具体实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

麦兜没有兜111

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

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

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

打赏作者

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

抵扣说明:

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

余额充值