java 阿里云短信服务

提示:阿里云设置方面就省略了。

一、依赖

代码如下(示例):

	/*阿里云 短信服务 Java SDK*/
    compile group: 'com.aliyun', name: 'aliyun-java-sdk-core', version: '4.5.16'
    compile group: 'com.aliyun', name: 'aliyun-java-sdk-dysmsapi', version: '1.1.0'

二、短信工具类

代码如下(示例):

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.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

/**
 * 阿里云短信服务
 */
@Service
public class SmsAliyunService {

    private static final Logger log = LoggerFactory.getLogger(SmsAliyunService.class);

    // 产品名称:云通信短信API产品,开发者无需替换
    private static final String product = "Dysmsapi";
    //产品域名,开发者无需替换
    private static final String domain = "dysmsapi.aliyuncs.com";
    //此处需要替换成开发者自己的AK(在阿里云访问控制台寻找,刚开通的AccessKey)
    private static final String accessKeyId = "";
    private static final String accessKeySecret = "";
    //模板CODE
    private static final String templateCode = "";
    //短信签名
    private static final String signName = "";

    /**
     * 过程逻辑
     *
     * @param paramMap
     * @return
     * @throws com.aliyuncs.exceptions.ClientException
     */
    public static SendSmsResponse sendSms(Map<String, String> paramMap) throws ClientException {
        //可自助调整超时时间
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");

        //初始化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(paramMap.get("phoneNumber").toString().trim());

        //必填:短信签名-可在短信控制台中找到
        request.setSignName(paramMap.get("signName").toString());    // TODO 修改成自己的

        //必填:短信模板-可在短信控制台中找到
        request.setTemplateCode(paramMap.get("templateCode").toString());    // TODO 修改成自己的

        //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
        request.setTemplateParam(paramMap.get("templateParam").toString()); // TODO 修改成自己的

        //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
        //request.setSmsUpExtendCode(paramMap.get(“extendCode”).toString());

        //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
        //request.setOutId("yourOutId");

        //hint 此处可能会抛出异常,注意catch
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);

        if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
            log.info("短信发送成功!");
        } else {
            log.info("短信发送失败!");
        }
        return sendSmsResponse;
    }


    /**
     * 发送验证码短信方法,外部调用
     * <p>
     * 验证码${code},您正在注册成为${product}用户,感谢您的支持!
     * templateParam 需要josn格式 替换${code} ${product}内容
     *
     * @param phoneNumber 接收者的手机号
     * @return msg
     * @throws com.aliyuncs.exceptions.ClientException
     */
    public static String sendMsg(String phoneNumber) throws ClientException {
        String randomNum = createRandomNum(4);
        String templateParam = "{\"code\": \"" + randomNum + "\",\"product\":\"客服\"}";//转义字符\"
        Map<String, String> paramMap = new HashMap<>();
        paramMap.put("phoneNumber", phoneNumber);//接收者的手机号
        paramMap.put("signName", signName);
        paramMap.put("templateCode", templateCode);
        paramMap.put("templateParam", templateParam);
        SendSmsResponse sendSmsResponse = null;
        sendSmsResponse = sendSms(paramMap);
        if (!(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK"))) {
            if (sendSmsResponse.getCode() == null) {
                return "发送失败";
            }
            if (!sendSmsResponse.getCode().equals("错误")) {
                return "发送失败";
            }
        }
        return randomNum;//后台匹配
    }

    /**
     * 生成随机数
     *
     * @param num 位数
     * @return
     */
    public static String createRandomNum(int num) {
        String randomNumStr = "";
        for (int i = 0; i < num; i++) {
            int randomNum = (int) (Math.random() * 10);
            randomNumStr += randomNum;
        }
        return randomNumStr;
    }


}


总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家的支持。
希望能给大家带来些许灵感。

XH:别否定自己,你特别的好,如沐春风。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值