阿里云短信服务集成

不管app仍是web都会用到短信验证功能,阿里提供了优质的短信服务。
特此将集成步骤记录,方便之后查阅html

1、获取 Access key和Access key Secret

一、首先注册阿里开放平台开发者,并进行实名认证
二、开通阿里短信服务
三、在短信控制台点击Access Key按钮查看 Access key和Access key Secretjava

阿里云AccessKeys
四、建立短信签名,我的用户只能建立一个短信签名,企业用户能够建立5个短信签名
五、短信签名就是短信的主体名,好比支付宝的短信为【支付宝】,其中支付宝就是短信签名。短信签名是提交后是须要进行审核的,通常工做时间以内,2小时以内就能审核经过
短信签名
六、建立短信模板:短信模板就是短信的内容,若是短信中有参数,能够参照阿里的参数模板进行设置。
短信模板
这些东西都有了以后就能够进行开发了。

2、集成短信功能

一、下载阿里短信的两个jar包,将其导入项目
二、参照官方demo进行代码编写
我本身写了一个工具类,很简单。
若是有更多的需求,能够在其基础上进行拓展。git

/** * 短信发送工具 * @author YangYang_2000 * @version 1.0 * @date 2017年12月28日 */
public class SmsUtil {
    // 产品名称:云通讯短信API产品,开发者无需替换
    private static final String product = "Dysmsapi";
    // 产品域名,开发者无需替换
    private static final String domain = "dysmsapi.aliyuncs.com";

    // 此处须要替换成开发者本身的AK(在阿里云访问控制台寻找)
    private static String accessKeyId = "本身的AccessKeyId";
    private static String accessKeySecret = "本身的AccessKeySecert";
    private static String identifyingTempleteCode = "本身的短信模板";
    private static String singName = "本身的短信签名";
    /** * 发送短信验证码 */
    public static SendSmsResponse sendIdentifyingCode(String mobile, String code) throws Exception {
        try {
            return sendSms(mobile, "{\"code\":\"" + code + "\"}");
        } catch (ClientException e) {
            throw new Exception();
        }
    }
    /** * 发送短信 */
    public static SendSmsResponse sendSms(String mobile, String templateParam) 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(mobile);
        // 必填:短信签名-可在短信控制台中找到
        request.setSignName(singName);
        // 必填:短信模板-可在短信控制台中找到
        request.setTemplateCode(identifyingTempleteCode);
        // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
        request.setTemplateParam(templateParam);
        // 选填-上行短信扩展码(无特殊需求用户请忽略此字段)
        // request.setSmsUpExtendCode("90997");
        // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
        request.setOutId("yourOutId");
        // hint 此处可能会抛出异常,注意catch
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
        return sendSmsResponse;
    }
}


/** * 短信状态监测工具 * @author YangYang_2000 * @version 1.0 * @date 2017年12月28日 */
public class SmsCheckUtil {
    /** * 根据回执码检测短信发送状态 */
    public static String checkCode(String jsonStr, String code) {
        if (code.equals(SmsCommon.SMS_OK)) {//发送成功,接口端作实现
            return SmsCommon.SMS_OK;
        } else if (code.equals(SmsCommon.SMS_MOBILE_NUMBER_ILLEGAL)) {//手机号码格式错误
            jsonStr = ResponseUtil.getRspFailObj(Return.CODE_MOBILE_TYPE_FAIL, Return.MSG_MOBILE_TYPE_FAIL);
            return jsonStr;
        } else if (code.equals(SmsCommon.SMS_BUSINESS_LIMIT_CONTROL)) {//业务限流,禁止多发
            jsonStr = ResponseUtil.getRspFailObj(Return.CODE_MOBILE_TIEE, Return.MSG_MOBILE_TIEE);
            return jsonStr;
        } else {//不经常使用的异常暂不作判断,统一返回服务器内部异常。
            jsonStr = ResponseUtil.getRspFailObj(Return.CODE_EXCEPTION, Return.MSG_EXCEPTION);
            return jsonStr;
        }
    }
}


/** * 短信返回码 * * @author YangYang_2000 * @version 1.0 * @date 2017年12月28日 * @see https://help.aliyun.com/knowledge_detail/57717.html */
public class SmsCommon {
    // 发送成功
    public static String SMS_OK = "OK";
    // 业务停机 请先查看帐户余额,若余额大于零,则请经过建立工单联系工程师处理
    public static String SMS_OUT_OF_SERVICE = "isv.OUT_OF_SERVICE";
    // 短信模板不合法
    public static String SMS_TEMPLATE_ILLEGAL = "isv.SMS_TEMPLATE_ILLEGAL";
    // 短信签名不合法
    public static String SMS_SIGNATURE_ILLEGAL = "isv.SMS_SIGNATURE_ILLEGAL";
    // 参数异常
    public static String SMS_INVALID_PARAMETERS = "isv.INVALID_PARAMETERS";
    // 非法手机号
    public static String SMS_MOBILE_NUMBER_ILLEGAL = "isv.MOBILE_NUMBER_ILLEGAL";
    // 模板缺乏变量
    public static String SMS_TEMPLATE_MISSING_PARAMETERS = "isv.TEMPLATE_MISSING_PARAMETERS";
    // 业务限流
    public static String SMS_BUSINESS_LIMIT_CONTROL = "isv.BUSINESS_LIMIT_CONTROL";
    // 帐户余额不足
    public static String SMS_AMOUNT_NOT_ENOUGH = "isv.AMOUNT_NOT_ENOUGH";
}
复制代码

三、调用,测试 SendSmsResponse response = SmsUtil.sendIdentifyingCode(mobile,sixCode); 调试成功,后台返回给app Json提示:{"code":0,"data":{},"message":"发送成功"} 手机端收到短信: github

验证码

3、使用验证码注册或者登陆

在后端生成随机六位数,发送给手机端,而且同时插入验证码数据库。
登陆或者注册时判断表内手机号和验证码的对应关系。
登陆成功或者注册成功后,将消费掉的验证码从数据库删除。web

4、充值并查看短信到达率

集成成功后,测试后会发现错误码提示为帐户余额不足。
这时要去阿里的短信控制台,进行充值,在没有购买套餐包的状况下,一条短信为0.045元,也就是4分5。
仍是蛮贵的,冲个10块钱省着用吧。数据库

5、总结

阿里短信的到达率仍是挺高的。发送了十几条,没有一条失败的。json


长路漫漫,菜不是原罪,堕落才是原罪。
个人CSDN:blog.csdn.net/wuyangyang_…
个人简书:www.jianshu.com/u/20c2f2c35…
个人掘金:juejin.im/user/58009b…
个人GitHub:github.com/wuyang2000
我的网站:www.xiyangkeji.cn
我的app(茜茜)蒲公英链接:www.pgyer.com/KMdT
个人微信公众号:茜洋 (按期推送优质技术文章,欢迎关注)
Android技术交流群:691174792后端

以上文章都可转载,转载请注明原创。api

相关文章
相关标签/搜索