package com.zy.crm.manager.utils;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.aliyun.auth.credentials.Credential;
|
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
|
import com.aliyun.sdk.service.dysmsapi20170525.AsyncClient;
|
import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsRequest;
|
import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsResponse;
|
import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsResponseBody;
|
import darabonba.core.client.ClientOverrideConfiguration;
|
|
import java.util.*;
|
import java.util.concurrent.CompletableFuture;
|
import java.util.regex.Matcher;
|
import java.util.regex.Pattern;
|
|
/**
|
* 短信发送工具
|
*/
|
public class SmsUtils {
|
|
/**
|
* 阿里云市场API
|
*/
|
private static boolean aliyun_1(String phone, String code) {
|
ArrayList<Map<String, Object>> list = new ArrayList<>();
|
try {
|
HashMap<String, Object> headers = new HashMap<>();
|
HashMap<String, Object> param = new HashMap<>();
|
|
String APPCODE = "15ce5d8be5e348c7b680dfd7cfb8307e";
|
headers.put("Authorization", "APPCODE " + APPCODE);
|
|
param.put("templateId", "MEA92C3A45");
|
param.put("receive", phone);
|
param.put("tag", code);
|
|
String response = new HttpHandler.Builder()
|
.setUri("https://smkjdxtzjk.market.alicloudapi.com")
|
.setPath("/standard/sms/send")
|
.setHeaders(headers)
|
.setParams(param)
|
.build()
|
.doPost();
|
JSONObject jsonObject = JSON.parseObject(response);
|
if (Integer.parseInt(jsonObject.get("code").toString()) == 200) {
|
return true;
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return false;
|
}
|
/**
|
* 阿里云市场API 分配了新的规划申请单任务!请注意查收!
|
*/
|
private static boolean aliyun_2(String phone, String code) {
|
try {
|
HashMap<String, Object> headers = new HashMap<>();
|
HashMap<String, Object> param = new HashMap<>();
|
|
String APPCODE = "15ce5d8be5e348c7b680dfd7cfb8307e";
|
headers.put("Authorization", "APPCODE " + APPCODE);
|
|
param.put("templateId", "M6F3C81FE3");
|
param.put("receive", phone);
|
param.put("tag", code);
|
|
String response = new HttpHandler.Builder()
|
.setUri("https://smkjdxtzjk.market.alicloudapi.com")
|
.setPath("/standard/sms/send")
|
.setHeaders(headers)
|
.setParams(param)
|
.build()
|
.doPost();
|
JSONObject jsonObject = JSON.parseObject(response);
|
if (Integer.parseInt(jsonObject.get("code").toString()) == 200) {
|
return true;
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return false;
|
}
|
|
private static AsyncClient getClient() {
|
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
|
.accessKeyId("LTAI4GBCtqGZAn5XDEREh1Pp")
|
.accessKeySecret("SQQkh2kps3wxfbNXUg5nLZgWS2CMjm")
|
.build());
|
|
// Configure the Client
|
AsyncClient client = AsyncClient.builder()
|
//.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
|
.credentialsProvider(provider)
|
//.serviceConfiguration(Configuration.create()) // Service-level configuration
|
// Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
|
.overrideConfiguration(
|
ClientOverrideConfiguration.create()
|
// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
|
.setEndpointOverride("dysmsapi.aliyuncs.com")
|
//.setConnectTimeout(Duration.ofSeconds(30))
|
)
|
.build();
|
|
return client;
|
}
|
|
/**
|
* 发送短信验证码-阿里云原生
|
*/
|
private static boolean aliyun_origin(String phone, String code) {
|
AsyncClient client = getClient();
|
try {
|
HashMap<String, Object> templateParam = new HashMap<>();
|
templateParam.put("code", code);
|
|
// Parameter settings for API request
|
SendSmsRequest sendSmsRequest = SendSmsRequest.builder()
|
.phoneNumbers(phone)
|
.signName("某某商场")
|
.templateCode("SMS_195220399")
|
.templateParam(JSON.toJSONString(templateParam))
|
// Request-level configuration rewrite, can set Http request parameters, etc.
|
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
|
.build();
|
|
// Asynchronously get the return value of the API request
|
CompletableFuture<SendSmsResponse> response = client.sendSms(sendSmsRequest);
|
// Synchronously get the return value of the API request
|
SendSmsResponse resp = response.get();
|
SendSmsResponseBody body = resp.getBody();
|
// System.out.println(body.getCode());
|
// System.out.println(body.getMessage());
|
if (body.getCode().equals("OK")) {
|
return true;
|
}
|
return false;
|
} catch (Exception e) {
|
return false;
|
} finally {
|
// Finally, close the client
|
client.close();
|
}
|
}
|
|
/**
|
* 发送短信验证码-阿里云原生
|
*/
|
public static boolean sendSmsCode(String phone, String code) {
|
return aliyun_1(phone, code);
|
}
|
|
/**
|
* 发送短信-阿里云原生
|
*/
|
public static boolean sendSmsCodeText(String phone, String code) {
|
return aliyun_2(phone, code);
|
}
|
|
/**
|
* 获取随机数
|
* @param length 随机数长度
|
*/
|
public static String getRandomNum(Integer length) {
|
Random random = new Random();
|
StringBuffer buffer = new StringBuffer();
|
for (int i = 0; i < length; i++) {
|
buffer.append(random.nextInt(10));
|
}
|
return buffer.toString();
|
}
|
|
/**
|
* 正则验证手机号
|
*/
|
public static boolean verifyPhone(String phone) {
|
// 定义手机号码的正则表达式
|
String regex = "^1[3456789]\\d{9}$";
|
// 编译正则表达式
|
Pattern pattern = Pattern.compile(regex);
|
// 创建 Matcher 对象
|
Matcher matcher = pattern.matcher(phone);
|
// 进行匹配
|
if (!matcher.matches()) {
|
return false;
|
}
|
return true;
|
}
|
|
public static void main(String[] args) throws Exception {
|
sendSmsCode("17788886666","666666");
|
}
|
|
}
|