java丰桥顺丰路由接口调用

最近公司准备接入顺丰接口,网上例子不太明确,大家可以参考一下,调用方式是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;//操作码
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java接入丰桥并实现下单查询功能可以通过以下步骤完成: 首先,需要引入丰桥SDK依赖,可以通过在项目的pom.xml文件中添加以下代码引入丰桥SDK: ```xml <dependency> <groupId>com.sf</groupId> <artifactId>sf-express-api-sdk</artifactId> <version>1.0.0</version> </dependency> ``` 然后,在代码中调用丰桥SDK提供的接口来实现下单和查询功能。下单功能可以通过调用`com.sf.api.client.SfExpressServiceClient`类的`createOrder`方法来创建订单,传入相应的参数,如发货人信息、收货人信息、包裹详情等。示例代码如下: ```java SfExpressServiceClient client = new SfExpressServiceClient(); CreateOrderRequest request = new CreateOrderRequest(); request.setShipperName("发货人姓名"); request.setShipperMobile("发货人手机号码"); // 更多发货人信息设置 request.setConsigneeName("收货人姓名"); request.setConsigneeMobile("收货人手机号码"); // 更多收货人信息设置 CreateOrderResponse response = client.createOrder(request); ``` 查询功能可以通过调用`com.sf.api.client.SfExpressServiceClient`类的`queryOrder`方法来查询订单状态,传入相应的参数,如订单号、客户订单号等。示例代码如下: ```java SfExpressServiceClient client = new SfExpressServiceClient(); QueryOrderRequest request = new QueryOrderRequest(); request.setOrderId("订单号"); // 更多查询参数设置 QueryOrderResponse response = client.queryOrder(request); ``` 以上就是使用Java接入丰桥并实现下单查询功能的简要步骤。需要注意的是,具体的参数设置和接口调用方式可能会有所不同,可以参考丰桥提供的官方文档进行具体实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值