「java短信接口demo」调用短信接口

博主:adminadmin 2023-01-06 07:24:08 669

今天给各位分享java短信接口demo的知识,其中也会对调用短信接口进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java怎么开通短信验证码登录功能?

实现jiava短信验证码可以按下面的步奏进行:

1、首先,找到一个支持Java语言的接口短信平台。

2、接着下载接口文档,和自己的开发平台进行对接。

3、注意在对接之前测试一下短信的速度,一旦对接好想换就比较麻烦,之前就吃过这个亏,最后有个朋友介绍我去短信网。

4、如果要购买的话,一定要多测试几家。

如果在碰到有疑问的地方一定要和技术或者客服多多沟通。

java怎么同步发送及异步发送短信例子解析

发送短信的接口

根据自己的情况选择服务商。

开发文档

从开发文档中我们可以看到. 可以直接使用http请求也可以使用WebService请求发送短信. 由于DEMO文件夹下的java和jsp文件夹中的代码都是使用http请求发送短信. 所以这里就不再细说了, 我们使用WebService的方式演示发送短信.

生成客户端代码

从接口文档中我们知道它的WebService的WSDL的url为: 那么我们可以执行下面的命令生成客户端代码:

wsimport -keep

其中wsimport是JDK自带的工具, -keep url选项是"保留生成的文件". 该命令会在当前目录下生成sms.cn.ihuyi._106包, 以及众多的类. 接下来开始编写我们自己的代码.

定义接口

为了方便, 这里我们首先定义一个接口:

Sms.java

public interface Sms {

 /**

  * 向mobile发送短信, 内容为message

  * 

  * @param mobile 手机号

  * @param message 短信内容

  * @return 成功返回-1, 否则返回其他值

  */

 int sendMessage(String mobile, String message);

}

这个接口很简单, 只有一个方法. 这个方法用来发送短信.

同步发送短信

接下来我们首先实现一个同步发送短信的类:

IhuyiSmsImpl.java

public class IhuyiSmsImpl implements Sms {

 private String account;

 private String password;

 public void setAccount(String account) {

  this.account = account;

 }

 public void setPassword(String password) {

  this.password = password;

 }

 @Override

 public int sendMessage(String mobile, String message) {

  cn.ihuyi._106.Sms factory = new cn.ihuyi._106.Sms();

  SmsSoap smsSoap = factory.getSmsSoap();

  SubmitResult submit = smsSoap.submit(account, password, mobile, message);

  int code = submit.getCode();

  if(code == 2){

   return -1;

  }

  System.out.println("发送短信失败, code:" + code);

  return code;

 }

}

异步发送短信

由于发送短信涉及到网络通信, 因此sendMessage方法可能会有一些延迟. 为了改善用户体验, 我们可以使用异步发送短信的方法. 原理很简单: 如果用户请求发送短信, 我们不是直接调用IhuyiSmsImpl的sendMessage方法, 而是将请求保存起来(生产者), 然后告诉用户: 短信发送成功. 之后有若干个消费者取出任务, 调用sendMessage方法发送短信.

这里, 我使用线程池完成上面的任务:

AsyncSmsImpl.java

public class AsyncSmsImpl implements Sms {

 public Sms sendSms;

 private ExecutorService executorService = Executors.newFixedThreadPool(3);

 public void setSendSms(Sms sendSms) {

  this.sendSms = sendSms;

 }

 @Override

 public int sendMessage(String mobile, String message) {

  try {

   executorService.submit(() - sendSms.sendMessage(mobile, message));

  }

  catch(Exception e) {

   Sysemt.out.println("提交任务时发生错误" + e);

   return 0;

  }

  return -1;

 }

 public void destroy(){

  try{

   executorService.shutdown();

  }

  catch(Exception e){}

 }

}

在第17行, 我们获得远程对象的一个代理对象. 之后就可以通过这个代理对象进行发送短信, 查询账户余额等操作.

第18行, 使用该代理对象的submit方法提交了短信内容. 该方法的参数信息及返回值含义在接口文档中有详细的说明.

