(参考了 https://www.cnblogs.com/lihao1017/p/17361972.html 这篇文章)
最终返回的参数如图:
写一下自己的笔记~
1.先在“顺丰开放平台”注册账号并进行实名认证
顺丰开放平台:https://open.sf-express.com/
不会的还可以跟着教程去操作,非常详细
认证成功后可以得到 顾客编码、沙箱验证码、生产校验码:
2.去业务中心创建开发者应用并测试以及上线
创建自己的应用,然后点进去关联API
选择自己需要的API 这里我只需要查询物流的信息,于是只需要关联“路由查询接口”
然后点后面的“测试”,注意不要自己去点到那个测试页面进行测试,一定是从这里点进去!
测试的那个校验码就是你的沙箱校验码,请求参数就用它默认的参数不用改
测试好了之后也要记得回到上面那个地方还要测试一遍,记得也是从后面那个测试按钮点进去,后面这一遍测试的校验码是生产校验码了
最后还要回到这个地方,点击“上线”,这样你的接口就可以用了
【!!!注意,如果没有点击上线的话,接口会报没有权限!】
上线之后是这样的:
至此,这里就配置好了,接下来准备自己的项目部分
3.下载SDK,然后将jar包导进自己的项目里
SDK下载地址:https://open.sf-express.com/developSupport/976720?activeIndex=399112
直接下载最新版本就行
然后打开下载下来的压缩包,点进去找到里面的jar包,导进自己的项目里
将jar包导进项目的方法可参考:https://blog.csdn.net/m0_73900214/article/details/131400180
这一步也可以替换成引入依赖:
<!--顺丰-->
<dependency>
<groupId>com.sf.csim</groupId>
<artifactId>SF-CSIM-EXPRESS-SDK</artifactId>
<version>0.0.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/SF-CSIM-EXPRESS-SDK-V2.1.7.jar</systemPath>
</dependency>
4.开始写代码
1.顺丰配置类
/**
* @author
* @date
* @desc 顺丰快递 丰桥接口配置类
*/
@Data
public class ShunFengConfig {
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";
}
2.核心业务代码
/**
* 查询顺丰路由信息
* @param id 顺丰快递单号
* @param phone 收件人手机号后四位
* @return
* @throws UnsupportedEncodingException
*/
public JSONObject sfRoutes(String id, String phone) throws UnsupportedEncodingException {
IServiceCodeStandard standardService = ExpressServiceCodeEnum.EXP_RECE_SEARCH_ROUTES;//查路由
// 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", ShunFengConfig.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", CallExpressServiceTools.getMsgDigest(msgData,timeStamp,ShunFengConfig.CHECK_WORD));
long startTime = System.currentTimeMillis();
log.debug("====调用实际请求:" + params);
String result = HttpClientUtil.post(ShunFengConfig.CALL_URL_PROD, params);
log.debug("====调用丰桥的接口服务代码:" + (standardService.getCode()) + " 接口耗时:"+ (System.currentTimeMillis()-startTime)+"====");
log.debug("===调用地址 ==="+ShunFengConfig.CALL_URL_PROD);
log.debug("===顾客编码 ==="+ShunFengConfig.CLIENT_CODE);
log.debug("===返回结果:" +result);
JSONObject apiResultData = JSONUtil.parseObj(JSONUtil.parseObj(result).get("apiResultData"));
if(!apiResultData.getBool("success")){
throw new BizException(ResultStatus.Common.ERROR_ADD_FAIL);
}
JSONObject resultMsgData = JSONUtil.parseObj(apiResultData.get("msgData"));
JSONArray routeResps = JSONUtil.parseArray(resultMsgData.get("routeResps"));
JSONObject routeRespsObj = routeResps.getJSONObject(0);
return routeRespsObj;
}
3.接口调用
@ApiOperation(value = "获取顺丰快递物流")
@PostMapping("/sfRoutes")
public JSONObject sfRoutes(@RequestBody QuerySfRoutesReq req) throws UnsupportedEncodingException {
return service.sfRoutes(req.getTrackingNumber(), req.getPhone());
}
@Data
public class QuerySfRoutesReq {
@ApiModelProperty("快递单号")
private String trackingNumber;
@ApiModelProperty("手机号码后四位")
private String phone;
}
4.测试
搞定!