概述
今天做了下对接顺丰的接口,对接的是http的接口,这个没什么说的,主要记录下返回的xml格式数据,并解析
import java.io.ByteArrayInputStream;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;import com.alibaba.fastjson.JSONObject;
/**
* 顺丰类
*
* @author admin
*
*/
public class ShunFengService {
// 对接接口,这里是开发环境
private static final String url1 = "http://bsp-ois.sit.sf-express.com:9080/bsp-ois/sfexpressService";
private static final String url2 = "https://bsp-ois.sit.sf-express.com:9443/bsp-ois/sfexpressService";
// 对接秘钥
private static final String checkword = "";/**
* 请求顺丰接口汇总 :1下单2查询快递信息3查询费用
*
* @param map
* @param type
* @return
* @throws Exception
*/
public static JSONObject sfExpressMethod(Map<String, String> map, int type) throws Exception {
String xml = "";
switch (type) {
// 下订单
case 1:
xml = orderRequestXml(map);
break;
// 查询快递信息
case 2:
xml = queryRequestXml(map);
break;
// 查询快递费用
case 3:
xml = billRequestXml(map);
break;
default:
break;
}
return getResultExpress(xml);
}/**
* 请求顺丰接口,处理xml格式的数据
*
* @param xml
* @return
* @throws Exception
*/
public static JSONObject getResultExpress(String xml) throws Exception {
String code = xml + checkword;
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(code.getBytes("UTF-8"));
String bs = new sun.misc.BASE64Encoder().encode(md5.digest());
Map<String, String> map = new HashMap<String, String>();
map.put("xml", xml);
map.put("verifyCode", bs);
String result = HttpClientUntil.doPost(url1, map);
// 处理返回的xml格式的数据
JSONObject obj = new JSONObject();
SAXReader reader = new SAXReader();
Document doc = reader.read(new ByteArrayInputStream(result.getBytes("UTF-8")));
Node node = doc.selectSingleNode("//Response/Head");
String res = node.getText();
if ("ERR".equals(res)) {
node = doc.selectSingleNode("//Response/ERROR");
res = node.getText();
obj.put("code", 400);
obj.put("msg", res);
return obj;
}
node = doc.selectSingleNode("//Response/Body");
Element element = (Element) node;
obj = treeWalk(element);
return obj;
}/**
* 循环解析xml获取节点数据
* 包括有jsonArray循环的
* @param element
* @param o
* @return
*/
public static JSONObject treeWalk(Element element) {
JSONObject obj = new JSONObject();
List<Attribute> list = element.attributes();
for (Attribute att : list) {
obj.put(att.getName(), att.getValue());
}
Map<String, List<JSONObject>> subNodes = new HashMap();
for (int i = 0, size = element.nodeCount(); i < size; i++) {
Node node = element.node(i);
String name = node.getName();
Element el = (Element) node;if (node instanceof Element) {
JSONObject newNode = treeWalk(el);
List<JSONObject> _subNodes = subNodes.get(name);
if (_subNodes == null) {
_subNodes = new ArrayList();
subNodes.put(name, _subNodes);
}
_subNodes.add(newNode);
} else {
obj.put(name, node.getText());
}
}for (String key : subNodes.keySet()) {
List<JSONObject> _subNodes = subNodes.get(key);
if (_subNodes.size() > 1) {
JSONArray jsonArray = new JSONArray();
for (JSONObject o : _subNodes) {
jsonArray.add(o);
}
obj.put(key, jsonArray);
} else {
obj.put(key, _subNodes.get(0));
}
}return obj;
}/**
* 查询快递信息xml
*
* @param map
* @return
*/
public static String queryRequestXml(Map<String, String> map) {
StringBuffer bf = new StringBuffer();
bf.append("<?xml version="1.0" encoding="utf-8"?>");
bf.append("<Request service="RouteService" lang="zh-CN">");
bf.append("<Head>BSPdevelop</Head>");
bf.append("<Body>");
bf.append("tracking_type='1' method_type='1' ");
bf.append("tracking_number='" + map.get("number") + "'/>");
bf.append("</Body></Request>");
return bf.toString();
}/**
* 订单费用xml
*
* @param map
* @return
*/
public static String billRequestXml(Map<String, String> map) {
StringBuffer bf = new StringBuffer();
bf.append("<?xml version="1.0" encoding="utf-8"?>");
bf.append("<Request service="QuerySFWaybillService" lang="zh-CN">");
bf.append("<Head>BSPdevelop</Head>");
bf.append("<Body>");
bf.append("<Waybill type='" + map.get("type") + "' ");
bf.append("waybillNo='" + map.get("waybillNo") + "' ");
bf.append("orderId='" + map.get("orderId") + "'/>");
bf.append("</Body></Request>");
return bf.toString();
}/**
* 订单xml
*
* @param map
* @return
*/
public static String orderRequestXml(Map<String, String> map) {
StringBuffer bf = new StringBuffer();
bf.append("<?xml version="1.0" encoding="utf-8"?>");
bf.append("<Request service="OrderService" lang="zh-CN">");
bf.append("<Head>BSPdevelop</Head>");
bf.append("<Body>");
bf.append("<Order orderid="" + map.get("orderId") + "" ");
bf.append("express_type='1' is_gen_bill_no='1' ");
bf.append("j_province='" + map.get("jProvince") + "' ");
bf.append("j_city='" + map.get("jCity") + "' ");
bf.append("j_company='" + map.get("jCompany") + "' ");
bf.append("j_contact='" + map.get("jContact") + "' ");
bf.append("j_tel='" + map.get("jTel") + "' ");
bf.append("j_address='" + map.get("jAddress") + "' ");bf.append("d_province='" + map.get("dProvince") + "' ");
bf.append("d_city='" + map.get("dCity") + "' ");
bf.append("d_company='" + map.get("dCompany") + "' ");
bf.append("d_contact='" + map.get("dContact") + "' ");
bf.append("d_tel='" + map.get("dTel") + "' ");
bf.append("d_address='" + map.get("dAddress") + "' ");
bf.append("custid='" + map.get("custId") + "' ");
bf.append("parcel_quantity='1' pay_method='1' > ");
bf.append("<Cargo name='文件' ></Cargo>");
bf.append("</Order></Body></Request>");
return bf.toString();
}
}
顺丰返回的数据格式:
<?xml version="1.0" encoding="utf-8"?><Response service="OrderService">
<Head>OK</Head>
<Body>
<OrderResponse filter_result="2"
destcode="571"
mailno="444070044141"
origincode="571"
orderid="zhonghui-20190117001">
<rls_info rls_errormsg="444070044141:" invoke_result="OK" rls_code="1000">
<rls_detail waybillNo="444070044141"
sourceCityCode="571"
sourceDeptCode="571PB"
sourceTeamCode="019"
destCityCode="571"
destDeptCode="571PB"
destDeptCodeMapping="H12"
destTeamCode="013"
destRouteLabel="571PB-H12"
proName="顺丰标快"
cargoTypeCode="C201"
limitTypeCode="T4"
expressTypeCode="B1"
codingMapping="6C"
codingMappingOut="D2"
xbFlag="0"
printFlag="000000000"
twoDimensionCode="MMM={'k1':'','k2':'571PB','k3':'013','k4':'T4','k5':'444070044141','k6':''}"
proCode="T4"
printIcon="00000000"/>
</rls_info>
</OrderResponse>
</Body>
</Response>
最后
以上就是舒心百褶裙为你收集整理的对接顺丰接口相关的全部内容,希望文章能够帮你解决对接顺丰接口相关所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复