JavaWeb企业级项目中接入顺丰官方API实现物流实时查询(亲测有效)
由于现在顺丰与快递100闹掰了,所以使用快递一百已经查不到顺丰的物流信息了,包括快递鸟等,现在想要在项目中实现顺丰快递的物流查询只能用顺丰官方API来查询,然而这个官方的API并没有快递一百那些接口那么容易,需要很复杂的一套流程,并且顺丰用的返回形式都是XML文件,就需要设计到XML文件的修改与写入,想要接入顺丰API需要先下载顺丰的Java端的接口文档(里面包含了接口代码和jar包),然后导入到项目中,包括jar包!
注意:查询物流的路由信息需要先在丰桥上接入API并且申请一个月结卡号!接入成功后,通过Api只能查询月结卡号下的订单!
其他的订单会查不到!(虽然很复杂,但是没办法,顺丰查询只能这样啦)
(关于更多接口中的具体的参数请——点击查看)
首先看看顺丰API文档的里的结构
然后进入第一个文件夹
把这些都导入到项目中,java-demo中提供了查询的方法,并且顺丰官方提供一个测试账号,可以在main方法中使用测试账号查询测试订单,如果没有问题就进入后面的步骤!
(有的人导入后会发现
CallExpressServiceTools client = CallExpressServiceTools.getInstance()
方法报错,解决方法——点击查看
)
还有个要注意的地方就是,我把xml文件放在了项目中resources资源文件夹中,所以写路径的时候要注意点,具体的书写方式参考下面的代码~
下面就把我写的接口代码贡献出来~
package com.sixmac.platform.service.impl;import com.sf.csim.express.service.CallExpressServiceTools;
import com.sixmac.platform.service.ShunFengService;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.json.JSONObject;
import org.json.XML;
import org.springframework.stereotype.Service;
import java.io.*;
import java.util.List;@Service
public class ShunFengServiceImpl implements ShunFengService {//resources资源目录下 tomcat中对应的路径String path = this.getClass().getClassLoader().getResource("./txt/shunfeng.xml").getPath();/*** * @param num 传过来的运单号* @return* @throws IOException* @throws DocumentException*/@Overridepublic String findShunFeng(String num) throws IOException, DocumentException {String reqXml = "";xmlUpdate(num);try {InputStream is = new FileInputStream(path);//路由查询-通过订单号System.out.println();byte[] bs = new byte[is.available()];is.read(bs);reqXml = new String(bs);JSONObject xmlJSONObj = XML.toJSONObject(reqXml);} catch (Exception e) {}//丰桥平台公共测试账号//SLKJ2019//FBIqMkZjzxbsZgo7jTpeq7PD8CVzLT4QString reqURL = "https://bsp-oisp.sf-express.com/bsp-oisp/sfexpressService";String clientCode = "";//此处替换为您在丰桥平台获取的顾客编码String checkword = "";//此处替换为您在丰桥平台获取的校验码CallExpressServiceTools client = CallExpressServiceTools.getInstance();String myReqXML = reqXml.replace("SLKJ2019", clientCode);//这里不需要改动System.out.println("请求报文:" + myReqXML);String respXml = client.callSfExpressServiceByCSIM(reqURL, myReqXML, clientCode, checkword);if (respXml != null) {System.out.println("---------------------------------------");System.out.println("返回报文XML格式: " + respXml);System.out.println("返回报文Json: " + XML.toJSONObject(respXml));System.out.println("---------------------------------------");}JSONObject json = XML.toJSONObject(respXml);String s = json.toString();System.out.println(s);return s;}/*** 接收传过来的运单号,然后对路由查询的XML文件进行修改与写入* @param num* @throws DocumentException* @throws IOException*/public void xmlUpdate(String num) throws DocumentException, IOException {System.out.println(path);/* 2.java修改xml */// 创建SAXReader的对象SAXReader sr = new SAXReader();// 关联xmlDocument document = sr.read(path);// 获取根元素Element root = document.getRootElement();// 获取Body标签(不能直接获取Body下的RouteRequest标签)Element b = root.element("Body");System.out.println(b.getName());System.out.println(b.getStringValue());// b.addAttribute() 增加属性//获取Body下的RouteRequest标签Element req = b.element("RouteRequest");//获取RouteRequest标签的tracking_number属性Attribute number = req.attribute("tracking_number");//设置tracking_number属性的值(修改XML文件中的订单号,改为需要查询的订单号)number.setText(num);System.out.println(number.getValue());System.out.println("成功");//----------到这里已经修改完成了,可以直接打印在控制显示,但是xml的实体并没有改变,如果想要改变实体文件内容,需要通过流写到xml文件中---------// 创建输出流Writer osWrite = new OutputStreamWriter( new FileOutputStream(path));OutputFormat format = OutputFormat.createPrettyPrint(); // 获取输出的指定格式format.setEncoding("UTF-8");// 设置编码 ,确保解析的xml为UTF-8格式XMLWriter writer = new XMLWriter(osWrite, format);// XMLWriter// 指定输出文件以及格式writer.write(document);// 把document写入xmlFile指定的文件(可以为被解析的文件或者新创建的文件)writer.flush();writer.close();}
}
方法里的代码基本上就这么多,具体的参数自己对号入座就行!
最后附上一张查询成功后的图,返回的也是XML格式,但是可以转换成json格式~
The end !!!
JavaWeb企业级项目中接入顺丰官方API实现物流实时查询(亲测有效)相关推荐
- 使用H5Stream实现rtsp视频流播放,在Vue项目中 (无插件、可多视频源播放、亲测可用)
本文主要介绍用H5Stream 在Web页面播放摄像头的RTSP视频流,从0到1的过程.包括WebSocket代理.h5ss.bat文件 运行一会就自己卡死了.H5ss服务死掉自动定时重启的脚本 等可 ...
- cocos2dx项目中接入FairyGUI
一.参考链接 本篇文章参考链接 二.新建cocos2dx项目 1.找到cocos2dx的项目创建脚本文件: 以官方的cocos2d-x-3.17.2为例,项目创建的脚本文件在该目录下:cocos2d- ...
- 在ts项目中接入live2d-widget.js , 在网页中展示二次元老婆
原文链接: 在ts项目中接入live2d-widget.js , 在网页中展示二次元老婆 上一篇: tailwindcss 简单场景和官方案例 下一篇: git Submodule 将别人的模型文件通 ...
- 分析洋葱模型实现原理,在自己项目中接入洋葱模型
分析洋葱模型实现原理,在自己项目中接入洋葱模型 上一篇文章初识洋葱模型,分析中间件执行过程,浅析koa中间件源码简单的介绍了 基于 koa 的洋葱模型的中间件的运行过程,了解了一下中间件的写法 不过基 ...
- html调用腾讯地图定位当前位置,vue web项目中调用腾讯地图API获取当前位置的经纬度...
vue web项目中调用腾讯地图API获取当前位置的经纬度 vue web项目中调用腾讯地图API获取当前位置的经纬度 在main.js 中添加一下代码 import axios from 'axio ...
- 在vue项目中使用高德地图JS API
在vue项目中使用高德地图JS API,而不是amap依赖包~ 一. 必做的准备工作 注册账号并申请key 首先,注册开发者账号,成为高德开放平台开发者 登陆之后,在进入「应用管理」 页面「创建新应用 ...
- 基于springboot项目中使用docker-compose+es+kibana+logstash+mysql 提高数据查询效率
基于springboot项目中使用docker-compose+es+kibana+logstash+mysql 提高数据查询效率 1.拉取logstash,kibana,es,mysql镜像 #命令 ...
- 如何正确的在项目中接入微信JS-SDK
微信JS-SDK的功能 如果你点进来,那么我相信你应该知道微信的JS-SDK可以用来做什么了.微信的官方文档描述如下. 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. ...
- 在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)...
最近公司的大厅要重做,我协助主程一起制作新大厅和新框架,前面制作的编辑器也派上了用场.等全部功能做完后我会再写一个复盘,这两天主程在忙于写热更新的功能,所以把接入分享SDK功能的任务交给了我,Shar ...
最新文章
- linux设备模型,bus,device,driver,实验遇到的问题
- 回溯法在解决八皇后问题中的应用
- html网址怎么收录,新站如何快速收录 让新网站快速被收录的几点技巧
- python底层源码_大师兄的Python机器学习笔记:统计学基础之底层代码实现(一)...
- 中小企业老板辛苦一整年,为什么就赚不到钱?
- java server 参数_java serversocket参数详解
- 孙子算经 之 物不知数(韩信点兵)
- linux指定行添加内容,Linux sed命令在指定行前后添加内容
- win10笔记本网络重置后没有网络连接了
- python打开桌面文件_python整理桌面文件
- 气质数据提取物质信息并批量查阅、翻译
- 店盈通:拼多多如何看到关键词进店?
- DIY蓝牙键盘(2) - 理解HID报文描述符
- cv.add cv.addWeighted 的区别
- apk加固 4个加固平台||整合||对App加固可以有效防止移动应用被破解、二次打包等
- 运行微信小程序出现的问题
- 《python编程快速上手——让繁琐的工作自动化》,4.10.1逗号代码
- 怎么用PS制作散射效果
- mysql mof提权_MySQL_MOF提权
- AutoCAD 2010中文版详细安装及激活方法图文教程
热门文章
- win7如何安装mysql5.7_WIN764安装mysql5.7
- Maya动画1:基础知识小球弹跳
- IM开发——群组创建业务设计
- 如何查看服务器系统时间,服务器时间相关(硬件时间,系统时间,时区时间)...
- 近红外光谱预处理方法
- python程序设计基础与应用董付国电子版_Python 程序设计基础(董付国 著)完整版PDF_IT教程网...
- Remote Server returned '420 4.2.0 Recipient deferred because there is no Mdb'
- GreenPlum的学习心得和知识总结(三)|Greenplum数据库快速入门
- 50台机器无盘服务器,以50台机器小吧为例看深度无盘快速布署的那些事.doc
- 优秀的软文标题应该怎么起才能吸引人?