java丰桥顺丰路由接口调用

本文详细介绍了如何通过HTTP调用顺丰API查询物流信息,包括调用方法、加密过程及实体类设计,为开发者提供了一个清晰的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司准备接入顺丰接口,网上例子不太明确,大家可以参考一下,调用方式是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;//操作码
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值