如何调用外部webservice 接口来发送短信
发布时间:2020-12-16 23:18:27 所属栏目:安全 来源:网络整理
导读:WebService接口 当前版本V1.2 Web?Service地址:? GB2312网关?http://gateway.woxp.cn:6630/gb2312/ws_api/WebSMS.asmx UTF-8?网关?http://gateway.woxp.cn:6630/utf8/ws_api/WebSMS.asmx 公共参数说明 string?eid_pwd_gateId 详细说明 用户身份标识串,由【企
WebService接口
当前版本V1.2 Web?Service地址:? GB2312网关?http://gateway.woxp.cn:6630/gb2312/ws_api/WebSMS.asmx UTF-8?网关?http://gateway.woxp.cn:6630/utf8/ws_api/WebSMS.asmx 公共参数说明 string?eid_pwd_gateId 详细说明 用户身份标识串,由【企业ID号-会员账号-密码MD5-通道ID】组成。中间用"-"分隔开. 例如10002-admin-87373df3f89fa9932a9c6c58cc75e309-100(通道是可选值,不提供该值,系统使用默认通道),MD5不区分大小写 该值可通过GetIdentityMark函数获取. 获取网关身份识别字符串,供网关功能调用前的验证 public?string?GetIdentityMark(int?Eid,?string?uid,?string?pwd,?int?gateId) 参数名称 参数说明 Eid 企业ID代码,个人用户为0 uid 注册时的账号 pwd 登陆密码. gateId 短信通道ID,详细请参考通道说明 返回值说明 返回用户身份标识字符串 根据错误ID号,返回详细错误描述 public?string?GetErrorHint(int?ErrorId) ErrorId 错误的ID号。操作失败后的ID号 返回错误ID号的中文描述 获取指定通道的关键字屏蔽字符串 public?string?GetBadKeyWords(string?eid_pwd_gateId) eid_pwd_gateId 用户标识字符串,设定通道ID号 执行成功,返回指定通道的关键字屏蔽字符串,之间用'|'分开。 快速发送短信,直接提交到网关。 public?SendResult?FastSend(string?eid_pwd_gateId,string?No_List,?string?Memo,?string?SendTime,string?strSubId) TargetNo 发送对方的手机号码,多个用','分开。每次最多提交100条.是否支持移动还是联通或者小灵通请参考通道说明 MsgContent 发送短信内容,长度要求请参考通道说明 DateTime 定时发送时间,必须大于当前时间.空代表立即发送 strSubId 如果通道支持子号码扩展,值为子号码.否则使用空值 返回SendResult类型。显示发送详细状态? ///?<summary> ///?返回发送状态,大于0代表成功 ///?</summary> 属性名:?RetCode ///?被屏蔽的关键字 属性名:?BlackWords ///?发送失败号的码列表,","分开 属性名:?FailNo ///?被屏蔽的号码列表,245)">属性名:?ShieldNo ///?错误的描述 属性名:ErrorDesc 长短信格式发送,最大支持300字,64字计费,建议短信内容控制在130字以内 public?SendResult?FastSendLongSMS(string?eid_pwd_gateId,?string?TargetNo,?string?MsgContent,?string?strSubId) ///?返回发送状态,大于0代表成功.返回短信计费总条数 快速安全发送短信,直接提交到网关。参数需要加密 public?SendResult?FastSend_Safe(int?nKeyId,string?eid_pwd_gateId,245)">nKeyId 密钥的ID,由客服人员提供 eid_pwd_gateId 需要加密.同上 TargetNo 需要加密,同上 MsgContent 需要加密,245)">DateTime 可选参数?需要加密,245)">strSubId 可选参数?需要加密,245)">主动接收回复的短信(需被动接收短信请联系客服人员)? public?string?ReadXml(string?eid_pwd_gateId) <ReadSMS>?<!--收到短信开始--> <Item><!--如果有多条循环此节--> <Id>10254</Id>?<!--?编号,唯一值--> <SenderNo>13405886058</SenderNo><!--回复者号码--> <MsgContent>星信:我时工作顺利用这</MsgContent><!--回复短信内容--> <SendTime>2008-03-14?23:07:39</SendTime><!--回复时间--> <SP_PID>1065810889988</SP_PID>?<!-回复到SP号的号码--> <subNo>101</subNo>?<!--客户扩展子号码--> </Item> </ReadSMS> 查询当前账户余额 public?double?GetMoney(string?eid_pwd_md5) eid_pwd_md5 用户身份标识串,不需要通道ID号 返回当前用户金额,-1代表操作失败 查询当前账户条数 public?int?GetBalanceCount(string?eid_pwd_md5) 返回当前用户剩余短信条数,-1代表操作失败 用户修改登陆密码 public?int?EditPWD(string?eid_pwd_md5,string?newPwd) newPwd 新密码 1执行成功,其它值请调用错误函数获取详细信息 ------------------------------------------------------------------------ 以上是发送短信的webservice接口,现在如何用java调用接口来实现“短信发送”这一功能,下面代码是 java调用webservice接口方法 webservice的?发布一般都是使用WSDL(web?service?descriptive?language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。今天搜索到了非常好的?webservice?provider列表 http://www.webservicex.net/WCF/default.aspx 这上面列出了70多个包括很多方面的free?webservice?provider,utilities->global?weather就可以获取全球的天气预报。 下面我们来看Java如何通过WSDL文件来调用这些web?service: 注意,以下的代码并没有经过真正的测试,只是说明这些情况,不同版本的Axis相差很大,大家最好以apache网站上的例子为准,这里仅仅用于说明其基本用法。? 1,直接AXIS调用远程的web?service 我觉得这种方法比较适合那些高手,他们能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是专门搞这行的,即使一段时间看懂,后来也就忘记了。直接调用模式如下: import?java.util.Date; import?java.text.DateFormat; import?org.apache.axis.client.Call; import?org.apache.axis.client.Service; import?javax.xml.namespace.QName; import?java.lang.Integer; import?javax.xml.rpc.ParameterMode; ? public?class?caClient?{ ????????????? ???????public?static?void?main(String[]?args)?{ ??????????????try?{ ?????????????????????String?endpoint?=?"http://localhost:8080/ca3/services/caSynrochnized?wsdl"; ?????????????????????//直接引用远程的wsdl文件 ????????????????????//以下都是套路? ?????????????????????Service?service?=?new?Service(); ?????????????????????Call?call?=?(Call)?service.createCall(); ?????????????????????call.setTargetEndpointAddress(endpoint); ?????????????????????call.setOperationName("addUser");//WSDL里面描述的接口名称 ?????????????????????call.addParameter("userName",?org.apache.axis.encoding.XMLType.XSD_DATE, ???????????????????????????????????javax.xml.rpc.ParameterMode.IN);//接口的参数 ?????????????????????call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型?? ?????????????????????String?temp?=?"测试人员"; ?????????????????????String?result?=?(String)call.invoke(new?Object[]{temp}); ?????????????????????//给方法传递参数,并且调用方法 ?????????????????????System.out.println("result?is?"+result); ??????????????} ??????????????catch?(Exception?e)?{ ?????????????????????System.err.println(e.toString()); ???????} } 2,直接SOAP调用远程的webservice 这种模式我从来没有见过,也没有试过,但是网络上有人贴出来,我也转过来? import?org.apache.soap.util.xml.*; import?org.apache.soap.*; import?org.apache.soap.rpc.*; import?java.io.*; import?java.net.*; import?java.util.Vector; public?class?caService{ ???????public?static?String?getService(String?user)?{ ???????URL?url?=?null; ???????try?{ ???????????url=new?URL("http://192.168.0.100:8080/ca3/services/caSynrochnized"); ???????}?catch?(MalformedURLException?mue)?{ ??????????return?mue.getMessage(); ?????????} ?????????????//?This?is?the?main?SOAP?object ???????Call?soapCall?=?new?Call(); ???????//?Use?SOAP?encoding ???????soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); ???????//?This?is?the?remote?object?we're?asking?for?the?price ???????soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized"); ???????//?This?is?the?name?of?the?method?on?the?above?object ???????soapCall.setMethodName("getUser"); ???????//?We?need?to?send?the?ISBN?number?as?an?input?parameter?to?the?method ???????Vector?soapParams?=?new?Vector(); ???????//?name,?type,?value,?encoding?style ???????Parameter?isbnParam?=?new?Parameter("userName",?String.class,?user,?null); ???????soapParams.addElement(isbnParam); ???????soapCall.setParams(soapParams); ??????????//?Invoke?the?remote?method?on?the?object ??????????Response?soapResponse?=?soapCall.invoke(url,""); ??????????//?Check?to?see?if?there?is?an?error,?return?"N/A" ??????????if?(soapResponse.generatedFault())?{ ??????????????Fault?fault?=?soapResponse.getFault(); ?????????????String?f?=?fault.getFaultString(); ?????????????return?f; ??????????}?else?{ ?????????????//?read?result ?????????????Parameter?soapResult?=?soapResponse.getReturnValue?(); ?????????????//?get?a?string?from?the?result ?????????????return?soapResult.getValue().toString(); ??????????} ???????}?catch?(SOAPException?se)?{ ??????????return?se.getMessage(); ????} 3,使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用,即可。 这是像我这种懒人最喜欢的方式,仍然以前面的global?weather?report为例。 首先???java?org.apache.axis.wsdl.WSDL2Java?http://www.webservicex.net/globalweather.asmx.WSDL 原本的网址是http://www.webservicex.net/globalweather.asmx?WSDL,中间个各问号,但是Linux下面它不能解析,所以去掉问号,改为点号。 那么就会出现4个文件: GlobalWeather.java??GlobalWeatherLocator.java??GlobalWeatherSoap.java??GlobalWeatherSoapStub.java 其中GlobalWeatherSoap.java是我们最为关心的接口文件,如果你对RMI等SOAP实现的具体细节不感兴趣,那么你只需要看接口文件即可,在使用的时候,引入这个接口即可,就好像使用本地类一样。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |