我使用的是阿里雲短信服務
代碼前的准備
1. 申請阿里雲的短信服務
2. 添加簽名,這里需要等待審核通過
3. 在模板管理設置自己的短信模板
下面添加模板,選擇驗證碼,模板內容可以直接使用輸入框內的示例,點擊F12,通過Search Element箭頭就可以找到textarea標簽的內容
示例:您的驗證碼為:${code},該驗證碼 5 分鍾內有效,請勿泄漏於他人。
4.點擊自己右上角的頭像,進入Access Key管理
5. 它會跳出一個選項,這里建議使用子用戶AccessKey,避免直接使用最高權限的賬戶,就像數據庫那樣,不可以直接把最高權限程序猿吧.
6.首先創建一個用戶組
6.接着在用戶組里面添加成員
強調一下,這里一定要把編程訪問勾選上,接着再為該用戶授予權限,
創建后,它會為你分配一個AccessKeyID和AccessKey Secret,這里一定要把它們保存到本地,一旦關閉頁面,這些東西都不會再顯示.
這里授予管理短信服務的權限即可
代碼實現
1.創建service層,serviceImpl層,controller層
service層代碼
package com.wfszmg.demo.service;
import java.util.Map;
/**
* @author 無法手執玫瑰
* 2020/07/0022 13:19
*/
public interface SmsSend {
public boolean send(String phoneNum, String templateCode, Map<String,Object> code);
}
serviceImpl層代碼
package com.wfszmg.demo.service.imlp;
import com.alibaba.fastjson.JSONObject;
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.wfszmg.demo.service.SmsSend;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @author 無法手執玫瑰
* 2020/07/0022 13:21
*/
@Service
public class SmsSendImpl implements SmsSend {
@Override
public boolean send(String phoneNum, String templateCode, Map<String, Object> code) {
//連接阿里雲
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "自己用戶的AccessKeyId", "AccessKey Secret");
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("PhoneNumbers", phoneNum);
request.putQueryParameter("SignName", "無法手執玫瑰"); //填自己申請的名稱
request.putQueryParameter("TemplateCode", templateCode);
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code));;
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
return response.getHttpResponse().isSuccess();
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return false;
}
}
controller層
package com.wfszmg.demo.controller;
import com.wfszmg.demo.service.SmsSend;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* @author 無法手執玫瑰
* 2020/07/0022 13:24
*/
@Controller
@CrossOrigin //跨域支持
public class smsController {
@Autowired
private SmsSend smsSend;
@GetMapping("/send/{phone}")
@ResponseBody
public String code(@PathVariable("phone") String phone){
String code = UUID.randomUUID().toString().substring(0,5);
Map<String,Object> map = new HashMap<>();
map.put("code",code);
boolean isSend = smsSend.send(phone,"自己短信模板的模板CODE(以SMS_開頭的)",map);
System.out.println(phone);
if(isSend){
return "發送成功";
}else{
return "發送失敗";
}
}
}
體驗吧
對了,你還要往賬戶里面充點錢!
最后貼一下Test的代碼吧,這樣更把握整體的代碼
package com.wfszmg.demo.utils;
import com.alibaba.fastjson.JSONObject;
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 org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.*;
/**
* @author 無法手執玫瑰
* 2020/07/0022 10:33
*/
@SpringBootTest
public class SmsTest {
@Test
public void contextLoads(){
//連接阿里雲
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "自己用戶的AccessKeyId", "AccessKey Secret");
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("PhoneNumbers", "電話號碼");
request.putQueryParameter("SignName", "無法手執玫瑰");
request.putQueryParameter("TemplateCode", "自己短信模板的模板CODE(以SMS_開頭的)");
//構建短信驗證碼
Map<String, Object> map = new HashMap<>();
map.put("code",123456);
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));;
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}