微信小程序 - 使用阿里云发送短信

开发中使用微信小程序发送短信验证码,总结下使用的流程。java

这个是首次接入完整的流程图,按照流程来基本能够实现接入。小程序

短信流程图

介绍下签名和模板:微信小程序

刚开始看这几个字时候会想这是啥东西?要仔细看官网介绍,就是在短信内容里附加个性化签名,再发送给被叫手机客户 ,例如短信内容这个xx科技就是你设置个性化签名。那么后面的内容就是你建立的短信内容模板,能够建立多个签名和模板,看本身选择用哪个都写,能够根据你写代码入参时候肯定使用。api

其它:微信

前面几很简单,注意建立短信签名时候,注意填写签名名称按照规定来,不能随意填写审核可能不经过。其余的按照接入指引来很简单,自行脑补。dom

报错:ide

本身测试的时候会遇到,缘由本身反复用本身手机号发短信#-_-致使函数

报错is-business-limit-control-message

该错误码是指触发短信默认流控限制;学习

短信验证码 :使用同一个签名,对同一个手机号码发送短信验证码,支持1条/分钟,5条/小时,10条/天。一个手机号码经过阿里云短信服务平台只能收到40条/天。(如您是在发送验证码时提示业务限流,建议根据以上业务调整接口调用时间)测试

短信通知: 使用同一个签名和同一个短信模板ID,对同一个手机号码发送短信通知,支持50条/日(如您是在发短信通知时提示业务限流,建议根据以上业务调整接口调用时间)

按照以上的限制来发送,即不会出现触发流控的状况。

下面举个栗子Demo(以我作的验证码为例)

public class SmsDemo {

    //产品名称:云通讯短信API产品,开发者无需替换
    static final String product = "Dysmsapi";
    //产品域名,开发者无需替换
    static final String domain = "dysmsapi.aliyuncs.com";

    //此处须要替换成开发者本身的AK(在阿里云访问控制台寻找)
    static final String accessKeyId = "yourAccessKeyId";
    static final String accessKeySecret = "yourAccessKeySecret";

    public static SendSmsResponse sendSms() throws ClientException {

        //可自助调整超时时间
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");

        //初始化acsClient,暂不支持region化
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
        IAcsClient acsClient = new DefaultAcsClient(profile);

        //组装请求对象-具体描述见控制台-文档部份内容
        SendSmsRequest request = new SendSmsRequest();
        //必填:待发送手机号
        request.setPhoneNumbers("15000000000");//号码不固定根据业务来
        //必填:短信签名-可在短信控制台中找到
        request.setSignName("云通讯");
        //必填:短信模板-可在短信控制台中找到
        request.setTemplateCode("SMS_1000000");

        //可选(根据需求肯定,我作的发验证码因此要写):模板中的变量替换JSON串,
        //如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
        String codeId=RandomStringUtils.randomNumeric(6);//生成6位随机数
        request.setTemplateParam("{\"code\":\"" + codeId + "\"}");


        //hint 此处可能会抛出异常,注意catch
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);

        return sendSmsResponse;
    }

别忘了加上项目依赖的jar包

<dependency>  
      <groupId>commons-lang</groupId>  
      <artifactId>commons-lang</artifactId>  
      <version>2.6</version>  
      <scope>provided</scope>  
    </dependency>

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-core</artifactId>
      <version>3.2.8</version> 注:如提示报错,先升级基础包版,没法解决可联系技术支持
    </dependency>

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
      <version>1.1.0</version>
    </dependency>

若是对本身的验证码表示不满,还能够试试这几个,或者本身找下其余方法也行。

//产生6位长度的随机字符串
RandomStringUtils.random(6);

//使用指定的字符生成6位长度的随机字符串
RandomStringUtils.random(6, new char[]{'a','b','c','d','e','f'});

//生成指定长度的字母和数字的随机组合字符串
RandomStringUtils.randomAlphanumeric(6);

//生成随机数字字符串
RandomStringUtils.randomNumeric(6);

 

下面执行main函数便可体验短信产品API功能了,是否是很简单,赶快试下吧。

 

水平有限,如有问题请留言交流。

互相学习,共同进步 :) 转载请注明出处谢谢。

相关文章
相关标签/搜索