今天我们来讲一讲小马哥旗下的腾讯云短信服务业务,话不多说进入正题:
第一步:当然是注册账号信息啦
第二步:创建签名,如果不懂其实可以直接添加客服qq询问
第三步:填写签名信息,如果是个人使用而且没有营业执照的话可以选则公众号,去微信公众号官网去创建公众号
微信公众号平台:https://mp.weixin.qq.com/
注册订阅号:
第四步:创建正文模板也就是短信模板
这里没啥好讲的值得注意的地方就是态度要诚恳不然有你好受的,别问我咋知道的。
第五步:知晓短信服务中重要的信息
在签名和正文模板都创建好之后,获取关键信息。其中签名管理中的签名内容、正文模板中的模板ID以及应用中的SDKAppID、App Key
第六步:正文来了,java开发
1.引入腾讯云短信依赖
<!--腾讯云短信发送api--> <dependency> <groupId>com.github.qcloudsms</groupId> <artifactId>qcloudsms</artifactId> </dependency>
2.代码编写
事先声明,这里的业务流程是首先向mq发送指令(发送短信指令),然后让mq去发送短信
/** * 向mq发送消息 让其发送短信 * @param phone * @return */ public ResponseResult sendMessage(String phone,String code) { /* if(StringUtils.isEmpty(phone)){ ExceptionCast.cast(CommonCode.INVALID_PARAM); } //验证电话号码是否存在 User user = userRepository.findByPhone(phone); if(user == null){ ExceptionCast.cast(UserCode.NUMBER_NOT_FOUND); } //向cookie存放验证码 this.saveCookie(phone,code); */ //向mq发送消息 HashMap<String, String> map = new HashMap<>(); map.put("phone",phone); map.put("code",code); String jsonString = JSON.toJSONString(map); rabbitTemplate.convertAndSend(RabbitmqConfig.GP_ROUTING_CMS_EXCHANGE,sms_routing_reset,jsonString); return new ResponseResult(UserCode.MESSAGE_SEND_SUCCESS); }
mq接收到消息后:
控制层:
@Component public class SmsSendCode { @Autowired private SmsSendCodeService smsSendCodeService; private static final Logger LOGGER = LoggerFactory.getLogger(SmsSendCode.class); /** * 监听${gp.mq.sms_queue_reset} 队列 * @param msg */ @RabbitListener(queues = {"${gp.mq.sms_queue_reset}"}) public void SmsSendCode(String msg){ Map map = JSON.parseObject(msg, Map.class); String phone = (String) map.get("phone"); String code = (String) map.get("code"); if(StringUtils.isEmpty(phone)){ LOGGER.error("receive smsSendCode,phone is null,phone:{}",phone); } if(StringUtils.isEmpty(code)){ LOGGER.error("receive smsSendCode,phone is null,code:{}",code); } smsSendCodeService.SmsSend(phone,code); } }
业务层:
/** * @author 码农界的小学生 * @description:实现短信发送业务层 * @title: SmsSendCodeService * @projectName graduation-project * @description: TODO * @date 2020/3/27 0:01 */ @Service public class SmsSendCodeService { // 短信应用 SDK AppID int appid = 你的AppID; // SDK AppID 以1400开头 // 短信应用 SDK AppKey String appkey = "你的AppKey"; // 签名 String smsSign = "你的签名内容"; // NOTE: 签名参数使用的是`签名内容`,而不是`签名ID`。这里的签名"腾讯云"只是示例,真实的签名需要在短信控制台申请 /** * 发送验证码 * @param phone */ public void SmsSend(String phone,String code) { // 短信模板 ID,需要在短信应用中申请 int templateId = 563864; // NOTE: 这里的模板 ID`7839`只是示例,真实的模板 ID 需要在短信控制台中申请 ArrayList<String> list = new ArrayList<>(); list.add(code); try { SmsSingleSender ssender = new SmsSingleSender(appid, appkey); SmsSingleSenderResult result = ssender.sendWithParam("86", phone, templateId,list, smsSign, "", ""); //System.out.println("验证码码为:"+code); //System.out.println(result); } catch (HTTPException e) { // HTTP 响应码错误 e.printStackTrace(); } catch (JSONException e) { // JSON 解析错误 e.printStackTrace(); } catch (IOException e) { // 网络 IO 错误 e.printStackTrace(); } } }
上述代码中result为发送后的状态码等信息,可对应参考官方短信状态码查看错误信息。
list中放入动态的参数,例如下图,想往{1}中传入验证码,只需要在list加入的第一个索引添加的是验证码,同理如果往{2}{3}传参需要在list第二第三索引添加参数。切记顺序不可乱。
好,今天就写到这里,顺便附带一张成功的截图