最近公司准备接入顺丰接口,网上例子不太明确,大家可以参考一下,调用方式是http:
1.api调用方法
private static final String URI="http://bsp-ois.sit.sf-express.com:9080/bsp-ois/sfexpressService"; //http访问路径
private static final String CODE=""; //顾客编码
private static final String CHECKWORD=""; //校验码
public List<SF> sfRouteService (String orderNumber,String phone) { //传入运单号和手机号后四位(收件人和发件人都可)
String xml="<Request service='RouteService' lang='zh-CN'>"+
"<Head>"+CODE+"</Head>"+
"<Body>"+
"<RouteRequest tracking_type='1' method_type='1' tracking_number='"+orderNumber+"' check_phoneNo='"+phone+"'/>"+
"</Body>"+
"</Request>";
OutputStream os=null;
InputStream is=null;
XMLStreamReader xmlStreamReader=null; //xml解析
List<SF> list=null;
try {
URL url = new URL(URI);
String verifyCode = SFUtil.md5EncryptAndBase64(xml + CHECKWORD); //加密xml和检验码
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setConnectTimeout(10000);
conn.setReadTimeout(10000);
os = conn.getOutputStream();
os.write(("xml=" + xml + "&verifyCode=" + verifyCode).getBytes("utf8")); //向api方面传入信息
int responseCode = conn.getResponseCode();
if (200 == responseCode) { //200 :成功
is = conn.getInputStream(); //获取api输入流
//xml解析
XMLInputFactory factory = XMLInputFactory.newInstance();
xmlStreamReader=factory.createXMLStreamReader(is) ;
list=new ArrayList<SF>();
while (xmlStreamReader.hasNext()) {
int type = xmlStreamReader.next();
if (type == XMLStreamConstants.START_ELEMENT) { // 开始节点
String name = xmlStreamReader.getName().toString();
if (name.equals("Route")) {
SF sf = new SF();
if("remark".equals(xmlStreamReader.getAttributeLocalName(0))){
sf.setRemark(xmlStreamReader.getAttributeValue(0));
}
if("accept_time".equals(xmlStreamReader.getAttributeLocalName(1))){
sf.setAcceptTime(xmlStreamReader.getAttributeValue(1));
}
if("accept_address".equals(xmlStreamReader.getAttributeLocalName(2))){
sf.setAcceptAddress(xmlStreamReader.getAttributeValue(2));
}
if("opcode".equals(xmlStreamReader.getAttributeLocalName(3))){
sf.setOpcode(xmlStreamReader.getAttributeValue(3));
}
//添加到对象中
list.add(sf);
}
}
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XMLStreamException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
//关闭流
try {
if(xmlStreamReader!=null){
xmlStreamReader.close();
}
} catch (XMLStreamException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(is!=null){
is.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(os!=null){
os.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return list;
}
2.加密方法
/**
* MD5 - base64
* @param str
* @return
*/
public static String md5EncryptAndBase64(String str) {
return encodeBase64(md5Encrypt(str));
}
/**
* md5
* @param encryptStr
* @return
*/
private static byte[] md5Encrypt(String encryptStr) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(encryptStr.getBytes("utf8"));
return md5.digest();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* base64
* @param b
* @return
*/
private static String encodeBase64(byte[] b) {
sun.misc.BASE64Encoder base64Encode = new BASE64Encoder();
String str = base64Encode.encode(b);
return str;
}
3.实体
private String remark;//路由详细
private String acceptTime;//路由时间
private String acceptAddress;//路由当前地址
private String opcode;//操作码