Java中使用阿里云短信接口实现短信的发送与接收

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

1.Contriller层调用方法

代码如下(示例):

import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import bm.web.aliyun.SendSmsUtil;
import bm.web.utils.CommonEnum;
import bm.web.utils.ResultBase;

@Controller
@RequestMapping(“/sms/”)
public class SendSmsController {

@Autowired
private SendSmsUtil sendSmsUtil;

/**
 * 发送手机验证码
 */
@RequestMapping("sendcode")
@ResponseBody
public ResultBase sendSmsCode(HttpServletRequest request) {
	
	String phone = request.getParameter("phone");
	ResultBase result = null;
	
	if(phone == null || phone.equals("")) {
		result = ResultBase.error(CommonEnum.USERINFO_NO_PHONE);
		
	}
	System.out.println("phone=" + phone);
	//生成验证码 1-9 6
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < 6; i++) {
        builder.append(new Random().nextInt(9) + 1);
    }
    String smsCode = builder.toString();
    System.out.println("smsCode=" + smsCode);
    //验证码注意要转为json字符串
    Map<String, String> mapcode = new HashMap<String, String>();
    mapcode.put("code",smsCode);
    String jsoncode = JSON.toJSONString(mapcode);
	String smsinfo =  sendSmsUtil.aliSendSms(phone, jsoncode);
	System.out.println("smsinfo=" + smsinfo);
	
	
	if(smsinfo == "ok") {
		result = ResultBase.success(smsCode);
	}else {
		result = ResultBase.error(CommonEnum.USERINFO_SMS_ERROR);
	}
	System.out.println("result=" + result);
	return result;
	}
}

2.阿里云短信验证工具类

代码如下(示例):

package bm.web.aliyun;

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Map;

/**

  • @Description: 短信发送工具
  • @CreateDate:
    */

@Service
public class SendSmsUtil {
// 配置工具类中的对应参数 ,示例:@Value(“${alisms.accessKeyId}”) ,参数在application.properties中配置,示例:alisms.accessKeyId=LTAIrKk,其他参数需要同样设置,也可以通过其他方式设置这些参数值
@Value(“示例中的符号{alisms.accessKeyId}”)
private String accessKeyId;
private String accessSecret;
private String signName;
private String templateCode;

public String aliSendSms(String PhoneNumbers,String TemplateParam){
    String result = "";
    DefaultProfile profile = DefaultProfile.getProfile("default", accessKeyId, accessSecret);
    IAcsClient client = new DefaultAcsClient(profile);
    CommonRequest request = new CommonRequest();
    request.setSysMethod(MethodType.POST);
    request.setSysDomain("dysmsapi.aliyuncs.com");
    request.setSysVersion("2017-05-25");
    request.setSysAction("SendSms");
    request.putQueryParameter("RegionId", "default");
    request.putQueryParameter("PhoneNumbers", PhoneNumbers);
    request.putQueryParameter("SignName", "发送者单位名字"); //填写自己需要的发送者单位名字
    request.putQueryParameter("TemplateCode", templateCode);
    request.putQueryParameter("TemplateParam", TemplateParam);
    try {
        CommonResponse response = client.getCommonResponse(request);
        System.out.println(response.getData());
        String infojson = response.getData();
        Gson gson2 = new Gson();
        Map map = gson2.fromJson(infojson, Map.class);
        String codes = map.get("Message").toString();
        System.out.println("codes="+codes);
        if(codes.equals("OK")){
            result="ok";
        }else {
            result="not_ok";
        }
    } catch (ServerException e) {
        e.printStackTrace();
    } catch (ClientException e) {
        e.printStackTrace();
    }
    System.out.println("result="+result);
    return result;
     }
   }

3.前端页面使用方法,放在script中,使用了layui模板

