Androd中的soap协议
Posted 志向远大
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Androd中的soap协议相关的知识,希望对你有一定的参考价值。
1.引用ksoap2.jar包
2.调用相应的Api,首先创建SoapObject对象
// 实例化SoapObject对象,指定webService的命名空间(从相关WSDL文档中可以查看命名空间)
SoapObject soapObject = new SoapObject(ConstantsMember.targetNameSpace,
ConstantsMember.getSupportProvince);
其中getSupportProvince:是方法名; targetNameSpace:命名空间
public static final String getSupportProvince = "GetAppPayPrePayInfo"; // 获取预定id的方法
public static final String getOtherParameters = "GetAppPayCallPayParamInfo"; // 获取调起支付功能其他参数的方法
3.填充你要传递的参数
// 假设方法有参数的话,设置调用方法参数
soapObject.addProperty("body", hm.get("hotelName").toString());
// soapObject.addProperty("body", "阿玛尼国际酒店");
soapObject.addProperty("detail", "酒店");
soapObject.addProperty("attach", attach);
soapObject.addProperty("out_trade_no", code);
// soapObject.addProperty("out_trade_no", "201606220226446");
soapObject.addProperty("total_fee", totalFee);
4.链接服务器,把soapObject传进去,拿到回调的参数
// 设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致):
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(soapObject);
// 构建传输对象,并指明WSDL文档URL:
@SuppressWarnings("deprecation")
androidHttpTransport httpTranstation = new AndroidHttpTransport(
ConstantsMember.SOAP_ADDRESS);
try
// 调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象):
httpTranstation.call(ConstantsMember.targetNameSpace
+ ConstantsMember.getSupportProvince, envelope);
mResult = envelope.getResponse().toString();
System.out.println("result:::" + mResult);
catch (IOException e)
e.printStackTrace();
catch (XmlPullParserException e)
e.printStackTrace();
其中SOAP_ADDRESS:Java接口服务器地址
public static final String SOAP_ADDRESS = "http://120.25.192.225:813/WXPayWebService.asmx"; // 测试的
mResult:是服务器返回的参数
所有代码汇总:
// 实例化SoapObject对象,指定webService的命名空间(从相关WSDL文档中可以查看命名空间)
SoapObject soapObject = new SoapObject(ConstantsMember.targetNameSpace,
ConstantsMember.getSupportProvince);
String hotelId = hm.get("hotelId").toString();
// 参数内容:type_content_酒店ID_支付类型(具体type、content值根据不同的支付动作参见下表),例如:4_3_酒店ID_支付类型
// 【支付类型:0公众号支付,1App支付,2支付宝支付】
//【系统定义酒店ID:-1 爱美家智能酒店;-2 云客智能酒店】
String attach = body + "_-1_1";
String code = getOutTradeNo();
// 假设方法有参数的话,设置调用方法参数
soapObject.addProperty("body", hm.get("hotelName").toString());
// soapObject.addProperty("body", "阿玛尼国际酒店");
soapObject.addProperty("detail", "酒店");
soapObject.addProperty("attach", attach);
soapObject.addProperty("out_trade_no", code);
// soapObject.addProperty("out_trade_no", "201606220226446");
soapObject.addProperty("total_fee", totalFee);
// 设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致):
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(soapObject);
// 构建传输对象,并指明WSDL文档URL:
@SuppressWarnings("deprecation")
AndroidHttpTransport httpTranstation = new AndroidHttpTransport(
ConstantsMember.SOAP_ADDRESS);
try
// 调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象):
httpTranstation.call(ConstantsMember.targetNameSpace
+ ConstantsMember.getSupportProvince, envelope);
mResult = envelope.getResponse().toString();
System.out.println("result:::" + mResult);
catch (IOException e)
e.printStackTrace();
catch (XmlPullParserException e)
e.printStackTrace();
以上是关于Androd中的soap协议的主要内容,如果未能解决你的问题,请参考以下文章
强制 Soap/WCF 使用 HTTP 而不是 TCP 协议