第19行我们获得了结果的状态码. 根据文档上的说明, 状态码为2说明提交成功. 简单起见, 这里我们只关注提交成功的情况. 需要注意的是, 状态码为2只是说明提交成功. 根据官网上的"3-5秒内响应、100%到达", 我们可以推测. 如果提交成功, 那么基本上3-5秒内,短信就会发送成功, 根据用户的网络情况, 可能稍有延迟用户就可以收到短信.

使用这段代码发送短信也很简单, 直接new一个对象, 设置好账号和密码就可以发送短信了.

代码很简单, 直接将Sms接口的sendMessage(mobile, message)方法作为一个任务加到线程池的任务队列中. 这样等到有空闲线程时, 就会执行sendSms.sendMessage(mobile, message)发送短信. 这里我们假设只要保存到线程池就可以成功发送短信. 因为发送失败的情况实际上很罕见.

用Java调用短信接口给手机发送短信怎么写代码??接口已经有了,是一个url.

那你要做的就是向这个URL发送数据就好,给个例子:

public   class  Httptest1  {

 8  

 9       public   static   void  main(String[] args)  {

10  

11         URL url  =   null ;

12         HttpURLConnection conn  =   null ;

13         OutputStream outStream  =   null ;

14         InputStream inStream  =   null ;

15         

16           try   {

17             url  =   new  URL( "  " );

18             conn  =  (HttpURLConnection) url.openConnection();

19             conn.setDoOutput( true );

20             conn.setDoInput( true );

21  

22             String sendXml  =   " ?xml version=\ " 1.0 \ "  encoding=\ " UTF - 16 \ " ?!DOCTYPE SigMailCommand SYSTEM \ " SigMail.dtd\ " " ;  // XML数据     

23              sendXml  +=   " SigMailCommand Name=\ " checkuser\ " Param Name=\ " domainname\ " test.com.cn/Param " ;

24             sendXml  +=   " Param Name=\ " username\ " admin/Param/SigMailCommand " ;

25  

26             outStream  =  conn.getOutputStream();

27  

28              // 准备通过CONN对象写入XML数据 

29              BufferedWriter bw  =   new  BufferedWriter( new  java.io.OutputStreamWriter(outStream,

30              " UTF-16 " ));

31             bw.write(sendXml);

32             bw.flush();

33             bw.close();

34             

35              // DataOutputStream dataOutStream = new DataOutputStream(outStream);

36              // dataOutStream.writeChars(xml);

37              // dataOutStream.flush();

38              // dataOutStream.close();

39             

40  

41              // 准备通过CONN对象读取返回的XML数据 

42  

43             inStream  =  conn.getInputStream();

44             StringBuffer returnXml  =   new  StringBuffer( "" );

45             BufferedReader rd  =   new  BufferedReader( new  InputStreamReader(inStream,

46                      " UTF-16 " ));

47               for  (String line  =   null ; (line  =  rd.readLine())  !=   null ;)  {

48                 returnXml.append(line);

49             } 

50             System.out.println(returnXml.toString());

51             rd.close();

52          }   catch  (IOException ex)  {

53             ex.printStackTrace();

54          } finally {

55               try   {

56                  if  (outStream  !=   null )

57                     outStream.close();

58                  if  (inStream  !=   null )

59                     inStream.close();

60                  if  (conn  !=   null )

61                     conn.disconnect();

62              }   catch  (IOException e)  {

63                  //  TODO 自动生成 catch 块 

64                  e.printStackTrace();

65             } 

66         } 

67  

68     } 

69  

70 }

java如何实现发送短信验证码功能?

1、创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法

