圆通电子面单下单接口
官方文档:http://open.yto.net.cn/openplatform/doc
接口均采用Http传输协议。 Get请求用于测试是否可以连通圆通接口服务器,在浏览器访问以下相关接口地址,如果返回success则证明接口访问正常。 数据传输必须用post请求
logistics_interface里有很多字段,官方文档里有详细描述
源码
public class YTODemo {
private String ReqURL="请求地址";
private String partnerId = "你的商家秘钥";
public String YTO(String logistics_interface) throws Exception{
Map<String, String> params = new HashMap<String, String>();
params.put("logistics_interface",logistics_interface);
params.put("data_digest", encrypt(logistics_interface, partnerId,"UTF-8"));
params.put("clientId", "K21000119");
params.put("type", "offline");
String result=sendPost(ReqURL, params);
return result;
}
/**
* MD5加密
*/
private byte[] MD5(String str) throws Exception {
MessageDigest md5 = java.security.MessageDigest.getInstance("MD5");
byte[] bytes = md5.digest(str.getBytes());
return bytes;
}
/**
* base64编码
*/
private String base64(byte[] str) throws UnsupportedEncodingException{
String encoded = Base64.encode(str);
return encoded;
}
/*
编码转换
*/
private String urlEncoder(String str, String charset) throws UnsupportedEncodingException{
String result = URLEncoder.encode(str, charset);
return result;
}
/**
* 签名生成
*/
private String encrypt (String logistics_interface, String partnerId, String charset) throws UnsupportedEncodingException, Exception
{
if (partnerId != null)
{
return urlEncoder(base64(MD5(logistics_interface + partnerId)),charset);
}
return urlEncoder(base64(MD5(logistics_interface + partnerId)),charset);
}
/**
* 发送POST请求
*/
private String sendPost(String url, Map<String, String> params) {
OutputStreamWriter out = null;
BufferedReader in = null;
StringBuilder result = new StringBuilder();
try {
URL realUrl = new URL(url);
HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// POST方法
conn.setRequestMethod("POST");
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.connect();
// 获取URLConnection对象对应的输出流
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
// 发送请求参数
if (params != null) {
StringBuilder param = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
if(param.length()>0){
param.append("&");
}
param.append(entry.getKey());
param.append("=");
param.append(entry.getValue());
System.out.println(entry.getKey()+":"+entry.getValue());
}
System.out.println("param:"+param.toString());
out.write(param.toString());
}
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result.toString();
}
}
报文拼接(需要其他字段自行添加):
JSONObject YTO = new JSONObject();
String txLogisticID = ;
YTO.put(“clientID”, );//商家代码
YTO.put(“logisticProviderID”, );//物流公司ID
YTO.put(“customerId”, );//商家代码
YTO.put(“txLogisticID”, );//物流单号
YTO.put(“orderType”, “”);
YTO.put(“serviceType”, “”);
JSONObject Sender = new JSONObject();
Sender.put(“name”, );//
Sender.put(“phone”, “”);
Sender.put(“prov”, );
Sender.put(“city”,);
Sender.put(“address”,);
JSONObject receiver = new JSONObject();
receiver.put(“name”,);
receiver.put(“phone”, );
receiver.put(“prov”, );
receiver.put(“city”,);
receiver.put(“address”, );
JSONObject items = new JSONObject();
JSONArray itemsw = new JSONArray();
for (商品) {
JSONObject item = new JSONObject();
item.put(“itemName”, decl_po_dtl.getgName());
item.put(“number”, decl_po_dtl.getQty());
itemsw.add(item);
}
items.put(“item”, itemsw);
YTO.put(“sender”, Sender);
YTO.put(“receiver”, receiver);
YTO.put(“items”, items);
JSONObject logistics_interface = new JSONObject();
logistics_interface.put(“RequestOrder”, YTO);
然后把logistics_interface,json转xml就OK了