腾讯云——短信服务


今天我们来讲一讲小马哥旗下的腾讯云短信服务业务,话不多说进入正题:

第一步:当然是注册账号信息啦

第二步:创建签名,如果不懂其实可以直接添加客服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第二第三索引添加参数。切记顺序不可乱。

 

 好,今天就写到这里,顺便附带一张成功的截图

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM