HTTP POST请求 Java代码构建方式

接口文档

1、 关于接口

接口为标准的 HTTP POST 协议,目前只开放了保税订单的创建、状态查询,直邮订单的创建、状态查询,保税商品的库存查询。

测试环境地址:http://119.29.6.201:8068/

测试环境的帐号:02010324密钥112233

测试环境联调通过之后,需要向深圳汇通天下物流有限公司索要正式的地址、帐号和密钥。

调用接口的时候需要传入以下参数:

id : 帐号,测试时使用 02010324

method : 需要调用的功能,具体请参考各项接口说明

returnStyle : 要求返回的数据格式, 可以传入 xml 或者 json ,需要注意的是,传入的复杂内容须为 xml ,暂时不支持 json 的传入参数。

datetime : 当前时间,传入的格式为: yyyyMMddHHmmss 例:19970102121314,为了数据安全,请保证传入的时间跟服务器时间保持在 1 个小时之内,为了保证安全性,超过范围,服务会拒绝服务。

content : 数据内容,需BASE64编码

verify : 数据效验码,用于验证数据安全和完整性,生成规则为 md5(id + datetime + base64content +密钥)

Xml

返回的数据:

 

<Result>

<Msg>运单预报成功</Msg>

<State>1</State>

<Data>

数据主体,可能是对象,也可能是单纯的数据

</Data>

<OpCode>0</OpCode>

</Result>

 

Json

{

"Msg":"运单预报成功",

"State":1,"Data":数据主体,可能是对象,也可能是单纯的数据,

"OpCode":0

}

返回的数据中,如果成功的话State应该是返回 1 Msg只是提示信息,调用失败的话State -1Msg返回的是错误信息 OpCode 操作类型, 作为保留字段

Data(内容主体) 则是根据不同的功能返回对应的对象

2、 接口说明

1) 订单预报接口

传入参数:

method : order.predict | 订单预报

content

订单信息 ShipmentRequest

参数名

必录

数据类型

注释/说明

ReferenceId

Y

varchar(25)

客户单号

Server

Y

varchar(16)

走货渠道

Amount

Y

int

申报数量

UnitPrice

Y

Decimal(16,2)

申报单价 必须大于零

TotalPrice

Y

Decimal(16,2)

申报总价

Currency

Y

varchar(16)

币种

Description

Y

varchar(100)

申报品名

DescriptionCn

Y

varchar(100)

中文品名

IsBattery

Y

Int

是否电池 0:否,1:是,默认为 0

BatteryLabel

Y/N

varchar(200)

电池标号 当为电池件是,为必录项

BatteryDescription

Y/N

Varchar(200)

电池描述 当为电池件是,为必录项

PackageType

Y

varchar(2)

包裹类型 01:文件, 02:包裹

AirwayBillNumber

N

varchar(25)

运单号,推送时不需要,返回时提供

Consignee 收件人

PersonName

Y

varchar(25)

收件人名

CompanyName

Y

varchar(50)

收件人公司

Address1

Y

varchar(50)

收件人地址一

Address2

Y

varchar(50)

收件人地址二

Address3

Y

varchar(50)

收件人地址三

CityName

N

varchar(50)

收件人城市

PostalCode

N

varchar(10)

收件人邮编

CountryCode

Y

varchar(16)

收件人国家二字代码

PhoneNumber

Y

varchar(50)

收件人电话

FaxNumber

Y

varchar(50)

收件人传真

EMail

N

varchar(50)

收件人邮箱

Consignor 发件人

PersonName

Y

varchar(25)

发件人名

CompanyName

Y

varchar(50)

发件人公司

Address1

Y

varchar(50)

发件人地址一

Address2

Y

varchar(50)

发件人地址二

Address3

Y

varchar(50)

发件人地址三

CityName

N

varchar(50)

发件人城市

PostalCode

N

varchar(10)

发件人邮编

CountryCode

Y

varchar(16)

发件人国家二字代码

PhoneNumber

Y

varchar(50)

发件人电话

FaxNumber

Y

varchar(50)

发件人传真

EMail

N

varchar(50)

发件人邮箱

Pieces

Number

Y

Int

序号

Weight

Y

decimal(16, 2)

重量

Length

Y

decimal(16, 2)

长度

Width

Y

decimal(16, 2)

宽度

Height

Y

decimal(16, 2)

高度

LicensePlate

N

varchar(30)

JD号,推送时不需要,返回时提供

例文:

 

<ShipmentRequest>

<ReferenceId>RfId_20160518_232953</ReferenceId>

<Server>02001</Server>

<Amount>2</Amount>

<UnitPrice>100</UnitPrice>

<TotalPrice>200</TotalPrice>

<Currency>USD</Currency>

