java http 短信发送_【第4期】Springboot:对接阿里云短信服务

本文介绍了如何在SpringBoot应用中集成阿里云短信服务,用于发送验证码。首先购买并配置阿里云短信服务,包括设置签名和模板。接着在SpringBoot项目中引入依赖,创建服务接口,使用AkId、AkSecret、signName和templateCode等参数从数据库获取配置,并结合验证码生成方法完成短信发送功能。最后展示了实际发送的短信效果,虽然阿里云目前的通知信息不显示图标和公司名称,但整体对接流程顺利完成。
摘要由CSDN通过智能技术生成
原创文章,转载请注明原文章地址,谢谢!

根据公司业务需要实现发送短信验证码的功能,于是开通了阿里的短信功能,单条短信0.045元左右,可以购买套餐包,相对比较优惠。

56f39226ab2275032dd1b78268c9797d.png

第一步、短信配置

1)购买成功后,进入短信服务控制台进行参数配置

28d70abf2ce60847604b4e54d7b4939b.png

2)点击左侧“国内信息”

28919c7aad4b653b78d63c22c383551b.png

3)签名配置
说明:签名为接收短信时显示的发送方,一般为app名称或公司名,其它按提示填写完等待审核就行。

8294040e31b6a0f50e55c1cb6807905a.png

4)模板配置

模板配置为短信内容的配置,模板名称一般与签名相同就可,模板内容可灵活设置,如 “您的 验证码为:${code},2分钟内有效。如非本人操作,请忽略本短信!”

6ad6b0ecd1a0bfb445620549dda7d3d0.png

审核通过后,会生成模板CODE,这个需要用到。

da9842d0f074814f9c17fc6a7ffc996c.png

第二步、springboot对接

1)引入依赖

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.1.0</version>
</dependency>

2)service

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.qh.app.repository.AppConfigRepository;
import com.qh.app.service.SmsConfigService;
import com.qh.common.entity.ConfigEntity;
import com.qh.common.exception.BizException;
import com.qh.common.exception.ResultEnum;
import com.qh.common.response.SmsResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
​
@Service
public class SmsConfigServiceImpl implements SmsConfigService {
    public final static Logger logger = LoggerFactory.getLogger(SmsConfigServiceImpl.class);
​
    @Autowired
    private AppConfigRepository appConfigRepository;
    /**
     * 发送校验码
     */
    @Override
    public String send(String phone,String companyNum) {
        ConfigEntity configEntity = getConfigEntity(companyNum);
        DefaultProfile profile = DefaultProfile.getProfile("default", configEntity.getSmsAkId(), configEntity.getSmsAkSecret());
        IAcsClient client = new DefaultAcsClient(profile);
        CommonRequest request = new CommonRequest();
        //request.setProtocol(ProtocolType.HTTPS);
        request.setMethod(MethodType.POST);
        request.setDomain("dysmsapi.aliyuncs.com");
        request.setVersion("2017-05-25");
        request.setAction("SendSms");
        request.putQueryParameter("PhoneNumbers", phone);
        request.putQueryParameter("SignName", configEntity.getSmsSignName());
        request.putQueryParameter("TemplateCode", configEntity.getSmsTemplateCode());
        String verifyCode =getCode();
        request.putQueryParameter("TemplateParam", "{"code":"" + verifyCode + ""}");
        try {
            CommonResponse response = client.getCommonResponse(request);
            logger.info("发送校验码返回结果:{}",response.getData());
            SmsResponse smsResponse = JSONObject.parseObject(response.getData(),SmsResponse.class);
            if(!"OK".equals(smsResponse.getCode())){
                throw new BizException(ResultEnum.VERIFY_CODE_SEND_ERR);
            }
            return verifyCode;
        } catch (ServerException e) {
            e.printStackTrace();
            throw new BizException(ResultEnum.VERIFY_CODE_SEND_ERR);
        } catch (ClientException e) {
            e.printStackTrace();
            throw new BizException(ResultEnum.VERIFY_CODE_SEND_ERR);
        }
    }
​
    private ConfigEntity getConfigEntity(String companyNum){
        ConfigEntity configEntity = appConfigRepository.queryByCompanyNum(companyNum);
        if(configEntity==null){
            throw new BizException(ResultEnum.COMPANYNUM_NO_CONFIG);
        }
        return configEntity;
    }
​
    private static String getCode() {
        return ((int) ((Math.random() * 9 + 1) * 100000))+"";
    }
}
​

短信发送需要四个参数:AkId、AkSecret、signName、templateCode,其中AkId、AkSecret是阿里云账号的AkId、AkSecret,signName是上面设置的短信签名名称,templateCode是上面设置的短信模板code。这四个参数我配置在了数据库中,通过ConfigEntity获取。

getCode方法为随机生成的短信验证码的方法。

3)演示

ad1f17d3d298ea5f77894b658d91456f.png

d9ef76bb4992df0d887996a7053f0c49.png

点击"验证码"后,收到短信如上,至此,对接成功。

:用了一段时间后发现阿里云短信的一个问题,通知信息里没有显示图标和公司app名称,咨询客服后回复说是还没有实现此功能。好吧!!!

bcade340caf16f7c8667f7ddbf16191d.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值