首先,我们进入我所安利的短信平台---->乐讯通PaaS平台 (loktong.com)
然后进行注册,产品选择增值短信
登录之后,点击左边文字短信
一般用于个人开发或者企业开发仅仅是为了验证码,便可以申请一个自定义签名和自定义模板,点开便知道怎么申请,着急申请的话就找到客服让他帮你审核
在这里我提醒大家,要进行企业认证或者个人实名认证,短信平台才能真正开户,要不然只能为测试用户。
然后就是我们的api接口制作,大家可以看官方文档指定自己的工具类,我这里是自己搞了一个短信工具类
加上这段依赖
<!-- 调API通信-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
1.通信工具类
package com.sk.utils;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Component
public class HttpClientUtil {
public static String doGet(String url, Map<String, String> param) {
// 建立Httpclient对象
CloseableHttpClient httpclient = HttpClients.createDefault();
String resultString = "";
CloseableHttpResponse response = null;
try {// 建立uri
URIBuilder builder = new URIBuilder(url);
if (param != null) {
for (String key : param.keySet()) {
builder.addParameter(key, param.get(key));
}
}
URI uri = builder.build();
// 建立http GET请求
HttpGet httpGet = new HttpGet(uri);
// 执行请求
response = httpclient.execute(httpGet);
System.out.println(httpclient);
System.out.println(response);
System.out.println(httpGet);
// 判断返回状态是否为200
if (response.getStatusLine().getStatusCode() == 200) {
resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (response != null) {
response.close();
}
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultString;
}
public static String doGet(String url) {
return doGet(url, null);
}
public static String doPost(String url, Map<String, String> param) {
// 建立Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 建立Http Post请求
HttpPost httpPost = new HttpPost(url);
// 建立参数列表
if (param != null) {
List<NameValuePair> paramList = new ArrayList<>();
for (String key : param.keySet()) {
paramList.add(new BasicNameValuePair(key, param.get(key)));
}
// 模拟表单
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
httpPost.setEntity(entity);
}
// 执行http请求
response = httpClient.execute(httpPost);
resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return resultString;
}
public static String doPost(String url) {
return doPost(url, null);
}
}
2.参数bean类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserData {
private String phone;
private String code;
}
3.参数工具类
package com.sk.utils;
import com.sk.pojo.UserData;
import org.springframework.stereotype.Component;
import org.springframework.util.DigestUtils;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class smsUtils {
private static final String ACTION = "sendtemplate";//定值
private static final String USER_NAME = "";//账号
private static final String PASSWORD = "";//密码
private static final String CODE_TOKEN = "";//验证码token
private static final String TEMPLATE_ID = "";//模板id
//将密码进行MD5加密
public String pwdToMD5(){
return DigestUtils.md5DigestAsHex(PASSWORD.getBytes()).toUpperCase();
}
//拼接短信接收人电话号码和验证码
public String getParams(List<UserData> userData){
StringBuilder stringBuilder = new StringBuilder();
for(UserData data : userData){
stringBuilder.append(data.getPhone()).append("|")
.append(data.getCode()).append("@");
}
return stringBuilder.substring(0, stringBuilder.toString().length() - 1);
}
//得到当前时间戳并转为string
public String getTimestamp(){
return String.valueOf(new Date(System.currentTimeMillis()).getTime());
}
//得到sign签名
public String getSign(){
smsUtils smsUtils = new smsUtils();
String str = "action=" + ACTION +
"&username=" + USER_NAME +
"&password=" + smsUtils.pwdToMD5() +
"&token=" + CODE_TOKEN +
"×tamp=" + smsUtils.getTimestamp();
return DigestUtils.md5DigestAsHex(str
.getBytes()).toUpperCase();
}
//返回map
public Map<String,String> getParameters(List<UserData> userData){
smsUtils smsUtils = new smsUtils();
Map<String,String> paramsMap = new HashMap<>();
paramsMap.put("action",ACTION);
paramsMap.put("username",USER_NAME);
paramsMap.put("password",smsUtils.pwdToMD5());
paramsMap.put("token",CODE_TOKEN);
paramsMap.put("templateid",TEMPLATE_ID);
paramsMap.put("param",smsUtils.getParams(userData));
paramsMap.put("timestamp",smsUtils.getTimestamp());
paramsMap.put("sign",smsUtils.getSign());
return paramsMap;
}
}
4.url及端口全局配置
server:
# 端口
port: 8186
#请求url配置
#URL: 填入模板短信接口地址
5.api层
package com.sk.api.controller;
import com.sk.pojo.RespBean;
import com.sk.pojo.UserData;
import com.sk.pojo.utils.HttpClientUtil;
import com.sk.pojo.utils.smsUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/message")
public class MessageController{
@Value("${URL}")
private String url;
private smsUtils smsUtils;
@Autowired
public void setSmsUtils(smsUtils smsUtils){
this.smsUtils = smsUtils;
}
@RequestMapping(value = "/send/{phone}",method = RequestMethod.POST)
public RespBean sendMessage(@PathVariable("phone") String phone){
int codeNum = (int) ((Math.random() * 9 + 1) * 100000);
List<UserData> userDataList = new ArrayList<>();
userDataList.add(new UserData(phone,String.valueOf(codeNum)));
String res = HttpClientUtil.doPost(url, smsUtils.getParameters(userDataList));
return RespBean.success(res);
}
}
里面的全局返回结果可以在我的另一个博客进行下载,以上就是我的短信blog啦
将上边这些代码段整合为一个jar包,上传到服务器便可以做成自己的短信api了!
测试结果:
上面的参数工具类,只需要将自己的参数填进去就行!