<Description>Description</Description>

<DescriptionCn>DescriptionCn</DescriptionCn>

<PackageType>01</PackageType>

<IsBattery>0</IsBattery>

<Consignee>

<PersonName>PersonName2</PersonName>

<CompanyName>CompanyName2</CompanyName>

<Address1>Address12</Address1>

<Address2>Address22</Address2>

<Address3>Address32</Address3>

<CityName>AARBURG ZUSTELLUNG</CityName>

<PostalCode>4663</PostalCode>

<CountryCode>CH</CountryCode>

<PhoneNumber>PhoneNumber2</PhoneNumber>

<FaxNumber>FaxNumber2</FaxNumber>

</Consignee>

<Consignor>

<PersonName>PersonName1</PersonName>

<CompanyName>CompanyName2</CompanyName>

<Address1>Address11</Address1>

<Address2>Address21</Address2>

<Address3>Address31</Address3>

<CityName>HONG KONG</CityName>

<PostalCode />

<CountryCode>HK</CountryCode>

<PhoneNumber>PhoneNumber1</PhoneNumber>

<FaxNumber>FaxNumber1</FaxNumber>

</Consignor>

<Pieces>

<Piece>

<Number>1</Number>

<Weight>1</Weight>

<Length>1</Length>

<Width>1</Width>

<Height>1</Height>

</Piece>

<Piece>

<Number>2</Number>

<Weight>2</Weight>

<Length>2</Length>

<Width>2</Width>

<Height>2</Height>

</Piece>

</Pieces>

</ShipmentRequest>

返回结果:

Xml:

<Result>

<Msg>运单预报成功</Msg>

<State>1</State>

<Data>

<ReferenceId>RfId_20160518_232953</ReferenceId>

<Server>02001</Server>

<Amount>2</Amount>

<UnitPrice>100</UnitPrice>

<TotalPrice>200</TotalPrice>

<Currency>USD</Currency>

<PackageType>01</PackageType>

<Description>Description</Description>

<DescriptionCn>DescriptionCn</DescriptionCn>

<IsBattery>0</IsBattery>

<BatteryLabel/>

<BatteryDescription/>

<AirwayBillNumber>3208718995</AirwayBillNumber>

<Consignee>

<PersonName>PersonName2</PersonName>

<CompanyName>CompanyName2</CompanyName>

<Address1>Address12</Address1>

<Address2>Address22</Address2>

<Address3>Address32</Address3>

<CityName>AARBURG ZUSTELLUNG</CityName>

<PostalCode>4663</PostalCode>

<CountryCode>CH</CountryCode>

<PhoneNumber>PhoneNumber2</PhoneNumber>

<FaxNumber>FaxNumber2</FaxNumber>

</Consignee>

<Consignor>

<PersonName>PersonName1</PersonName>

<CompanyName>CompanyName2</CompanyName>

<Address1>Address11</Address1>

<Address2>Address21</Address2>

<Address3>Address31</Address3>

<CityName>HONG KONG</CityName>

<PostalCode/>

<CountryCode>HK</CountryCode>

<PhoneNumber>PhoneNumber1</PhoneNumber>

<FaxNumber>FaxNumber1</FaxNumber>

</Consignor>

<Pieces>

<Piece>

<Number>1</Number>

<Weight>1</Weight>

<Length>1</Length>

<Width>1</Width>

<Height>1</Height>

<LicensePlate>JJD014600003214991040</LicensePlate>

</Piece>

<Piece>

<Number>2</Number>

<Weight>2</Weight>

<Length>2</Length>

<Width>2</Width>

<Height>2</Height>

<LicensePlate>JJD014600003214991041</LicensePlate>

</Piece>

</Pieces>

</Data>

<OpCode>0</OpCode>

</Result>

 

{

"Success":"true",

"NoticeMessage":"订单新增成功",

"response":{

"ENo":"667484933C","OrderNo":

"BC_DD011504-000009",

"WayBillNo":"800087979926",

"LogisticProviderID":"YTO"

}

}

 

Json结果

