lyhzzz 3 роки тому
батько
коміт
fc059c344f

+ 57 - 0
4dkankan-utils-sms/pom.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>4dkankan-utils</artifactId>
+        <groupId>com.fdkankan</groupId>
+        <version>2.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>4dkankan-utils-sms</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+            <version>4.0.3</version>
+        </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
+            <version>1.1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.amazonaws</groupId>
+            <artifactId>aws-java-sdk</artifactId>
+            <version>1.11.327</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.mail</groupId>
+            <artifactId>javax.mail</artifactId>
+            <version>1.5.4</version>
+        </dependency>
+    </dependencies>
+
+</project>

Різницю між файлами не показано, бо вона завелика
+ 271 - 0
4dkankan-utils-sms/src/main/java/com/fdkankan/sms/SendMailAcceUtils.java


+ 228 - 0
4dkankan-utils-sms/src/main/java/com/fdkankan/sms/SmsService.java

@@ -0,0 +1,228 @@
+package com.fdkankan.sms;
+
+import com.alibaba.fastjson.JSONObject;
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
+import com.aliyuncs.exceptions.ClientException;
+import com.aliyuncs.exceptions.ServerException;
+import com.aliyuncs.http.MethodType;
+import com.aliyuncs.profile.DefaultProfile;
+import com.aliyuncs.profile.IClientProfile;
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.services.sns.AmazonSNS;
+import com.amazonaws.services.sns.AmazonSNSClientBuilder;
+import com.amazonaws.services.sns.model.MessageAttributeValue;
+import com.amazonaws.services.sns.model.PublishRequest;
+import com.amazonaws.services.sns.model.PublishResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+public class SmsService {
+
+    private static Logger log = LoggerFactory.getLogger("programLog");
+
+    //初始化ascClient需要的几个参数
+    private static final String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
+    private static final String domain = "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)
+    private static final String accessKeyId = "LTAIUrvuHqj8pvry";//你的accessKeyId,参考本文档步骤2
+    private static final String accessKeySecret = "JLOVl0k8Ke0aaM8nLMMiUAZ3EiiqI4";//你的accessKeySecret,参考本文档步骤2
+
+    private static final String EN_CODE_MSG = "Your vertification code is ${code}. Thank you for using 4DKanKan, please complete your identity verification by entering this code in 5 minutes. Please ignore this message if you don't operate by yourself.";
+
+
+    @Value("${phone.sign:四维看看}")
+    private String sign;
+
+    public String sendSms(String phoneNum, String templateParam, String templateCode) throws Exception {
+        log.info("cnCode:" + templateCode);
+        log.info("templateParam:" + templateParam);
+        log.info("sign:" + sign);
+        log.info("sign:" + new String(sign.getBytes("ISO-8859-1"),"utf-8"));
+        // 可自助调整超时时间
+        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
+        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
+        String result = null;
+        try {
+            // 初始化acsClient,暂不支持region化
+            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
+            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
+            IAcsClient acsClient = new DefaultAcsClient(profile);
+
+            // 组装请求对象-具体描述见控制台-文档部分内容
+            SendSmsRequest request = new SendSmsRequest();
+
+            // 必填:待发送手机号
+            request.setPhoneNumbers(phoneNum);
+            // 必填:短信签名-可在短信控制台中找到
+            request.setSignName(new String(sign.getBytes("ISO-8859-1"),"utf-8"));
+            // 必填:短信模板-可在短信控制台中找到
+            request.setTemplateCode(templateCode);
+
+            // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
+            request.setTemplateParam(templateParam);
+
+            // 选填-上行短信扩展码(无特殊需求用户请忽略此字段)
+            // request.setSmsUpExtendCode("90997");
+
+            // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
+            // request.setOutId("yourOutId");
+
+            // hint 此处可能会抛出异常,注意catch
+            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
+            if (sendSmsResponse != null
+                    && !StringUtils.isEmpty(sendSmsResponse.getCode())){
+
+                if("OK".equals(sendSmsResponse.getCode())){
+                    log.debug("阿里云短信发送成功");
+                }else {
+                    log.debug("阿里云短信发送失败:" + sendSmsResponse.getCode());
+                    log.debug("阿里云短信发送失败原因:" + sendSmsResponse.getMessage());
+                }
+                result = sendSmsResponse.getCode();
+            }
+        }catch (ClientException e){
+            log.error("阿里云短信发送失败:" + e);
+        }
+        return result;
+    }
+
+
+    public boolean sendBuildFailSms(String name, String scene,String userPhone) throws Exception{
+
+        //设置超时时间-可自行调整
+        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
+        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
+        //初始化ascClient需要的几个参数
+        final String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
+        final String domain = "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)
+        //替换成你的AK
+        final String accessKeyId = "LTAIUrvuHqj8pvry";//你的accessKeyId,参考本文档步骤2
+        final String accessKeySecret = "JLOVl0k8Ke0aaM8nLMMiUAZ3EiiqI4";//你的accessKeySecret,参考本文档步骤2
+        //初始化ascClient,暂时不支持多region
+        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,
+                accessKeySecret);
+        try {
+            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
+        } catch (ClientException e1) {
+            // TODO Auto-generated catch block
+            e1.printStackTrace();
+        }
+        IAcsClient acsClient = new DefaultAcsClient(profile);
+        //组装请求对象
+        SendSmsRequest request = new SendSmsRequest();
+        //使用post提交
+        request.setMethod(MethodType.POST);
+        //必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
+        request.setPhoneNumbers(userPhone);
+        //必填:短信签名-可在短信控制台中找到
+        request.setSignName(new String(sign.getBytes("ISO-8859-1"),"utf-8"));
+        //必填:短信模板-可在短信控制台中找到
+        request.setTemplateCode("SMS_199808901");
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("name", name);
+        jsonObject.put("scene", scene);
+        request.setTemplateParam(jsonObject.toJSONString());
+
+        SendSmsResponse sendSmsResponse = null;
+        try {
+            sendSmsResponse = acsClient.getAcsResponse(request);
+        } catch (ServerException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (ClientException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            //System.out.println("向阿里请求发短信失败");
+            log.error("sendSms:向阿里请求发短信失败");
+        }
+        if(sendSmsResponse == null)
+        {
+            log.error("sendSms:向阿里请求发短信失败");
+        }
+        if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
+            //请求成功
+            //System.out.println("向阿里请求发短信成功");
+            log.info("sendSms:向阿里请求发短信成功");
+            return true;
+
+        }else {
+            log.debug("阿里云短信发送失败:" + sendSmsResponse.getCode());
+            log.debug("阿里云短信发送失败原因:" + sendSmsResponse.getMessage());
+        }
+        return false;
+    }
+
+
+    //aws短信
+    private Map<String, MessageAttributeValue> smsAttributes;
+
+
+    public Map<String, MessageAttributeValue> getDefaultSMSAttributes() {
+        if (smsAttributes == null) {
+            smsAttributes = new HashMap<>();
+            smsAttributes.put("AWS.SNS.SMS.SenderID", new MessageAttributeValue()
+                    .withStringValue("4dkankan")
+                    .withDataType("String"));
+            smsAttributes.put("AWS.SNS.SMS.MaxPrice", new MessageAttributeValue()
+                    .withStringValue("1.05")
+                    .withDataType("Number"));
+            smsAttributes.put("AWS.SNS.SMS.SMSType", new MessageAttributeValue()
+                    .withStringValue("Transactional")
+                    .withDataType("String"));
+        }
+        return smsAttributes;
+    }
+
+    public PublishResult sendSMSMessage(String phoneNumber, String message) {
+        return sendSMSMessage(phoneNumber, message, getDefaultSMSAttributes());
+    }
+
+    public PublishResult sendSMSMessage(String phoneNumber, String message, Map<String, MessageAttributeValue> smsAttributes) {
+        AWSCredentials awsCredentials = new AWSCredentials() {
+            @Override
+            public String getAWSAccessKeyId() {
+                return "AKIAWCV5QFZ3ZQS7LBNL"; // 带有发短信权限的 IAM 的 ACCESS_KEY
+            }
+
+            @Override
+            public String getAWSSecretKey() {
+                return "NDzNp/5tqypSxxyPkkoixeJntn5W6dq0cLYV2FUH"; // 带有发短信权限的 IAM 的 SECRET_KEY
+            }
+        };
+        AWSCredentialsProvider provider = new AWSCredentialsProvider() {
+            @Override
+            public AWSCredentials getCredentials() {
+                return awsCredentials;
+            }
+
+            @Override
+            public void refresh() {
+            }
+        };
+        AmazonSNS amazonSNS = null;
+        try {
+            amazonSNS = AmazonSNSClientBuilder.standard().withCredentials(provider).withRegion("eu-central-1").build();
+        } catch (Exception e) {
+
+        }
+        return amazonSNS.publish(
+                new PublishRequest()
+                        .withMessage(EN_CODE_MSG.replace("${code}", message))
+                        .withPhoneNumber(phoneNumber)
+                        .withMessageAttributes(smsAttributes)
+        );
+    }
+
+
+
+}

+ 1 - 0
pom.xml

@@ -9,6 +9,7 @@
         <module>4dkankan-utils-db</module>
         <module>4dkankan-utils-redis</module>
         <module>4dkankan-utils-fyun</module>
+        <module>4dkankan-utils-sms</module>
     </modules>
 
     <groupId>com.fdkankan</groupId>