加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何调用外部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实现的具体细节不感兴趣,那么你只需要看接口文件即可,在使用的时候,引入这个接口即可,就好像使用本地类一样。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读