Java实现发送短信验证码功能

2025-05-27 0 84

一个发送短信验证码的功能,使用的是信易通的短信平台接口,然后在Java中使用HttpClient模拟POST请求或者GET请求(看短信平台要求,一般的情况下都是POST请求),调用短信平台提供的接口(遵循短信平台的接口规范即可)。具体看代码:

使用HttpClient的时候需要在项目中引入:

commons-httpclient-3.1.jar

这个jar包,

项目结构:

Java实现发送短信验证码功能

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140
/**

* 文件说明

* @Description:扩展说明

* @Copyright: 2015 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: 2015年4月17日 上午9:26:34

* @ModifyUser: feizi

* @ModifyDate: 2015年4月17日 上午9:26:34

* @Version:V6.0

*/

public class HttpRequestUtil {

/**

* HttpClient 模拟POST请求

* 方法说明

* @Discription:扩展说明

* @param url

* @param params

* @return String

* @Author: feizi

* @Date: 2015年4月17日 下午7:15:59

* @ModifyUser:feizi

* @ModifyDate: 2015年4月17日 下午7:15:59

*/

public static String postRequest(String url, Map<String, String> params) {

//构造HttpClient的实例

HttpClient httpClient = new HttpClient();

//创建POST方法的实例

PostMethod postMethod = new PostMethod(url);

//设置请求头信息

postMethod.setRequestHeader("Connection", "close");

//添加参数

for (Map.Entry<String, 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: 2015年4月17日 下午7:15:28

* @ModifyUser:feizi

* @ModifyDate: 2015年4月17日 下午7:15:28

*/

public static String getRequest(String url, Map<String, 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、在创建一个类,生成验证码,然后传递相应的参数(不同的短信平台接口会有不同的参数要求,这个一般短信平台提供的接口文档中都会有的,直接看文档然后按要求来即可)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91
/**

* 文件说明

* @Description:扩展说明

* @Copyright: 2015 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: 2015年4月17日 上午9:24:48

* @ModifyUser: feizi

* @ModifyDate: 2015年4月17日 上午9:24:48

* @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提交地址";

Map<String, String> params = new HashMap<String, 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: 2015年4月17日 下午7:26:36

* @ModifyUser:feizi

* @ModifyDate: 2015年4月17日 下午7:26:36

*/

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秒,如有疑虑请详询400-069-2886(客服电话)【XXX中心】"));

}

}

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

完整代码:sendmassage

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://blog.csdn.net/hu1991die/article/details/45101651

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java实现发送短信验证码功能 https://www.kuaiidc.com/77283.html

相关文章

发表评论
暂无评论