圆通开放平台电子面单下单接口
语言JAVA
作者:不停留的风
1、查询需要下单的圆通订单数据
2、把需要进行电子面单下单的数据转成XML格式
3、传输数据
4、获取服务端的反馈信息
5、把反馈的信息 进行存储
完整代码,不清楚的请私信或者留言:
package servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.tomcat.util.codec.binary.Base64;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.sun.xml.internal.txw2.Document;
import unit.FYOrder;
import unit.SFAPI;
import dao.Fy_OrderDao;
//访问地址 http://localhost/YTO/YTOxiadan
@WebServlet("/YTOxiadan")
public class YTOApi extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Fy_OrderDao fod=new Fy_OrderDao();
List<FYOrder> list=fod.findAll();
for(int aa=0;list.size()>aa;aa++){
response.setContentType("application/json ;charset=UTF-8");
request.setCharacterEncoding("utf-8");
String apiUrl = "http://openapi.yto.net.cn/service/e_order_create/v1/R9Wao5";
String clientId = "K21000119";
String customerId = "K21000119";
String parternId = "u2Z1F7Fh";
//String mailNo = "5555555358";//申请但没有使用过的电子面单号
String id=list.get(aa).getid(); //物流订单号
try{
//打开连接
URL url = new URL(apiUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
//数据
StringBuilder xmlBuilder = new StringBuilder();
xmlBuilder.append("<RequestOrder>");
xmlBuilder.append(" <clientID>"+clientId+"</clientID>");
xmlBuilder.append(" <logisticProviderID>YTO</logisticProviderID>");
xmlBuilder.append(" <customerId>"+customerId+"</customerId>");
xmlBuilder.append(" <txLogisticID>"+id+"</txLogisticID>");
xmlBuilder.append(" <tradeNo>"+clientId+"</tradeNo>");
xmlBuilder.append(" <totalServiceFee>1</totalServiceFee>"); //保值金额
xmlBuilder.append(" <codSplitFee>1</codSplitFee>");//物流公司分润
String sss="货到付款";
String spare7=list.get(aa).getspare7();
String total_price=list.get(aa).gettotal_price();
if(spare7.equals(sss)){
xmlBuilder.append(" <orderType>4</orderType>"); //订单类型(0-COD,1-普通订单,2-便携式订单,3-退货单,4-到付)
xmlBuilder.append(" <agencyFund>"+total_price+"</agencyFund>"); //代收金额
}else{
xmlBuilder.append(" <orderType>1</orderType>"); //订单类型(0-COD,1-普通订单,2-便携式订单,3-退货单,4-到付)
xmlBuilder.append(" <agencyFund>0</agencyFund>"); //在线支付
}
xmlBuilder.append(" <serviceType>0</serviceType>"); //服务类型(1-上门揽收, 0-自己联系)。默认为0
xmlBuilder.append(" <flag>0</flag>");
xmlBuilder.append(" <goodsValue>"+total_price+"</goodsValue>"); //商品金额
xmlBuilder.append(" <itemsValue>1</itemsValue>");//货物价值
xmlBuilder.append(" <insuranceValue>1</insuranceValue>"); //保值金额
xmlBuilder.append(" <special>1</special>"); //商品类型
xmlBuilder.append(" <remark>请拿轻放,优先配送!</remark>");//备注
// xmlBuilder.append(" <type>1</type>");
// xmlBuilder.append(" <totalValue>1</totalValue>");
// xmlBuilder.append(" <itemsWeight>1</itemsWeight>");
// xmlBuilder.append(" <packageOrNot>1</packageOrNot>");
// xmlBuilder.append(" <orderSource>1</orderSource>");
xmlBuilder.append(" <sender>"); //发件人
xmlBuilder.append(" <name>宋老师</name>");
xmlBuilder.append(" <postCode>315400</postCode>");
xmlBuilder.append(" <phone>057462966578</phone>");
xmlBuilder.append(" <mobile>13306640130</mobile>");
xmlBuilder.append(" <prov>浙江省</prov>");
xmlBuilder.append(" <city>宁波市,余姚区</city>");
xmlBuilder.append(" <address>宁波市余姚河姆渡镇罗江寺慈线新世纪塑复铜管有限公司</address>");
xmlBuilder.append(" </sender>");
xmlBuilder.append(" <receiver>"); //收件人
String user_name=list.get(aa).getuser_name();
xmlBuilder.append(" <name>"+user_name+"</name>");
xmlBuilder.append(" <postCode>000000</postCode>");
xmlBuilder.append(" <phone></phone>");
String user_phone=list.get(aa).getuser_phone();
xmlBuilder.append(" <mobile>"+user_phone+"</mobile>");
String user_province=list.get(aa).getuser_province();
xmlBuilder.append(" <prov>"+user_province+"</prov>");
String user_city=list.get(aa).getuser_city();
String user_area=list.get(aa).getuser_area();
xmlBuilder.append(" <city>"+user_city+","+user_area+"</city>");
String user_address=list.get(aa).getuser_address();
xmlBuilder.append(" <address>"+user_address+"</address>");
xmlBuilder.append(" </receiver>");
xmlBuilder.append(" <items>");
xmlBuilder.append(" <item>");
String package_info=list.get(aa).getpackage_info();
xmlBuilder.append(" <itemName>"+package_info+"</itemName>"); //商品名称
String quantity=list.get(aa).getquantity();
xmlBuilder.append(" <number>"+quantity+"</number>");
xmlBuilder.append(" <itemValue>"+total_price+"</itemValue>"); //商品价格
xmlBuilder.append(" </item>");
xmlBuilder.append(" </items>");
xmlBuilder.append("</RequestOrder>");
// System.out.print("---xmlBuilder:"+xmlBuilder);
//加密
MessageDigest messagedigest = MessageDigest.getInstance("MD5");
messagedigest.update((xmlBuilder.toString() + parternId).getBytes("UTF-8"));
byte[] abyte0 = messagedigest.digest();
String data_digest = new String(Base64.encodeBase64(abyte0));
//开始时间
long a = System.currentTimeMillis();
//查询
String queryString = "logistics_interface=" + URLEncoder.encode(xmlBuilder.toString(), "UTF-8")
+ "&data_digest="+ URLEncoder.encode(data_digest,"UTF-8")
+ "&clientId=" + URLEncoder.encode(clientId, "UTF-8");
out.write(queryString);
out.flush();
out.close();
//获取服务端的反馈
String responseString = "";
String strLine = "";
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
while ((strLine = reader.readLine()) != null) {
responseString += strLine + "\n";
}
in.close();
//结束时间
long b = System.currentTimeMillis();
//响应时间
long c = b - a;
System.err.print("响应时间:"+c + "ms\n");
System.err.print("请求的返回信息:"+responseString);
//测试
org.dom4j.Document doc = null;
try {
doc = DocumentHelper.parseText(responseString);
Element rootElt = doc.getRootElement();
//物流公司ID
String logisticProviderID = rootElt.elementTextTrim("logisticProviderID");
//运单号
String mailNo = rootElt.elementTextTrim("mailNo");
//twoDimensionCode
String qrCode = rootElt.elementTextTrim("qrCode");
//orderid
String txLogisticID = rootElt.elementTextTrim("txLogisticID");
SFAPI sfapi=new SFAPI();
sfapi.setWaybillNo(mailNo);
sfapi.settwoDimensionCode(qrCode);
sfapi.setorderId(txLogisticID);
Fy_OrderDao fydao=new Fy_OrderDao();
fydao.insert2(sfapi);
try {
Thread.sleep(3 * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //设置暂停的时间 3秒
// Iterator iterss = rootElt.elementIterator("distributeInfo");
// Element recordEless = (Element) iterss.next();
// String result = recordEless.elementTextTrim("shortAddress");
// System.out.println("result:" + result);
} catch (Exception e) {
// TODO: handle exception
}
}catch(Exception e){
e.printStackTrace();
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}