噼刺噼刺,大家好呀,我是梦梦,我又来了,今天呢,这篇笔记记录的是,我最近学到的一个新知识——短信的第三方接入(ps:梦梦也是刚毕业的学生,首次接触第三方的接入,勿喷勿喷)。
“同学们,开始上课了,今天我们来讲在项目中如何使用SSM接入第三方短信技术。我们知道,当你使用一个软件的时候,都得先注册才能使用,注册的时候会有短信发送验证码这一功能,验证码填写正确了,才能注册成功,否则,会提示手机号或者验证码错误,平时我们都在使用这个功能,但是大家知道这个功能到底是怎么实现的吗?今天我们就是来聊一下这个技术。”李老师边打开ppt,边说着,见我们都摇摇头,李老师就继续说道。
“首先呢,我们需要选择一个服务商,我们可以选择的服务商有:阿里云短信、腾讯云短信、百度云SMS、荣联云通讯,我们今天选择荣联云,因为这个注册之后有8元的免费试用,其他的服务商都需要充钱,大家点击右侧网址注册云联云账号。大家注册过之后来到主页面,因为老师这边呢,之前做过测试,就剩7块多了,大家新注册的账号应该是8元的。”荣联云通讯
“大家来到官网主页面会看到一个开发者账号,咱们大家需要点开眼睛,获取自己的“账户授权令牌”的内容,复制一下。请大家把自己项目的环境配置好,然后再专门建一个properties文件来存放你荣联云账号信息,大家就把刚刚查看的自己的令牌粘贴到第二行“ssm.authToken”中,然后再把自己的账号ID和AppID分别复制到sms.properties配置文件中,我的是已经复制好了的。
“大家粘贴好之后,还是回到荣联云的官网上,左侧有一个‘测试号码’这个专栏,右侧输入你测试的手机号,可以是你自己的,也可以是你同桌的,一会方便注册。”
“接下来,我们开始写测试代码了,先写一个SmsService接口”
/**
* 短信发送接口
* @author hduser
*
*/
public interface SmsService {
/**
* 发送短信
* @param to 是要发送的手机号码,可以用逗号分隔,一次最多支持100个手机号
* @param templateId 是模板ID,在【云通讯】平台上创建的短信模板的ID值;测试的时候可以使用系统的默认模板,id为1
* @param datas 替换模板"您的验证码是{1},请于{2}分钟内正确输入"中的内容
* @throws Exception
*/
public void send(String to, String templateId, String[] datas) throws Exception;
}
“接口写好了,接下来我们是不是就需要写实现类了,同学们,其实这个实现的步骤也不需要我们手动敲代码,在荣联云官网的开发文档里就有示例。现在呢,大家还是进入荣联云的官网首页,依次点击‘开发文档’、‘短信开发’、‘Java JDK’,这时我们会看到好多代码,这些代码就是短信发送验证码的核心代码,咱们可以直接拿来使用,也就是说,把这行代码直接复制到你的实现类中的方法中。”
package cn.itrip.auth.service;
import com.cloopen.rest.sdk.BodyType;
import com.cloopen.rest.sdk.CCPRestSmsSDK;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Set;
@Service
public class SmsServiceImpl implements SmsService{
/**
* 发送短信
*
* @param to 是要发送的手机号码,可以用逗号分隔,一次最多支持100个手机号
* @param templateId 是模板ID,在【云通讯】平台上创建的短信模板的ID值;测试的时候可以使用系统的默认模板,id为1
* @param datas 替换模板"您的验证码是{1},请于{2}分钟内正确输入"中的内容
* @throws Exception
*/
@Override
public void send(String to, String templateId, String[] datas) throws Exception {
//生产环境请求地址:app.cloopen.com
String serverIp = "app.cloopen.com";
//请求端口
String serverPort = "8883";
//主账号,登陆云通讯网站后,可在控制台首页看到开发者主账号ACCOUNT SID和主账号令牌AUTH TOKEN
String accountSId = "8a216da87a332d53017a557137370ce9";
String accountToken = "e9863c2e24ad43cd89a75f5e319211d6";
//请使用管理控制台中已创建应用的APPID
String appId = "8a216da87a332d53017a557138a90cf0";
CCPRestSmsSDK sdk = new CCPRestSmsSDK();
sdk.init(serverIp, serverPort);
sdk.setAccount(accountSId, accountToken);
sdk.setAppId(appId);
sdk.setBodyType(BodyType.Type_JSON);
//HashMap<String, Object> result = sdk.sendTemplateSMS(to,templateId,datas);
HashMap<String, Object> result = sdk.sendTemplateSMS(to,templateId,datas);
if("000000".equals(result.get("statusCode"))){
//正常返回输出data包体信息(map)
HashMap<String,Object> data = (HashMap<String, Object>) result.get("data");
Set<String> keySet = data.keySet();
for(String key:keySet){
Object object = data.get(key);
System.out.println(key +" = "+object);
}
}else{
//异常返回输出错误码和错误信息
System.out.println("错误码=" + result.get("statusCode") +" 错误信息= "+result.get("statusMsg"));
}
}
}
“对了,同学们,不要忘记导依赖。”李老师看着屏幕提醒着我们。
<dependency>
<groupId>com.cloopen</groupId>
<artifactId>java-sms-sdk</artifactId>
<version>1.0.3</version>
</dependency>
“赋值好了吗,同学们?好了的话,我们就开始在controller中测试了。”
@RestController
public class HelloController {
@Resource
private SmsService smsService;
@RequestMapping("/send")
public String sendMsg() throws Exception {
//1,生成一个四位的随机数
int code = MD5.getRandomCode();
//2,数组
String[] datas = {String.valueOf(code),"5"};
//3,发送短信
smsService.send("15239908002","1",datas);
return "短信发送成功";
}
}
“大大家可以跟着我一起测试一下。”
“下面这是荣联云给我发的短信,就看到我的测试成功了,大家的好了吗?”
我们都点点头,说:“好了。”
李老师接着说:“写完之后,是不是感觉发送短信也不难,就是看开发文档就行了,同学们,这就发现,学会看开发文档是不是挺重要的。”我们点点头。
“那行,我们今天就先讲到这,明天再结合项目来详细说说,短信注册再项目中是如何用到的。”
“老师再见。”