不管app仍是web都会用到短信验证功能,阿里提供了优质的短信服务。
特此将集成步骤记录,方便之后查阅html
一、首先注册阿里开放平台开发者,并进行实名认证
二、开通阿里短信服务
三、在短信控制台点击Access Key按钮查看 Access key和Access key Secretjava
一、下载阿里短信的两个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
在后端生成随机六位数,发送给手机端,而且同时插入验证码数据库。
登陆或者注册时判断表内手机号和验证码的对应关系。
登陆成功或者注册成功后,将消费掉的验证码从数据库删除。web
集成成功后,测试后会发现错误码提示为帐户余额不足。
这时要去阿里的短信控制台,进行充值,在没有购买套餐包的状况下,一条短信为0.045元,也就是4分5。
仍是蛮贵的,冲个10块钱省着用吧。数据库
阿里短信的到达率仍是挺高的。发送了十几条,没有一条失败的。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