ä¸ï¼å¿«é100å¼åçç¸å ³ææ¡£
1,å¿«éå ¬å¸ç¼ç çè¡¨æ ¼
ç»å½å访é®:
https://api.kuaidi100.com/manager/page/document/kdbm
2,å¿«éå ¬å¸ç¼ç çè¡¨æ ¼ä¸è½½:
https://api.kuaidi100.com/manager/utils/download/kdbm.do
3ï¼å®æ¹ä»£ç å°å:
 github
https://github.com/kuaidi100-api
gitee
https://gitee.com/kuaidi100-apiÂ
4ï¼å¼åå¹³å°çå°å:
https://api.kuaidi100.com/
说æï¼åå®ç¼çæ¶æ森ææ¯ä¸ä¸ªä¸æ³¨æ¶æçå客ï¼å°åï¼https://www.cnblogs.com/architectforest
     对åºçæºç å¯ä»¥è®¿é®è¿éè·åï¼Â https://github.com/liuhongdi/
     æ: https://gitee.com/liuhongdi
说æï¼ä½è :åå®ç¼ é®ç®±: [email protected]
äºï¼è·å¾keyåcustomer:
ç»å½å°åå°ï¼æçä¿¡æ¯->ä¼ä¸ä¿¡æ¯
å³ä¾§ækeyåcustomer:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLzMDNwYTN0EDMy0CN1AzNxMjMwIzMxIDMyIDMy0SM5YDOzkTMvwlMwIjMwIzLcFTO2gzM5EzLcd2bsJ2Lc12bj5ycn9Gbi52YuIjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
ä¸ï¼å¯¼å ¥javaåº:
1,mvnrepositoryä¸çå°å:
https://mvnrepository.com/artifact/com.github.kuaidi100-api/sdk
å¦å¾:
2,å¯¼å ¥å°mavenï¼
<dependency>
<groupId>com.github.kuaidi100-api</groupId>
<artifactId>sdk</artifactId>
<version>1.0.5</version>
</dependency>
åï¼é ç½®æ°æ®åº:
建表:
CREATE TABLE `express` (
`expressId` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`expressNum` varchar(100) NOT NULL DEFAULT '' COMMENT 'è¿åç¼å·',
`companyCode` varchar(100) NOT NULL DEFAULT '' COMMENT 'å¿«éå
¬å¸ç¼ç ',
`state` tinyint NOT NULL DEFAULT '-1' COMMENT '-1åå§ç¶æï¼0å¨éï¼1æ½ä»¶ï¼2çé¾ï¼3ç¾æ¶ï¼4éç¾ï¼5派件ï¼6éå',
`addTime` datetime NOT NULL DEFAULT '2022-01-21 00:00:00' COMMENT 'æ·»å æ¶é´',
`subStatus` int NOT NULL DEFAULT '0' COMMENT '订é
ç¶æï¼0,åå§ï¼200ï¼æå',
`subRequest` varchar(2000) NOT NULL DEFAULT '' COMMENT '请æ±åæ°',
`subResult` varchar(2000) NOT NULL DEFAULT '' COMMENT 'è¿ååæ°',
PRIMARY KEY (`expressId`),
UNIQUE KEY `expressNum` (`expressNum`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='è¿å表'
CREATE TABLE `express_data` (
`dataId` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`expressId` bigint NOT NULL DEFAULT '0' COMMENT 'è¿åid',
`expressNum` varchar(100) NOT NULL DEFAULT '' COMMENT 'è¿å',
`dataTime` timestamp NOT NULL DEFAULT '2022-01-21 00:00:00' COMMENT 'è¿åæ°æ®çæ¶é´',
`context` varchar(500) NOT NULL DEFAULT '' COMMENT 'è¿å说ææå',
`addTime` datetime NOT NULL DEFAULT '2022-01-21 00:00:00' COMMENT 'æ·»å æ¶é´',
PRIMARY KEY (`dataId`),
UNIQUE KEY `expressId` (`expressId`,`dataTime`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='è¿åæ°æ®è¡¨â
äºï¼é ç½®æ¥å¿:
说æï¼ä»å¿«é100æpostè¿æ¥çæ°æ®ï¼å¯ä»¥ä¿åå°æ°æ®åºï¼ä¹å¯ä»¥ä¿åå°æ¥å¿æ件ï¼
è¿éæ们éæ©ä¿åå°æ¥å¿æ件
log4j2.xml
<!--kuaidi100çæ¥å¿è®°å½è¿½å å¨-->
<RollingFile name="kd100LogRollingFile" fileName="${LOG_HOME}/kd100.log"
filePattern="${LOG_HOME}/logs/$${date:yyyy-MM}/kd100-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%file:%line] %-5level %logger{35} - %msg %n"/>
<Policies>
<SizeBasedTriggeringPolicy size="500 MB"/>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
å ï¼é ç½®æ件ï¼
kuaidi100:
key: KBAABBccDD11
customer: C1FAABBccDDAABBccDD49F97B706F2E
secret: 8e1AABBccDDAABBccDDAABBccDDce83
userid: 744aabbccddeeffgghhiibbdda3ba
#åè°å°å(åä¸çå®çåè°å°å)
url: http://www.lhdtest.net/api/express/callback
#å¼éè¡æ¿åºå解æåè½ä»¥åç©æµè½¨è¿¹å¢å ç©æµç¶æå¼
resultv2: 1
ä¸ï¼java代ç :
1,service/impl/ExpressServiceImpl.java
Â
@Service
public class ExpressServiceImpl implements ExpressService {
@Resource
private ConfigBeanValue configBeanValue;
@Resource
private ExpressMapper expressMapper;
@Resource
private ExpressDataMapper expressDataMapper;
private Logger loggerKd100 = LogManager.getLogger("kd100LogRollingFile");
@Override
public boolean subscribe(String code,String num) throws Exception {
// æækey
String key = configBeanValue.kd100Key;
String customer = configBeanValue.kd100Customer;
// æ¥å£åè°å°å
String callbackUrl = configBeanValue.kd100Url; //PropertiesReader.get("url");
// å¼å¯è¡æ¿åºå解æ
String resultv2 = configBeanValue.kd100Resultv2; //PropertiesReader.get("resultv2");
Express express = new Express();
SubscribeParameters subscribeParameters = new SubscribeParameters();
subscribeParameters.setCallbackurl(callbackUrl);
subscribeParameters.setPhone("17725390266");
subscribeParameters.setResultv2(resultv2);
SubscribeParam subscribeParam = new SubscribeParam();
subscribeParam.setParameters(subscribeParameters);
subscribeParam.setCompany(code);
subscribeParam.setNumber(num);
subscribeParam.setKey(key);
SubscribeReq subscribeReq = new SubscribeReq();
subscribeReq.setSchema(ApiInfoConstant.SUBSCRIBE_SCHEMA);
subscribeReq.setParam(new Gson().toJson(subscribeParam));
IBaseClient subscribe = new Subscribe();
// 订é
æ¨éæå¡
HttpResult httpResult = subscribe.execute(subscribeReq);
SubscribeResp response = new Gson().fromJson(httpResult.getBody(), SubscribeResp.class);
String returnCode = response.getReturnCode();
if("501".equals(returnCode)){
// éå¤è®¢é
ç请æ±ï¼ä¸æ¹å订é
æåçç¶æï¼åªä¿åæ¥æï¼ä»¥é²è¯¯æä½ï¼
express.setSubStatus(200);
}else{
express.setSubStatus(Integer.valueOf(returnCode));
}
express.setSubRequest(subscribeReq.getParam());
express.setSubResult(httpResult.getBody());
//å¾å°expressçç¸åºå段
express.setExpressNum(num);
express.setCompanyCode(code);
express.setState(-1);
//express.set
//æ·»å å°æ°æ®åº
int expressId = expressMapper.insertOneExpress(express);
//è¿å:
return true;
}
@Override
public SubscribeResp handleCallBack(HttpServletRequest request) {
// è·ååæ°
String param = request.getParameter("param");
String sign = request.getParameter("sign");
//åæ¥å¿:
//loggerKd100
loggerKd100.info("param:");
loggerKd100.info(param);
loggerKd100.info("sign:");
loggerKd100.info(sign);
//å¤çæ°æ®,add database
SubscribePushParamResp backResp = new Gson().fromJson(param, SubscribePushParamResp.class);
String expressNum = backResp.getLastResult().getNu();
Express express = expressMapper.selectOneExpressByExpressNum(expressNum);
Long expressId = express.getExpressId();
//æ¥è¯¢æ°æ®åºï¼
List<SubscribePushData> dataList = backResp.getLastResult().getData();
List<ExpressData> infoList = new ArrayList<>();
for (SubscribePushData data : dataList) {
ExpressData info = new ExpressData();
info.setDataTime(data.getFtime());
info.setExpressId(expressId);
info.setExpressNum(expressNum);
info.setContext(data.getContext());
infoList.add(info);
}
if(infoList.size() > 0){
// å
¥åºæä½åï¼å
å é¤sys_express_info表ä¸çæ°æ®ï¼åªä¿çææ°æ°æ®ã
//expressInfoMapper.deleteSysExpressInfoByNum(expressNum);
expressDataMapper.deleteExpressDataByExpressId(expressId);
for (ExpressData data : infoList) {
expressDataMapper.insertOneExpressData(data);
}
//expressInfoMapper.insertSysExpressBatch(infoList);
}
//æ´æ°ç¶æ
int state = Integer.parseInt(backResp.getLastResult().getState());
expressMapper.updateOneExpressState(expressId,state);
//è¿å:
SubscribeResp response = new SubscribeResp();
response.setResult(Boolean.TRUE);
response.setReturnCode("200");
response.setMessage("æå");
return response;
}
}
2,controller/ExpressController.java
@RestController
@RequestMapping("/express")
public class ExpressController {
@Resource
private ExpressService expressService;
//session详æ
@GetMapping("/subscribe")
@ResponseBody
public Result subscribe(@NotBlank(message="å¿«éå
¬å¸ç¼å·")@RequestParam("code") String code,
@NotBlank(message="è¿åç¼å·")@RequestParam("num") String num) throws Exception{
Map<String, Object> data = new HashMap<String, Object>();
boolean isIns = expressService.subscribe(code, num);
return Result.success(data);
}
/**
* å¿«é100åè°æ¥å£
* @param request
*/
@PostMapping("/callback")
public SubscribeResp callBack(HttpServletRequest request) throws Exception {
return expressService.handleCallBack(request);
}
}
3,ExpressMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yj.storeback.mapper.ExpressMapper">
<insert id="insertOneExpress" parameterType="com.yj.storeback.pojo.Express" useGeneratedKeys="true" keyProperty="expressId" >
insert into express(expressNum,companyCode,state,addTime,subStatus,subRequest,subResult)
values(
#{expressNum},#{companyCode},#{state},now(),#{subStatus},#{subRequest},#{subResult}
)
</insert>
<select id="selectOneExpressByExpressNum" resultType="com.yj.storeback.pojo.Express">
select * from express where expressNum=#{expressNum}
</select>
<update id="updateOneExpressState">
UPDATE express SET
state = #{state}
WHERE expressId=#{expressId}
</update>
</mapper>
4,ExpressDataMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yj.storeback.mapper.ExpressDataMapper">
<insert id="insertOneExpressData" parameterType="com.yj.storeback.pojo.ExpressData" useGeneratedKeys="true" keyProperty="dataId" >
insert into express_data(expressId,expressNum,dataTime,addTime,context)
values(
#{expressId},#{expressNum},#{dataTime},now(),#{context}
)
</insert>
<delete id="deleteExpressDataByExpressId" >
delete from express_data where expressId = #{expressId}
</delete>
</mapper>
5,ExpressService.java
public interface ExpressService {
public boolean subscribe(String code,String num) throws Exception;
public SubscribeResp handleCallBack(HttpServletRequest request);
}
6,ExpressMapper.java
@Repository
@Mapper
public interface ExpressMapper {
int insertOneExpress(Express express);
Express selectOneExpressByExpressNum(@Param("expressNum")String expressNum);
int updateOneExpressState(@Param("expressId")Long expressId, @Param("state")int state);
}
7,ExpressDataMapper.java
@Repository
@Mapper
public interface ExpressDataMapper {
int insertOneExpressData(ExpressData expressData);
int deleteExpressDataByExpressId(@Param("expressId")Long expressId);
}
å «ï¼æµè¯ææ:
1订é
访é®:
http://www.lhdtest.net/api/express/subscribe?code=shunfeng&num=SF1322339353060
è¿å:
2,æ¥æ¶æ¨é:
æ¥çæ¥å¿:
[lhdpc@blog logs]$ tail -100 /data/logs/nginxlogs/store.access_log
æ¥å¿å¦ä¸:
...
120.92.182.60 - - [29/Jan/2022:16:55:17 +0800] "POST /api/express/callback HTTP/1.1" 200 0 "-" "HttpComponents/1.1"
...
ä¹ï¼æ¥çspringbootççæ¬:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.5.4)