{

"Msg":"运单预报成功",

"State":1,

"OpCode":0,

"Data":{

"ReferenceId":"RfId_20160518_233542",

"Server":"02001",

"Amount":2,

"UnitPrice":100.0,

"TotalPrice":200.0,

"Currency":"USD",

"Description":"Description",

"PackageType":"01",

"DescriptionCn":"DescriptionCn",

"IsBattery":0,

"BatteryLabel":"",

"BatteryDescription":"",

"AirwayBillNumber":"3208727944",

"Consignee":{

"PersonName":"PersonName2",

"CompanyName":"CompanyName2",

"Address1":"Address12",

"Address2":"Address22",

"Address3":"Address32","

CityName":"AARBURG ZUSTELLUNG",

"PostalCode":"4663",

"CountryCode":"CH",

"CountryName":null,

"PhoneNumber":"PhoneNumber2",

"FaxNumber":"FaxNumber2",

"EMail":null

},

"Consignor":{

"PersonName":"PersonName1",

"CompanyName":"CompanyName2",

"Address1":"Address11",

"Address2":"Address21",

"Address3":"Address31",

"CityName":"HONG KONG",

"PostalCode":"",

"CountryCode":"HK",

"CountryName":null,

"PhoneNumber":"PhoneNumber1",

"FaxNumber":"FaxNumber1",

"EMail":null

},

"Pieces":[

{

"Number":1,

"Weight":1.0,

"Length":1.0,

"Width":1.0,

"Height":1.0,

"LicensePlate":"JJD014600003214992051"

},

{

"Number":2,

"Weight":2.0,

"Length":2.0,

"Width":2.0,

"Height":2.0,

"LicensePlate":"JJD014600003214992052"

}

]

}

}

 

构建HTTP POST 请求

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;


import net.kingtrans.order.common.Order;
import net.kingtrans.order.common.OrderItem;
import net.kingtrans.util.Convert;
import net.kingtrans.util.InvalidException;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;


import sun.misc.BASE64Encoder;


public class WGInterface {
private static Logger logger = Logger.getLogger(WGInterface.class);


//main方法接口测试
public static void main(String[] args) throws InvalidException, NoSuchAlgorithmException, UnsupportedEncodingException {
String content = 
"<ShipmentRequest><ReferenceId>RfId_20160518_232953</ReferenceId><Server>02001</Server><Amount>2</Amount><UnitPrice>100</UnitPrice><TotalPrice>200</TotalPrice><Currency>USD</Currency>"+
"<Description>Description</Description><DescriptionCn>DescriptionCn</DescriptionCn><PackageType>01</PackageType><IsBattery>0</IsBattery>"+
"<Consignee><PersonName>PersonName2</PersonName><CompanyName>CompanyName2</CompanyName><Address1>Address12</Address1>"+
"<Address2>Address22</Address2><Address3>Address32</Address3><CityName>AARBURG ZUSTELLUNG</CityName><PostalCode>4663</PostalCode><CountryCode>CH</CountryCode>"+
"<PhoneNumber>PhoneNumber2</PhoneNumber><FaxNumber>FaxNumber2</FaxNumber></Consignee><Consignor><PersonName>PersonName1</PersonName>"+
"<CompanyName>CompanyName2</CompanyName><Address1>Address11</Address1><Address2>Address21</Address2><Address3>Address31</Address3>"+
"<CityName>HONG KONG</CityName><PostalCode /><CountryCode>HK</CountryCode><PhoneNumber>PhoneNumber1</PhoneNumber><FaxNumber>FaxNumber1</FaxNumber></Consignor>"+
"<Pieces><Piece><Number>1</Number><Weight>1</Weight><Length>1</Length><Width>1</Width><Height>1</Height>"+
"</Piece><Piece><Number>2</Number><Weight>2</Weight><Length>2</Length><Width>2</Width><Height>2</Height></Piece>"+
"</Pieces></ShipmentRequest>";
String contentBASE64 = getBase64(content);
String date = Convert.getNowDateTimeStr();
String key = "112233";
String id = "02010324";
//MD5加密
String verify = toMd5(id+date+contentBASE64+key);
HttpClient http = null;
HttpPost post = null;
String result = "";
try {
http = new DefaultHttpClient();
post = new HttpPost("http://119.29.6.201:8068/");
http.getParams().setParameter(
CoreConnectionPNames.CONNECTION_TIMEOUT, 120000);
http.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,
120000);
List<NameValuePair> nvp = new ArrayList<NameValuePair>();
nvp.add(new BasicNameValuePair("id", "02010324"));
nvp.add(new BasicNameValuePair("method", "order.predict"));
nvp.add(new BasicNameValuePair("returnStyle", "json"));
nvp.add(new BasicNameValuePair("datetime", date));
nvp.add(new BasicNameValuePair("content", contentBASE64 ));
nvp.add(new BasicNameValuePair("verify", verify));
post.setEntity(new UrlEncodedFormEntity(nvp, "utf-8"));
HttpResponse response = http.execute(post);
HttpEntity entity = response.getEntity();
result = EntityUtils.toString(entity, "utf-8");
logger.info("返回的结果:" + result);
} catch (Exception e) {
e.printStackTrace();
throw new InvalidException("访问出错信息: " + e.getMessage());
} finally {
post.releaseConnection();
}
}

猜你喜欢

转载自blog.csdn.net/phone13144830339/article/details/80009931