Java实现腾讯云短信服务功能(保姆级,超详细)

1.注册腾讯云

这里就不过多赘述了可以使用vx扫一扫快速注册。

2.开通短信服务

————————————————
在这里插入图片描述

3.创建短信签名

在这里插入图片描述
( 现在腾讯不允许个人申请短信签名了,问的客服,因为一直申请不过)
在这里插入图片描述
这里测试过小程序和公众号,两者区别不大,有哪个用哪个,都没有建议公众号注册一个也比较快;证明上传不知道怎么传,可以点击“查看案例”根据官方提示操作。

创建签名之后,状态会进入“待审核”,审核通过之后会变成“已通过”,我申请的时候大概也就十来分钟左右就通过了,正好可以趁着这个时间去创建正文模板。

4.创建正文模板

在这里插入图片描述
接着就要开始创建应用了:
在这里插入图片描述

5、创建你的云 API 密钥

在这里插入图片描述
ok,此刻我们的所有准备工作都已经做完了,那此时我们应有如下的资源:

1、短信套餐(就是你能发送多少条短信的资格)
2、短信签名
3、短信模板
4、应用
5、云 API

6、Java 编码实现短信发送

现在是万事俱备了,就差写代码实现了。而因为腾讯对于 API 鉴权这块非常复杂所以腾讯建议我们使用他们提供的 SDK 进行开发,所以本次代码的编写也其 SDK 上做了一些微调而已。

1)引入依赖:

<!-- 腾讯短信sdk -->
<dependency>
    <groupId>com.tencentcloudapi</groupId>
    <artifactId>tencentcloud-sdk-java</artifactId>
    <version>3.1.270</version>
</dependency>

2)编写短信发送 util

// 注意引入 lombok
@Slf4j
public class SendSmsUtil {

    public static Boolean sendSms(SendSmsRequest request) {
        Credential cred = new Credential(request.getSecretId(), request.getSecretKey());

        SmsClient client = new SmsClient(cred, "ap-guangzhou");

        final var req = new com.tencentcloudapi.sms.v20210111.models.SendSmsRequest();
        req.setPhoneNumberSet(new String[]{"+86" + request.getPhone()});
        req.setSmsSdkAppId(request.getSmsSdkAppId());
        req.setSignName(request.getSignName());
        req.setTemplateId(request.getTemplateId());
        req.setTemplateParamSet(request.getTemplateParamSet());

        SendSmsResponse res = null;
        try {
            res = client.SendSms(req);
        } catch (TencentCloudSDKException e) {
            log.error("发送短信出错:", e);
            return Boolean.FALSE;
        }
        log.error("发送短信结果:", SendSmsResponse.toJsonString(res));

        if (Objects.nonNull(res.getSendStatusSet()) && res.getSendStatusSet().length > 0 && "Ok".equals(res.getSendStatusSet()[0].getCode())){
            return Boolean.TRUE;
        }
        return Boolean.FALSE;
    }
    
    /**
     * 参数对象
     */
    @Data
    public static class SendSmsRequest {
        /**
         * 电话
         */
        private String phone;

        /**
         * 短信签名内容,必须填写已审核通过的签名
         */
        private String signName;

        /**
         * 模板 ID: 必须填写已审核通过的模板 ID
         */
        private String templateId;

        /**
         * 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空
         */
        private String[] templateParamSet;

        /**
         * 应用id
         */
        private String smsSdkAppId;
        /**
         * 云api密钥中的 secretId
         */
        private String secretId;

        /**
         * 云api密钥中的 secretKey
         */
        private String secretKey;
    }
}

3)测试

public class SendSmsUtil {
    public static void main(String[] args) {
        SendSmsRequest request = new SendSmsRequest();
        request.setPhone("电话");

        request.setSmsSdkAppId("应用id");

        request.setSecretId("API的SecretId");
        request.setSecretKey("API的SecretKey");

        request.setSignName("签名内容");
        request.setTemplateId("模板id");
        // 这个值,要看你的模板中是否预留了占位符,如果没有则不需要设置
        request.setTemplateParamSet(new String[]{"模板中的参数值,如果没有则为空"});
        SendSmsUtil.sendSms(request);
    }
}

此时,手机会收到一条短信

JWT(JSON Web Token)是一种轻量的身份验证协议,常用于无状态的Web应用中。简单来说,它是一个包含用户信息的安全字符串,由三部分组成:头部、负载和签名。下面是使用Node.js和`jsonwebtoken`库进行JWT实现的步骤(保姆教程): 1. **安装依赖**: 首先需要安装`jsonwebtoken`库,可以使用npm安装: ``` npm install jsonwebtoken ``` 2. **创建服务端路由**: 在服务器端设置一个POST请求处理登录请求,接收用户名和密码,如: ```javascript const jwt = require('jsonwebtoken'); app.post('/login', async (req, res) => { // 假设验证用户名和密码的逻辑已存在 const user = await authenticateUser(req.body.username, req.body.password); if (!user) { return res.status(401).json({ message: 'Invalid credentials' }); } // 创建JWT const token = jwt.sign({ userId: user.id }, 'your-secret-key', { expiresIn: '1h' }); // 使用一个安全的密钥 res.json({ access_token: token }); }); ``` 3. **生成Token**: 当用户成功登录后,服务端会生成一个JWT并返回给客户端。 4. **客户端存储Token**: 客户端通常会在浏览器的本地存储(localStorage或cookie)中保存这个Token,或者将它附加到HTTP头中(例如`Authorization: Bearer <token>`)。 5. **保护API资源**: 对于需要授权的API,可以在中间件中检查JWT是否有效: ```javascript app.get('/protected-resource', verifyToken, (req, res) => { // 这里可以访问用户信息,因为已经通过验证 console.log(req.user); // 用户数据 res.json({ message: 'You are authenticated' }); }); function verifyToken(req, res, next) { const bearerHeader = req.headers['authorization']; if (typeof bearerHeader !== 'undefined') { const token = bearerHeader.split(' ')[1]; try { const decoded = jwt.verify(token, 'your-secret-key'); req.user = decoded; next(); } catch (err) { return res.status(401).json({ message: 'Unauthorized' }); } } else { return res.status(401).json({ message: 'No token provided' }); } } ``` 6. **刷新Token**: 如果JWT过期,可以考虑提供一个刷新令牌的API,允许用户在token失效时获取新的JWT。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值