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"); 
 | 
    } 
 | 
  
 | 
} 
 |