SpringBoot集成阿里云短信验证码

SpringBoot集成阿里云短信验证码

在配好了短信模板的前提下,我们进入到短信服务的快速学习和测试这个面板(温馨提示,发送短信是要收费的,账户里面没资金也可能在后面会导致短信发送失败,可以先在账户里面充几角钱)
在这里插入图片描述
然后我们进入到测试界面
在这里插入图片描述
你可以跟着它的官方文档去完成,可以参考我的步骤,接下来我将分享我具体的操作

我就将它封装到了一个类里面,然后去改写了一些方法,让它按照我的逻辑来完成,其实官方给的注释也很详细,基本都能很轻易的读懂

@Service
public class Sample {

    /**
     * <b>description</b> :
     * <p>使用AK&amp;SK初始化账号Client</p>
     * @return Client
     *
     * @throws Exception
     */
    public static com.aliyun.teaopenapi.Client createClient() throws Exception {
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId("你自己的accessKeyId")
                // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret("你自己的accessKeySecret"); 
        // 当然这里建议你最好是读取配置文件里面的值(定义两个变量用@Value注解来注入进来)
        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new com.aliyun.teaopenapi.Client(config);
    }

    /**
     * <b>description</b> :
     * <p>API 相关</p>
     *
     *
     * @return OpenApi.Params
     */
    public static com.aliyun.teaopenapi.models.Params createApiInfo() throws Exception {
        com.aliyun.teaopenapi.models.Params params = new com.aliyun.teaopenapi.models.Params()
                // 接口名称
                .setAction("SendSms")
                // 接口版本
                .setVersion("2017-05-25")
                // 接口协议
                .setProtocol("HTTPS")
                // 接口 HTTP 方法
                .setMethod("POST")
                .setAuthType("AK")
                .setStyle("RPC")
                // 接口 PATH
                .setPathname("/")
                // 接口请求体内容格式
                .setReqBodyType("json")
                // 接口响应体内容格式
                .setBodyType("json");
        return params;
    }
    
    public Map<String,?> sendSms(String phone,String code,String SignName,String TemplateCode) throws Exception {
        com.aliyun.teaopenapi.Client client = Sample.createClient();
        com.aliyun.teaopenapi.models.Params params = Sample.createApiInfo();
        java.util.Map<String, Object> queries = new java.util.HashMap<>();
        // query params
        queries.put("PhoneNumbers", phone);// 接收短信的手机号码
        queries.put("SignName", SignName); // 短信签名名称
        queries.put("TemplateCode", TemplateCode); // 短信模板CODE
        queries.put("TemplateParam", "{\"code\":\"" + code + "\"}");// 短信模板变量对应的实际值
        // runtime options
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        com.aliyun.teaopenapi.models.OpenApiRequest request = new com.aliyun.teaopenapi.models.OpenApiRequest()
                .setQuery(com.aliyun.openapiutil.Client.query(queries));
        // 复制代码运行请自行打印 API 的返回值
        // 返回值实际为 Map 类型,可从 Map 中获得三类数据:响应体 body、响应头 headers、HTTP 返回的状态码 statusCode。
        return client.callApi(params, request, runtime);
    }
}

然后我在其他业务里面去调用它

@Service
@Slf4j
public class AliApiServiceImpl implements AliApiService {
    private static final String STRING_NAME = "xxx的社区管理系统";
    @Resource
    private RedisService redisService;
    @Value("${ali.api.sms}")
    private String smsAppCode;
    @Autowired
    private Sample sample;
    @Override
    // 发送短信 修改密码
    public ResponseEnum sendSms(String phone) throws Exception {
        return sendSms(phone, null);
    }

    @Override
    // 发送短信
    public ResponseEnum sendSms(String phone, String code) throws Exception {
        if (redisService.get(phone) == null) {
            code = StrUtil.isBlank(code) ? Utils.getRandomSixStr() : code.substring(2);
            //md5加密
            boolean result = redisService.set(phone, MD5.create().digestHex(code), 60);
            if (result) {
                Map<String, ?> response = sample.sendSms(phone, code, STRING_NAME, smsAppCode);
                String body = response.get("body").toString();
                log.info("短信接口结果:" + body);
                log.info("发送的短信内容:{}", code);
                JsonParser jsonParser = new JsonParser();
                JsonElement bodyJson = jsonParser.parse(body);
                String Message = bodyJson.getAsJsonObject().get("Message").getAsString();
                if (Message.equals("OK")) {
                    return ResponseEnum.SEND_SUCCESS;
                } else {
                    return ResponseEnum.OTHER_ERROR;
                }
            } else {
                return ResponseEnum.OTHER_ERROR;
            }
        } else {
            return ResponseEnum.SEND_WAIT_ERROR;
        }
    }

在这里插入图片描述
最后得到的结果
在这里插入图片描述
所以我们的发送短信验证码功能也就成功了,赶紧打开手机看看接收到的验证码吧。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值