代码如下(示例):

	layui.use([ 'layer', 'form' ], function() {// >=layui
		var $ = layui.jquery;
		var layer = layui.layer;
		var form = layui.form;
		var yzcode ="000000";
       //表单验证(页面自动关联,验证结果绑定在表单)
        form.verify({
        	realName: function(value, item){ //value:表单的值、item:表单的DOM对象 自定义验证规则
    			if(!(/^[\u4E00-\u9FA5\uf900-\ufa2d·s]{2,20}$/).test(value)){
                   return '请输入中文姓名!';
                }
            },
            card: function(value, item){ //value:表单的值、item:表单的DOM对象 自定义验证规则
    			if(!(/(^\d{15}$)|(^\d{17}(x|X|\d)$)/).test(value)){
                   return '请输入身份证号!';
                   
                }
            },
        	phone: function(value, item){ //value:表单的值、item:表单的DOM对象 自定义验证规则
               if(!(/^1\d{10}$/).test(value)){
                   return '请输入11位手机号!';
                   
               }
           },
           code: function(value, item){ //value:表单的值、item:表单的DOM对象 自定义验证规则
               if(!(/^\d{6}$/).test(value)){
                   return '请输入6位验证码!';
               }
           },
           password: function(value, item){ //value:表单的值、item:表单的DOM对象 自定义验证规则
               if(value.length < 6 ){
                   return '密码长度不能少于6位!';
               }
           }
       	});
		
		//$("#btnWxPay").click(function () {
		form.on('submit(btnStuInfo)', function(data){
			//返回的验证码
			var code = $("#code").val();
			var datas = data.field;
			var card = $("#code").val();
			if(code == yzcode){
				
				var saveLoading = parent.layer.msg('用户注册中,请稍候', {
					icon : 16,
					time : false,
					shade : 0.8
				});
				
				//ajax发送信息
	            $.ajax({
	                url: "/regiserinfo",
	                type: "post",
	                data: datas,
	                success: function (res) {
	                	parent.layer.close(saveLoading);
	                	if (res.code == 200) {
	                		 layer.msg("注册成功,跳转中...",{icon:1});
	                         setTimeout(function(){
	                            //如果输入成功,可以跳到另一个你需要的界面
	                            location.replace("/login");
	                          	
	                         },1000)  
	                    }else{
	                    	layer.msg(res.msg);
	                    }
	                }
	            });//结束ajax发送订单信息
	            return false; //表单必加,解决表单不跳转问题
			}else{
				
				layer.msg('验证码不匹配!',{time:3000,icon:5});
				return false;
			}
		});
		
		
		 //短信验证码  
	    var InterValObj; //timer变量,控制时间    
	    var count = 60; //间隔函数,1秒执行    
	    var curCount;//当前剩余秒数    
	    var code = ""; //验证码    
	    var codeLength = 6;//验证码长度  
		//获取手机号 发送验证码
        $('#getcode').click(function (){
        	var regrep=/^1[3|4|5|7|8][0-9]{9}$/;
        	var phone=$('#phone').val();
        	if(!regrep.test(phone)){
        		layer.msg('请输入11位手机号!',{time:3000,icon:5});
				return false;
            }
            
        	 curCount = count;
             // 设置按钮显示效果,倒计时   
             $("#getcode").attr("disabled", "true");
             $("#getcode").val("重新发送(" + curCount + ")");
             InterValObj = window.setInterval(SetRemainTime, 1000); // 启动计时器,1秒执行一次 
        	
            $.ajax({//ajax start
                url: "/sms/sendcode" , // 请求地址
                type: "POST",//请求方式
                data:{phone:phone},
                dataType: "JSON",//返回数据类型
                success:function(data){
                	if(data.code==200){
                		//var datas = data.data;
                        var rescode  = data.data;
                        yzcode = rescode;
                        
                	}else{
                		layer.msg(data.msg)
					}
                   
                }
            })//ajax over
        });
		
        
        //timer处理函数    
        function SetRemainTime() {
            if (curCount == 0) {
                window.clearInterval(InterValObj);// 停止计时器    
                $("#getcode").removeAttr("disabled");// 启用按钮    
                $("#getcode").val("重发验证码");
                code = ""; // 清除验证码。如果不清除,过时间后,输入收到的验证码依然有效    
            } else {
                curCount--;
                $("#getcode").val("重新发送(" + curCount + ")");
            }
        }
		
	});// >=end layui

总结

使用layui模板直接使用ajax发送参数,参照了其他学习方法整理为自己小白使用的短信发送与接收小案例

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Java调用阿里云短信接口的步骤: 1. 首先,你需要在阿里云官网注册并创建一个短信服务。你可以参考阿里云官网提供的文档来了解如何创建短信服务。 2. 在你的Java项目,你需要引入阿里云短信SDK的依赖。你可以在Maven项目的pom.xml文件添加以下依赖: ```xml <dependency> <groupId>com.aliyun</groupId> <artifactId>dysmsapi20170525</artifactId> <version>2.0.6</version> </dependency> ``` 3. 在你的Java代码,你需要导入阿里云短信SDK的相关类和方法。例如: ```java import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.aliyuncs.sms.model.v20170525.*; ``` 4. 创建一个DefaultAcsClient对象,并设置好AccessKey和SecretKey。例如: ```java String accessKeyId = "your_access_key_id"; String accessKeySecret = "your_access_key_secret"; IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); DefaultAcsClient client = new DefaultAcsClient(profile); ``` 5. 构造一个SendSmsRequest对象,并设置好短信相关的参数,例如短信签名、模板ID、手机号码和模板参数。例如: ```java SendSmsRequest request = new SendSmsRequest(); request.setSignName("your_sign_name"); request.setTemplateCode("your_template_code"); request.setPhoneNumbers("your_phone_number"); request.setTemplateParam("{\"code\":\"123456\"}"); ``` 6. 调用client的sendSms方法发送短信,并处理发送结果。例如: ```java try { SendSmsResponse response = client.getAcsResponse(request); if (response.getCode() != null && response.getCode().equals("OK")) { System.out.println("短信发送成功"); } else { System.out.println("短信发送失败,错误码:" + response.getCode()); } } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } ``` 请注意,以上代码仅为示例,你需要根据你的实际情况进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值