使用容联云实现短信成功发送(内附代码和详细使用说明)

第一步:注册容联云 https://www.yuntongxun.com/  注册成功后,可以找到以下信息,新用户注册赠送8块钱,每请求一次发送短信,会扣费。开发者账号中的这些信息在代码中会用到,写代码参考开发者中心中的SDK文档,添加手机号码在“测试号码”模块中添加。

第二步,参考SDK文档写代码

1.根据sdk文档在pom中引入java-sms-sdk依赖,引入gson依赖,建议gson依赖版本用2.8.6,我一开始用的2.8.2版本,结果会报以下错,百度了下,换成2.8.6版本解决

Caused by: java.lang.NoSuchMethodError: com.google.gson.JsonParser.parseString(Ljava/lang/String;)Lcom/google/gson/JsonElement;

2.上述开发者账号中的信息配置在配置文件中,定义配置类读取这些信息,并封装成常量

@Data
@Component
@ConfigurationProperties(prefix = "yuntongxun.sms") // 该注解是取配置文件中读取指定路径下的配置信息,封装成对象,在封装过程中,会用到成员变量的set方法
public class SmsProperties implements InitializingBean { //继承该类,实现该类的afterPropertiesSet方法,该方法就是在配置文件属性被封装完成后才会调用的
    /*
    account_id: 
    account_token: 
    app_id: 
    server_ip: app.cloopen.com
    server_port: 8883
     */

    //将配置文件中的配置定义为成员变量,驼峰命名可以自动匹配
    private String accountId;
    private String accountToken;
    private String appId;
    private String serverIp;
    private String serverPort;

    //定义静态变量,将上述参数值赋值给这些静态变量,后续通过类名来获取,赋值的前提是配置文件已经读取完毕并且已经封装到上述成员变量中
    public static String ACCOUNT_ID;
    public static String ACCOUNT_TOKEN;
    public static String APP_ID;
    public static String SERVER_IP;
    public static String SERVER_PORT;

    //该方法就是在配置文件属性被封装完成后才会被调用
    @Override
    public void afterPropertiesSet() throws Exception {
        ACCOUNT_ID = accountId;
        ACCOUNT_TOKEN = accountToken;
        APP_ID = appId;
        SERVER_IP = serverIp;
        SERVER_PORT = serverPort;
    }
}

3. serviceImpl中的发送短信方法,其中方法需要三个参数。

将账户信息set到sdk对象中

/* mobile ;手机号
 * templateId:短信模板,默认为 1
 * params:短信模板中需要用到的参数:随机验证码,验证码有效期
*/
public void sendMsg(String mobile, String templateId, String[] params)  {

        //创建sdk客户端对象
        CCPRestSmsSDK sdk = new CCPRestSmsSDK();
        //初始化客户端对象
        sdk.init(SmsProperties.SERVER_IP, SmsProperties.SERVER_PORT);
        //属性赋值
        sdk.setAccount(SmsProperties.ACCOUNT_ID, SmsProperties.ACCOUNT_TOKEN);
        sdk.setAppId(SmsProperties.APP_ID);
        sdk.setBodyType(BodyType.Type_JSON);
        String subAppend="1234";  //可选 扩展码,四位数字 0~9999
        Object resultCd = null;
        Object resultMSg = null;
        try {
            HashMap<String, Object> result = sdk.sendTemplateSMS(mobile, templateId, params);
            resultCd = result.get("statusCode");
            if("000000".equals(resultCd)){
                //正常返回输出data包体信息(map)
                HashMap<String,Object> data = (HashMap<String, Object>) result.get("data");
                Set<String> keySet = data.keySet();
                for(String key:keySet){
                    Object object = data.get(key);
                    System.out.println(key +" = "+object);
                }
            }else{
                //异常返回输出错误码和错误信息
                log.info("错误码>>" + resultCd +" 错误信息>> "+ resultMSg);
            }
        } catch(Exception e) {
            if(resultCd != null){
                throw new BusinessException((Integer) resultCd, (String)resultMSg, e);
            } else {
                throw new BusinessException(ResponseEnum.ALIYUN_SMS_ERROR, e);
            }
        }

    }

4. controller层中的方法

@GetMapping("/send/{mobile}")
    public ResponseResult send(@PathVariable String mobile){

        String msgCode = RandomUtil.fourRandom();
        String[] params = {msgCode, "5"};
        log.debug("随机验证码为: {}",msgCode);

        smsService.sendMsg(mobile,"1", params);

        //将验证码存入redis,以便校验客户输入的验证码是否正确且在有效期内,key值为srb:sms:msg:+ mobile
        redisTemplate.opsForValue().set("srb:sms:msg:"+ mobile, msgCode, 5, TimeUnit.MINUTES);

        return ResponseResult.setResponse(ResponseEnum.SUCCESS).setResponseMsg("短信发送成功");

    }

5. 测试结果

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值