java通过SMS短信平台实现发短信的功能

java通过SMS短信平台实现发短信的功能

一、使用java发送短信的方法:

java发送手机短信,通常有几种方法:

(1)使用webserive接口发送手机短信;

(2)使用短信猫的方式进行短信的发送,比较常用的方式,不过需要购买硬件设备;

(3)使用中国网建的SMS短信平台,使用前需要注册,这里只记录SMS接口的使用。

 

二、接口的使用:

(1)导入jar:

commons-logging-1.2.jar

commons-codec-1.10.jar

commons-httpclient-3.1.jar

maven依赖:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.10</version>
</dependency>

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>

(2)util:

package com.serviceMarket.common.util;

import java.io.IOException;
import java.util.HashMap;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

/** 
* 类说明 :SMS_webchinese发送短信util
*/
public class SendMsgUtil {
	
	public static HashMap<String,String> getMessageStatus(String phone){
		HashMap<String,String> map=new HashMap<String,String>();
		
		HttpClient client = new HttpClient();
		
		PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn"); //sms平台接口
		post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");//在头文件中设置编码集格式
		
		int num=(int)((Math.random()*9+1)*100000);//6位数验证码
		String code=num+"";
		
		NameValuePair[] data ={ 
				new NameValuePair("Uid", "用户名"),//sms平台的用户名
				new NameValuePair("Key", "短信秘钥"),//短信秘钥,不是密码
				new NameValuePair("smsMob","目的手机号码"),//目的手机号码,多个手机号用半角逗号隔开
				new NameValuePair("smsText","本次验证码为:"+code+""+",有效时间为5分钟")//短信内容,自定义
                        };
		map.put("code", code);
		post.setRequestBody(data);

		try {
			client.executeMethod(post);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//打印状态码和响应头信息
		int statusCode = post.getStatusCode();
		System.out.println("statusCode:"+statusCode);
		Header[] headers = post.getResponseHeaders();
		for(Header h : headers)
		{
			System.out.println(h.toString());
		}
		
	
		String result = null;
		try {
			result = new String(post.getResponseBodyAsString().getBytes("gbk"));
		} catch (IOException e) {
			e.printStackTrace();
		} 
		System.out.println(result); //打印返回的消息状态
		map.put("result", result);

		post.releaseConnection();
		return map;
	}	
}

(3)Controller:

@Controller 
public class Controller {
        //短信发送接口
	@RequestMapping(value="/GET/authentication/{phone}")
	@ResponseBody
        //返回结果Result对象:成功时返回一个6位数验证码,失败时返回false
	public Result authentication(@PathVariable(value="phone")String phone,HttpServletRequest request){
		
		HashMap<String, String> map = SendMsgUtil.getMessageStatus(phone); //调用发送短信接口
			
		String result = map.get("result");//获取到result值
		if (result.trim().equals("1")) {//如果为1,表示成功发送
			
			String code = map.get("code");//获取发送的验证码内容
			HttpSession session = request.getSession(); //设置session
			session.setAttribute("code", code);//将短信验证码放到session中保存
			session.setMaxInactiveInterval(60 * 5);//保存时间 暂时设定为5分钟
			
			System.out.println(code);
			return Result.ok(code);
			
		} else {
			//短信发送失败
			return Result.ok("false");
		}		
	}
}

(4)短信发送后的返回值:

短信发送后返回值 说 明
-1 没有该用户账户
-2 接口密钥不正确,不是账户登陆密码
-21 MD5接口密钥加密不正确
-3 短信数量不足
-11 该用户被禁用
-14 短信内容出现非法字符
-4 手机号格式不正确
-41 手机号码为空
-42 短信内容为空
-51 短信签名格式不正确
接口签名格式为:【签名内容】
-6 IP限制
大于0 短信发送数量

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114751.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • matlab plot颜色代码_matlab改图像背景颜色

    matlab plot颜色代码_matlab改图像背景颜色通常有两种方法: 使用预置的颜色代码 ‘r’红色’m’粉红’g’绿色’c’青色’b’兰色’w’白色’y’黄色’k’黑色 使用颜色数组 plot(x,y,’color’,[0.10.20.3])%颜色数组三个元素都在0~1之间

    2022年10月16日
  • LayUI树形表格treetable使用详解[通俗易懂]

    LayUI树形表格treetable使用详解[通俗易懂]LayUI是现在比较流行的一款前端框架,也有很多人基于LayUI开发了很多不错的组件,比如treetable树形表格。因为treetable是第三方基于LayUI开发的,所以需要先用Layui引入一下文件。layui.config({base:’static/layui/’}).extend({treetable:’treetable-lay/treetab…

  • ida反编译出来代码能直接用吗_xrl指令

    ida反编译出来代码能直接用吗_xrl指令IDAPro直接修改指令—以将jnz修改为jz为例子理清程序的逻辑后,采用最简单的办法控制程序的执行路径——修改指令。首先,通过菜单栏中Options/General/Disassembly/Numberofopcodebytes设置IDA使其显示指令的机器码。一般修改为16jnz的机器码为75,只需将其改为jz的机器码74。修改方法:Edit/Patchpr…

  • 杀死指定进程号的进程_人工智能的判断标准

    杀死指定进程号的进程_人工智能的判断标准命令netstat-ano|findstr端口号获取pid根据PID找到此进程号的程序tasklist|findstr227312根据pid杀死进程taskkill/pid227312

  • JavaScript如何截取指定位置的字符串

    JavaScript如何截取指定位置的字符串我们在日常开发中,经常需要对字符串进行删除截取增加的操作,我们这次说一下使用JavaScript截取指定位置的字符串。**一、使用slice()截取**slice()方法可以通过指定的开始和结束位置,提取字符串的某个部分,并以新的字符串返回被提取的部分。它的参数有两个,start和end。start是必须填写的参数,规定从何处开始选取,如果是负数,就是从尾部倒着开始算。end是可选填写的参数,规定从何处结束选择,如果没有指定end的值的话,只有start,那么就是默认从start一直截取到结束的

  • JVM异常FGC问题查找过程总结

    JVM异常FGC问题查找过程总结问题现象及分析可能原因分析手动重现异常大对象问题流量暴涨CPU资源被其他进程占用内存被其他进程占用的情况swap分区问题数据库连接异常堆文件分析shell脚本JVM问题排查总结其他遗留的问题前段时间线上的zzuser的服务模块出现大量的异常FGC情况,经过大量排查工作,最后锁定是因为一个sql的大查询导致的。这也给了我非常大的教训,同时我在这次问题的排查过程中也获益匪浅,

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号