1. 概述

平台已经实现了腾讯云的短信接口,如果我们希望添加其他的短信实现,可以按照下面的步骤进行扩展。

2. 短信接口的实现

平台已经提供了一个标准的短信接口【SmsHandler】,我们需要对其进行相关的实现。

2.1 提供一个短信组件

新增一个java类,该类需要实现接口SmsHandler里面的sendPhoneValidCode方法,同时,在该类上面打上@component标签,
将其纳入进spring容器中管理。在@component标签里面的value属性上面,标注上唯一的组件名称(比如:telcom),供后面使用。

2.2 调用

将SmsVerificationUtil工具类注入进来,通过其调用我们新增的短信组件。

调用代码如下:

//注入工具类
@Resource
private SmsVerificationUtil smsVerificationUtil;

//通过工具类,调用我们上面提供的telcom短信组件
smsVerificationUtil.getSmsByKey("telcom").sendPhoneValidCode(mobile);

3. 腾讯云短信组件

平台已经实现了腾讯云的短信接口,可供参考。

代码如下:

package com.redxun.common.sms;

import com.alibaba.fastjson.JSONException;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.redxun.common.base.entity.JsonResult;
import com.redxun.config.SysConfig;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.xml.ws.http.HTTPException;
import java.io.IOException;
import java.util.Random;

/**
 * 腾讯云短信接口
 */
@Component(value = "qcloud")
public class QcloudSmsHandler implements SmsHandler {
    @Resource
    SysConfig sysConfig;

    /**
     * 验证码发送
     *
     * @param mobile
     * @return
     */
    @Override
    public JsonResult sendPhoneValidCode(String mobile) {
        //验证码
        String str = "";
        //随机生成6位的验证码
        Random random = new Random();
        for (int i = 0; i < 6; i++) {
            str += random.nextInt(10);
        }
        String[] params = {str, "2"};
        JsonResult jsonResult = sendSms(mobile, params);
        jsonResult.setData(str);
        return jsonResult;
    }


    /**
     * 发送流程审批业务
     *
     * @param mobile
     * @param params
     */
    @Override
    public void sendBpmApproval(String mobile, String[] params) {
        sendSms(mobile, params);
    }


    private JsonResult sendSms(String mobile, String[] params) {
        JsonResult jsonResult = new JsonResult();
        jsonResult.setSuccess(true);
        String message = "";
        //腾讯短信应用的 SDK AppID
        int appid = 0;
        String appkey = null;
        int templateId = 0;
        String smsSign = null;
        try {
            //短信应用SDK AppID
            appid = Integer.valueOf(sysConfig.getVal("smsAppId"));
            //短信应用SDK AppKey
            appkey = sysConfig.getVal("smsAppKey");
            //短信模板ID,需要在短信应用中申请
            templateId = Integer.valueOf(sysConfig.getVal("smsTemplateId"));
            //真实的签名需要在短信控制台中申请,另外签名参数使用的是`签名内容`,而不是`签名ID
            smsSign = sysConfig.getVal("smsSign");
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
            // 签名参数未提供或者为空时,会使用默认签名发送短信,这里的13800138000是为用户输入的手机号码
            SmsSingleSenderResult result = ssender.sendWithParam("86", mobile, templateId, params, smsSign, "", "");
            if (result.result == 0) {
                jsonResult.setSuccess(true);
            }
        } catch (HTTPException e) {
            message = e.getMessage();
        } catch (JSONException e) {
            message = e.getMessage();
        } catch (IOException e) {
            message = e.getMessage();
        } catch (com.github.qcloudsms.httpclient.HTTPException e) {
            message = e.getMessage();
        }
        jsonResult.setMessage(message);

        return jsonResult;
    }
}
文档更新时间: 2022-01-20 14:53   作者:朱方华