admin管理员组文章数量:1663052
接下来,通过“短信验证码”功能来演示阿里云短信服务的集成和使用。大体流程如下:
关于阿里云的注册与实名认证,不再赘述。
目录
一、开通短信服务
二、申请认证密钥
三、申请短信签名
四、申请短信模板
五、短信服务API介绍
六、功能测试
一、开通短信服务
二、申请认证密钥
AccessKey就是阿里云颁发给你的一套用户名密码,发送短信要收费吧,所以发送短信时要求带上认证密钥,方便扣钱。
三、申请短信签名
四、申请短信模板
五、短信服务API介绍
此处不再赘述,参考官方的帮助文档下的开发指南:https://help.aliyun/product/44282.html?spm=5176.12212976.0.0.7bf81cbeB1BMoP
六、功能测试
第一步:引入阿里云服务依赖
<!--短信服务--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alicloud-sms</artifactId> </dependency>
第二步:短信发送工具类
package cn.jack.util; 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 lombok.extern.slf4j.Slf4j; @Slf4j public class SmsUtils { //产品名称:云通信短信API产品,开发者无需替换 static final String product = "Dysmsapi"; //产品域名,开发者无需替换 static final String domain = "dysmsapi.aliyuncs"; // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找) static final String accessKeyId = "xxx"; static final String accessKeySecret = "xxx"; /** * 发送短信 * @param phoneNumber 必填:待发送手机号 * @param signName 必填:短信签名-可在短信控制台中找到 * @param templateCode 必填:短信模板-可在短信控制台中找到 * @param templateParam 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为{"name":"abc", "code": "123"} * @return * @throws Exception */ public static SendSmsResponse sendSms(String phoneNumber, String signName, String templateCode, String templateParam) throws ClientException { //可自助调整超时时间 System.setProperty("sun.client.defaultConnectTimeout", "10000"); System.setProperty("sun.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(phoneNumber); //必填:短信签名-可在短信控制台中找到 request.setSignName(signName); //必填:短信模板-可在短信控制台中找到 request.setTemplateCode(templateCode); //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 request.setTemplateParam(templateParam); //选填-上行短信扩展码(无特殊需求用户请忽略此字段) //request.setSmsUpExtendCode("90997"); //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 request.setOutId("yourOutId"); //hint 此处可能会抛出异常,注意catch SendSmsResponse sendSmsResponse = null; try { sendSmsResponse = acsClient.getAcsResponse(request); } catch (Exception e) { log.error("短信发送失败", e); throw new RuntimeException("短信发送失败", e); } return sendSmsResponse; } }
第三步:商品下单成功后,发送短信给用户
package cn.jack.service; import cn.jack.dao.UserDao; import cn.jack.domain.Order; import cn.jack.domain.User; import cn.jack.util.SmsUtils; import com.alibaba.fastjson.JSON; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.annotation.ConsumeMode; import org.apache.rocketmq.spring.annotation.MessageModel; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Random; @Slf4j @Service("shopSmsService") // alibaba内部有个bean叫SmsService,避免重名导致应用启动失败 @RocketMQMessageListener( consumerGroup = "jack-consumer-group", topic = "jack_ts_topic", consumeMode = ConsumeMode.CONCURRENTLY, messageModel = MessageModel.CLUSTERING) public class SmsService implements RocketMQListener<Order> { @Autowired private UserDao userDao; @Override public void onMessage(Order order) { try { log.info("收到订单信息,内容如下:{}, 接下来进行短信发送", order); // TODO 根据订单中的用户id,查询用户信息,获取手机号 User user = this.userDao.findById(order.getUid()).get(); // TODO 生成验证码:6位数,[1-9] StringBuffer buffer = new StringBuffer(); for (int i = 0; i < 6; i++) { int tmp = new Random().nextInt(9) + 1; buffer.append(tmp); } Param templateParam = new Param(buffer.toString()); // TODO 发送短信 SmsUtils.sendSms( user.getTelephone(), "短信签名", "模板code", JSON.toJSONString(templateParam) ); log.info("短信发送成功"); } catch (Throwable throwable) { throwable.printStackTrace(); } } @Data @NoArgsConstructor @AllArgsConstructor class Param{ private String code; } }
访问下单接口http://localhost:8091/order/prod/1 下单成功后,手机收到短信提醒。
版权声明:本文标题:SMS短信服务 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729968432a1217905.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论