1.所用的服务器是阿里云的
所需相关jar包
aliyun-java-sdk-core-3.3.1
aliyun-java-sdk-dysmsapi-1.0.0
相关jar可以在阿里云的官网上下载
2.具体流程
①前台通过触发后台的发送短信的功能,需要传递过来用户的手机号(ajax什么都行)。
②正式的后台代码,这里返回前台的是否发送成功,比较简单的一个demo,建议用之前先看看官网的api文档和demo。
@ResponseBody @RequestMapping(value="api-user-sendMess") public String sendMess(@RequestParam(value="phone")String phone,HttpSession session){ // 设置超时时间-可自行调整 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000"); //初始化ascClient需要的几个参数 final String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改) final String domain = "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改) // 替换成你的AK final String accessKeyId = "xxx";// 你的accessKeyId final String accessKeySecret = "xxx";// 你的accessKeySecret //初始化ascClient,暂时不支持多region(请勿修改) IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); try { DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); } catch (ClientException e) { // TODO Auto-generated catch block e.printStackTrace(); } IAcsClient acsClient = new DefaultAcsClient(profile); //组装请求对象 SendSmsRequest request = new SendSmsRequest(); //使用post提交 request.setMethod(MethodType.POST); // 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为20个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式 request.setPhoneNumbers("xxx"); // 必填:短信签名-可在短信控制台中找到 request.setSignName("xxx"); // 必填:短信模板-可在短信控制台中找到//SMS_112780058//13704098349 request.setTemplateCode("SMS_112780058"); // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 int x = new Random().nextInt(1000000);
//参数为json字符串形式,其中key值为固定的 name code 不可变 request.setTemplateParam("{\"name\":\"xxx\",\"code\":\"" + x + "\"}"); request.setSmsUpExtendCode("66666"); // 请求失败这里会抛ClientException异常 SendSmsResponse sendSmsResponse=null; try { sendSmsResponse = acsClient.getAcsResponse(request); } catch (ServerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientException e) { // TODO Auto-generated catch block e.printStackTrace(); } String result=null; if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { // 请求成功 result= "1"; session.setAttribute("code", x); }else if(sendSmsResponse.getCode().equals("isv.BUSINESS_LIMIT_CONTROL")){ result= "0"; session.setAttribute("code", ""); } //错误提示sendSmsResponse.getCode() return result; }