/** * 文件说明 * @Description:扩展说明 * @Copyright: XXXX dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */package com.demo.util; import java.io.IOException;import java.util.Map; import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.SimpleHttpConnectionManager;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod; /** * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser: feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX * @Version:V6.0 */public class HttpRequestUtil { /** * HttpClient 模拟POST请求 * 方法说明 * @Discription:扩展说明 * @param url * @param params * @return String * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static String postRequest(String url, MapString, String params) { //构造HttpClient的实例 HttpClient httpClient = new HttpClient(); //创建POST方法的实例 PostMethod postMethod = new PostMethod(url); //设置请求头信息 postMethod.setRequestHeader("Connection", "close"); //添加参数 for (Map.EntryString, String entry : params.entrySet()) { postMethod.addParameter(entry.getKey(), entry.getValue()); } //使用系统提供的默认的恢复策略,设置请求重试处理,用的是默认的重试处理:请求三次 httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false); //接收处理结果 String result = null; try { //执行Http Post请求 httpClient.executeMethod(postMethod); //返回处理结果 result = postMethod.getResponseBodyAsString(); } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("请检查输入的URL!"); e.printStackTrace(); } catch (IOException e) { // 发生网络异常 System.out.println("发生网络异常!"); e.printStackTrace(); } finally { //释放链接 postMethod.releaseConnection(); //关闭HttpClient实例 if (httpClient != null) { ((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown(); httpClient = null; } } return result; } /** * HttpClient 模拟GET请求 * 方法说明 * @Discription:扩展说明 * @param url * @param params * @return String * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static String getRequest(String url, MapString, String params) { //构造HttpClient实例 HttpClient client = new HttpClient(); //拼接参数 String paramStr = ""; for (String key : params.keySet()) { paramStr = paramStr + "" + key + "=" + params.get(key); } paramStr = paramStr.substring(1); //创建GET方法的实例 GetMethod method = new GetMethod(url + "?" + paramStr); //接收返回结果 String result = null; try { //执行HTTP GET方法请求 client.executeMethod(method); //返回处理结果 result = method.getResponseBodyAsString(); } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("请检查输入的URL!"); e.printStackTrace(); } catch (IOException e) { // 发生网络异常 System.out.println("发生网络异常!"); e.printStackTrace(); } finally { //释放链接 method.releaseConnection(); //关闭HttpClient实例 if (client != null) { ((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown(); client = null; } } return result; }}

2、在创建一个类,生成验证码,然后传递相应的参数(不同的短信平台接口会有不同的参数要求,这个一般短信平台提供的接口文档中都会有的,直接看文档然后按要求来即可)

/** * 文件说明 * @Description:扩展说明 * @Copyright: XXXX dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */package com.demo.util; import java.net.URLEncoder;import java.util.HashMap;import java.util.Map; /** * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser: feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX * @Version:V6.0 */public class SendMsgUtil { /** * 发送短信消息 * 方法说明 * @Discription:扩展说明 * @param phones * @param content * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:18:08 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:18:08 */ @SuppressWarnings("deprecation") public static String sendMsg(String phones,String content){ //短信接口URL提交地址 String url = "短信接口URL提交地址"; MapString, String params = new HashMapString, String(); params.put("zh", "用户账号"); params.put("mm", "用户密码"); params.put("dxlbid", "短信类别编号"); params.put("extno", "扩展编号"); //手机号码,多个号码使用英文逗号进行分割 params.put("hm", phones); //将短信内容进行URLEncoder编码 params.put("nr", URLEncoder.encode(content)); return HttpRequestUtil.getRequest(url, params); } /** * 随机生成6位随机验证码 * 方法说明 * @Discription:扩展说明 * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:19:02 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:19:02 */ public static String createRandomVcode(){ //验证码 String vcode = ""; for (int i = 0; i 6; i++) { vcode = vcode + (int)(Math.random() * 9); } return vcode; } /** * 测试 * 方法说明 * @Discription:扩展说明 * @param args * @return void * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static void main(String[] args) {// System.out.println(SendMsgUtil.createRandomVcode());// System.out.println("ecb=12".substring(1)); System.out.println(sendMsg("18123456789,15123456789", "尊敬的用户,您的验证码为" + SendMsgUtil.createRandomVcode() + ",有效期为60秒,如有疑虑请详询XXX-XXX-XXXX【XXX中心】")); }

然后执行一下,一般的情况下参数传递正确,按照接口文档的规范来操作的话,都会发送成功的,手机都能收到验证码的,然后可能会出现的问题就是:发送的短信内容有可能会出现中文乱码,然后就会发送不成功,按照短信平台的要求进行相应的编码即可。一般都会是UTF-8编码。

短信接口是什么东西?

我来给你介绍一下短信接口就是短信SDK、API,以下就是我编辑的java短信接口,已经测试请求步骤。

单条短信接口:此接口为客户发送单条短信提供支持

安全接口

安全接口的数据传输经过加密、压缩,能够保障数据传输安全,如果有安全性要求,建议选用安全接口;

安全接口所接收、响应的数据,均经过AES加密,在数据加密前允许使用gzip算法压缩数据。

数据加密方式:AES;

加密算法:AES/ECB/PKCS5Padding;

压缩算法:gzip 【建议进行数据压缩】;

请求

链接

参数

参数类型传输方式描述appIdStringhttp头信息传输用户Appid(必填)gzipStringhttp头信息传输是否启用GZIP压缩【非必填】

on :是encodeStringhttp头信息传输字符集【非必填】

如果不填,默认UTF-8编码集,此字符集必须与实际传输数据字符集相同mobileString1、将所有参数拼装成json串后;

2、将json串进行AES加密;

3、加密后的byte数组通过post直接传输;手机号(必填)contentString短信内容(必填)timerTimeString定时发送时间(选填,定时时间在90天之内)

格式:yyyy-MM-dd HH:mm:ss

如果不填,则为即时发送customSmsIdString自定义消息ID(选填)

最长32位extendedCodeString扩展码(选填)

最长支持12位,如果最终号码长度超长,会截取扩展码,请根据我司建议位数提交requestTimelong请求时间(必填)

格式:时间毫秒数

安全验证字段,防止同一个请求重复提交;

短信平台根据requestTime与requestValidPeriod共同判断请求是否有效,针对无效的请求,短信平台响应错误;

判断方法:请求时间 + 请求有效时间 当前时间 ? 有效 : 无效;requestValidPeriodint请求有效时间(必填)[单位:秒]

描述同上示例

1、将参数拼装成json串

{

"mobile":"15538850000",

"content":"【清华大学】 i love you ! ",

"timerTime":"2017-03-15 12:00:00",

"extendedCode":"112",

"customSmsId":"2017010709302911",

"requestTime":1490588340964,

"requestValidPeriod":30

}

2、将json串转化为UTF-8编码的byte数组

Byte[] data = json.toBytes["UTF-8"];

3、如果需要gzip压缩,则压缩数据,并放入标示,[非必需步骤]

data =gzip.com (data);

http.setHead("gzip","on");

4、通过AES加密

data = AES. encryption (secretKey,data,算法);

5、将appId放入http head

http.setHead("appId",appId);

6、通过http post方法传输

Byte[] response = http.post(url,data);

响应

参数

参数类型传输方式描述resultStringhttp头信息传输请求状态码,详见本文档《接口状态码表》

当result不是SUCCESS时,不会响应下面参数数据。mobileString传输过来的数据是加密后的byte数组手机号smsIdString消息IDcustomSmsIdString客户自定义SMSID示例

1、从http头信息获取请求状态,如果code不是SUCCESS,不用进行下面几步

String code = http.getHead("reasult");

2、从响应流获取响应数据,并解密

Byte[] data = Response.getdata();

data = AES. decryption (secretKey, data,算法);

3、如果请求信息中有压缩标示,返回的数据也是压缩过的,需要解压缩;[非必须步骤]

data = GZIP.dcom(data);

4、将数据转换成JSON串

String json = new String(data,"UTF-8");

{

"mobile":"15538850000",

"smsId":"20170392833833891100",

"customSmsId":"20170392833833891100"

接入指导

步骤一:登录亿美软通官网

步骤二:注册并获取客户标识(AppId)和客户密钥(secretKey)账号

步骤三:参照接口文档和DEMO,对接接口并测试

步骤四:测试通过,正式上线,充值使用

java短信接口demo的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于调用短信接口、java短信接口demo的信息别忘了在本站进行查找喔。