返回
关于我们
分类

所以短信验证码作为手机号的验证方式也显得尤为重要澳门新浦京网址,认证更加送大礼

日期: 2020-03-12 10:03 浏览次数 : 200

摘要容联即时通讯云开年送福利,幸运抽奖余额红包天天送,八折短信礼包享优惠。活动内容活动规则活动时间:2017年2月21日 至 2017年3月17日;活动对象:容联云通讯注册用户;在法律允许的范围内,此次活动最终解释权归容联云通讯所有。活动说明账户余额中的赠送金额不能购买本次活动的短信特惠包;本次活动的短信特惠包使用期限截止到2018年12月31日;本次活动的短信特惠包购买后不支持退款。领取方式参与方式:登录容联云通讯账号,即可参与。奖品规则:抽奖活动每个账号只能参与一次;抽中的余额,会及时发放至您的账户中,如1个工作日后仍未收到,请联系客服。活动地址

摘要即时通讯云服务商容联云通讯正在进行“不等11.11容联有礼抢先拿、充一送二玩真哒!”活动。活动一:幸运转盘送余额 注册用户天天有礼活动时间:2016年10月24日——2016年11月11日 15:00截止。活动对象:容联云通讯注册用户。活动礼品:1——1111元红包随机送,立即到账。参与方式:网站注册成功用户,在活动期间内,每天都可以参与抢红包活动,每个用户每天只能参加一次。赠送规则:抽取的红包回及时发放至注册用户的账户中,赠送资源0门槛使用且长期有效,如1个工作日之后仍未收到,请联系客服(注:每天可抽奖一次,抽中的金额直接增加至您的账户余额中)活动二:容联有礼·充一送二活动时间:2016年10月24日——2016年11月14日;领取规则:单词充值达到标准,即可领取对应档位礼品,活动期间最多可领取三次;领取规则:成功充值后,请回到活动页单机奖品下对应的“领取实物”链接,按提示选择奖品并填写邮寄信息,否则视为放弃奖品,礼品将在活动结束后统一发放;礼品领取:受到凌晨、月末流量清零影响,所有中奖用户获赠的手机流量将于活动结束后三个工作日内充值到您实物领取时填写的手机号中;(在法律允许范围之内,此次活动最终解释权归容联云通讯所有。)活动网址

摘要为了回馈用户,在万物苏醒的四月春风中,容联即时通讯云启动4月注册/认证送大礼活动。注册就有礼!认证更加送大礼!介绍为什么云通讯服务偏爱容联?因为它拥有全通讯产品矩阵,一站式选择,一站式服务,一站式解决方案。容联云通讯,让您的每个应用会说话。为了回馈用户,在万物苏醒的四月春风中,容联云通讯给您送礼啦。注册就有礼!认证更加送大礼!活动时间及范围1、活动时间:2016-04-05 10:00至2016-04-28 15:002、活动对象:新注册用户及未进行企业认证的老用户活动礼品及发送方式(1)认证成功,即送500M流量(认证审核通过的两个工作日内,充值您认证的手机号中))(2)转盘抽奖,100%中奖100条短信、300分钟通话、云通讯产品1折折扣券:中奖后,可在资源余量中查询300M流量:中奖后,直接充值到您填写的手机号孙小圣、加湿器:中奖后,三个工作日内以快递的方式邮寄(3)特价资源包(为三选一,购买后,可在资源余量中查询)温馨提示为了便于您及时收到礼品,请填写正确信息,地址、电话、姓名,如信息,容联云通讯将不会补发礼品。活动地址

今天给大家分享一下如何接入当前应用比较广泛的阿里云短信服务平台和容联云短信平台,其实每个短信平台接入方式都大同小异。

整个大促活动包含1个主会场和七个分会场。主会场将为大家带来新购满返和超值折扣热门产品。七大分会场包含基础云产品会场、域名会场、云通信会场、新用户会场、云安全会场、中小企业会场和开发者会场。

目前,手机号对于我们的日常生活有着非常重要的作用,特别是手机号码实名认证以后,手机号如同你的身份证一样记录着我们的各种信息。所以短信验证码作为手机号的验证方式也显得尤为重要。因此,很多公司或网站用短信验证码来验证我们的身份信息。常见的使用场景有:登录注册、信息修改、异常登录、找回密码等操作。

澳门新浦京网址 1

容联云短信配置自动加载类:

@ConfigurationProperties(prefix = "user.smsCode")@ConditionalOnProperty(name = "user.smsService.component",havingValue = "ronglianService")@PropertySource(value = "classpath:smscode.properties", encoding = "UTF-8")@Configurationpublic class RonglianSmsCodeProperties { private String accountSid; private String accountToken; private String appId; private String serverIp; private String serverPort; public String getAccountSid() { return accountSid; } public void setAccountSid(String accountSid) { this.accountSid = accountSid; } public String getAccountToken() { return accountToken; } public void setAccountToken(String accountToken) { this.accountToken = accountToken; } public String getAppId() { return appId; } public void setAppId(String appId) { this.appId = appId; } public String getServerIp() { return serverIp; } public void setServerIp(String serverIp) { this.serverIp = serverIp; } public String getServerPort() { return serverPort; } public void setServerPort(String serverPort) { this.serverPort = serverPort; } @Bean public CCPRestSmsSDK createPhoneClient() { CCPRestSmsSDK phoneClient = new CCPRestSmsSDK(); phoneClient.setAccount(accountSid, accountToken); phoneClient.init(serverIp, serverPort); phoneClient.setAppId; return phoneClient; } 

指定使用哪个短信服务,只需把响应的注释打开就可以啦。

#阿里云短信验证码平台user.smsService.component = aliyunSmcodeService#容联云通讯短信验证码平台#user.smsService.component = ronglianService

这样所有的关于验证码的配置都完成了,下面是service层,我是将验证码存入到redis中并且设置有效时间,对短信验证码进行匹配验证。如果一致的话,则将改验证码从redis库中删除掉。同时,存入的过程中设置了不同类型的key,这样通过redis客户端来查看的话就会分层显示,特别清晰。

public abstract class SmsCodeServiceImpl implements SmsCodeService{ @Autowired private PassportRepository passportRepository; abstract JedisPool getJedisPool (); @Override public Boolean checkSmsCode(String phoneNum, int codeType, String smsCode) { String smsCodeKey; Boolean flag = false; Jedis jedis = null; try { if (SmsCode.SmsCodeType.REG.value() == codeType) { smsCodeKey = CacheKeys.getSmsCodeRegKey; } else if (SmsCode.SmsCodeType.LOGIN.value() == codeType) { smsCodeKey = CacheKeys.getSmsCodeLoginKey; } else if (SmsCode.SmsCodeType.FORGET.value() == codeType) { smsCodeKey = CacheKeys.getSmsCodeForget; } else if (SmsCode.SmsCodeType.BIND.value() == codeType) { smsCodeKey = CacheKeys.getSmsCodeBind ; } else if (SmsCode.SmsCodeType.UPGRADE.value() == codeType) { smsCodeKey = CacheKeys.getSmsCodeUpgrade; } else { return flag; } jedis = getJedisPool().getResource(); String code = jedis.get(smsCodeKey); if(StringUtils.isBlank{ return flag; }else if (code.equals { jedis.del(smsCodeKey); flag = true; } } finally { jedis.close(); } return flag; } /** * 检查手机号是否已经被使用 */ @Override public Boolean checkPhoneNumberIsUsed(String phoneNum){ Passport passport = passportRepository.findByPhoneNum; if(passport == null){ return false; }else{ return true; } }}

@Service("aliyunSmcodeService")@ConditionalOnProperty(name = "user.smsService.component", havingValue = "aliyunSmcodeService")public class AliyunSmsCodeServiceImpl extends SmsCodeServiceImpl { @Value("${user.smsCode.expires}") private int expires; @Value("${user.smsCode.smsCodelen}") private int smsCodelen; @Autowired private JedisPool jedisPool; @Autowired private AliyunSmsCodeProperties aliyunSmsCodeProperties; @Autowired private CloudTopic topic; @Override JedisPool getJedisPool() { return jedisPool ; } /** * 通过阿里云发送短信验证码 */ @Transactional public SendMcodeResponse sendSmsCode(String phoneNum, int codeType) { RawTopicMessage msg = new RawTopicMessage(); msg.setMessageBody("sms-message"); MessageAttributes messageAttributes = new MessageAttributes(); BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes(); batchSmsAttributes.setFreeSignName(aliyunSmsCodeProperties.getSignName; // 短信模板code String templateCode = null; String smsCodeKey = null; if (SmsCode.SmsCodeType.REG.value() == codeType) { templateCode = aliyunSmsCodeProperties.getRegTemplateCode(); smsCodeKey = CacheKeys.getSmsCodeRegKey; } else if (SmsCode.SmsCodeType.LOGIN.value() == codeType) { templateCode = aliyunSmsCodeProperties.getLoginTemplateCode(); smsCodeKey = CacheKeys.getSmsCodeLoginKey; } else if (SmsCode.SmsCodeType.FORGET.value() == codeType) { templateCode = aliyunSmsCodeProperties.getForgetTemplateCode(); smsCodeKey = CacheKeys.getSmsCodeForget; } else if (SmsCode.SmsCodeType.BIND.value() == codeType) { templateCode = aliyunSmsCodeProperties.getBindTemplateCode(); smsCodeKey = CacheKeys.getSmsCodeBind; }else if (SmsCode.SmsCodeType.UPGRADE.value() == codeType) { templateCode = aliyunSmsCodeProperties.getUpgradeTemplateCode(); smsCodeKey = CacheKeys.getSmsCodeUpgrade; } batchSmsAttributes.setTemplateCode(templateCode); // 设置发送短信所使用的模板中参数对应的值(第一个参数是验证码,第二个参数是过期时间) BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams(); String code = RandomStringUtils.randomNumeric(smsCodelen); smsReceiverParams.setParam("code", code); smsReceiverParams.setParam("time", String.valueOf(expires / 60)); // 接收短信的手机号码 batchSmsAttributes.addSmsReceiver(phoneNum, smsReceiverParams); messageAttributes.setBatchSmsAttributes(batchSmsAttributes); Jedis jedis = jedisPool.getResource(); SendMcodeResponse r = null; try { // 发送消息 TopicMessage ret = topic.publishMessage(msg, messageAttributes); // 将验证码信息存放于redis中并设置过期时间 jedis.set(smsCodeKey, code); jedis.expire(smsCodeKey, expires); r = SendMcodeResponse.newBuilder().setMcode.setExpires .setR(Result.newBuilder().setCode(Result.StatusType.SUCCESS_VALUE).setMsg.build.build(); } catch (ServiceException se) { throw new ServiceException(se.getErrorCode(),se.getMessage; } catch (Exception e) { r = SendMcodeResponse.newBuilder().setMcode.setExpires .setR(Result.newBuilder().setCode(Result.StatusType.ERROR_VALUE).setMsg(e.getMessage.build.build(); } finally { jedis.close(); } return r; } }

@Service("ronglianService")@ConditionalOnProperty(name = "user.smsService.component", havingValue = "ronglianService")public class RonglianSmsCodeServiceImpl extends SmsCodeServiceImpl { @Autowired private CCPRestSmsSDK client; @Autowired private JedisPool jedisPool; @Value("${user.smsCode.expires}") private int expires; @Value("${user.smsCode.smsCodelen}") private int smsCodelen; @Override JedisPool getJedisPool() { return jedisPool; } /** * 发送短信验证码 * @throws AccountException */ @Transactional @Override public SendMcodeResponse sendSmsCode(String phoneNum, int codeType) throws AccountException { String code = RandomStringUtils.randomNumeric(smsCodelen); HashMap<String, Object> message = client.sendTemplateSMS(phoneNum, String.valueOf, new String[] { code, String.valueOf(expires/60) }); SendMcodeResponse r = null; if ("000000".equals(message.get("statusCode"))) { Jedis jedis = jedisPool.getResource(); try { String smsCodeKey = null; if (SmsCode.SmsCodeType.REG.value() == codeType) { smsCodeKey = CacheKeys.getSmsCodeRegKey; } else if (SmsCode.SmsCodeType.LOGIN.value() == codeType) { smsCodeKey = CacheKeys.getSmsCodeLoginKey; } else if (SmsCode.SmsCodeType.FORGET.value() == codeType) { smsCodeKey = CacheKeys.getSmsCodeForget; } else if (SmsCode.SmsCodeType.BIND.value() == codeType) { smsCodeKey = CacheKeys.getSmsCodeBind; } jedis.set(smsCodeKey, code); jedis.expire(smsCodeKey, expires); r = SendMcodeResponse.newBuilder().setMcode.setExpires .setR(Result.newBuilder().setCode(Result.StatusType.SUCCESS_VALUE).setMsg.build.build(); } catch (Exception e) { r = SendMcodeResponse.newBuilder().setMcode.setExpires .setR(Result.newBuilder().setCode(Result.StatusType.ERROR_VALUE).setMsg(e.getMessage.build.build(); } finally { jedis.close(); } } else { throw new AccountException(String.valueOf(message.get("statusMsg")),AccountException.ExCode.SEND_EXCEPTION.value; } return r; }}

public class CacheKeys { private final static String SSOTOKEN_PREFIX = "users:login:ssotoken:" ; private final static String SMSCODE_REG_PREFIX = "users:smscode:reg:" ; private final static String SMSCODE_LOGIN_PREFIX = "users:smscode:login:" ; private final static String SMSCODE_FORGET_PREFIX = "users:smscode:forget:" ; private final static String SMSCODE_BIND_PREFIX = "users:smscode:bind:" ; private final static String SMSCODE_UPGRADE_PREFIX = "users:smscode:upgrade:" ; private final static String USER_ALLTOKEN_PREFIX = "users:login:all:" ; private final static String EMAIL_FORGET_PREFIX = "users:emailcode:forget:" ; private final static String EMAIL_BIND_PREFIX = "users:emailcode:bind:" ; private final static String QRCODE_UUID_PREFIX = "users:qrcode:uuid:" ; private final static String QRCODE_SKEY_PREFIX = "users:qrcode:skey:" ; public static String getSsoTokenKey(String ssotoken) { return SSOTOKEN_PREFIX+ssotoken ; } public static String getSmsCodeRegKey(String phoneNum){ return SMSCODE_REG_PREFIX+phoneNum ; } public static String getSmsCodeLoginKey(String phoneNum){ return SMSCODE_LOGIN_PREFIX+phoneNum ; } public static String getSmsCodeForget(String phoneNum){ return SMSCODE_FORGET_PREFIX+phoneNum ; } public static String getSmsCodeBind(String phoneNum){ return SMSCODE_BIND_PREFIX+phoneNum ; } public static String getSmsCodeUpgrade(String phoneNum){ return SMSCODE_UPGRADE_PREFIX+phoneNum ; } public static String getUserAllKey(String accountId){ return USER_ALLTOKEN_PREFIX+"usr-"+accountId ; } public static String getEmailCodeForget(String email){ return EMAIL_FORGET_PREFIX+email ; } public static String getEmailCodeBind(String email){ return EMAIL_BIND_PREFIX+email ; } public static String getQrCodeUuidKey(String uuid){ return QRCODE_UUID_PREFIX+uuid ; } public static String getQrCodeSkeyKey(String skey){ return QRCODE_SKEY_PREFIX+skey ; }}

到这里就全部完成了短信短信验证码的功能。

具体如下:

首先我们需要去各家短信平台申请属于我们自己的开发者账号,容联云通讯会有一定数量的免费短信条数用来测试,但是免费短信不可以自定义发送内容的模板,充值一定金额后可以申请。阿里云是后付费模式,可以使用短信自定义的短信模板或者签名。

9、活动名称仅为方便用户理解参考使用,不具有效力,实际活动内容以具体活动规则为准。

 <dependency> <groupId>com.aliyun.mns</groupId> <artifactId>aliyun-sdk-mns</artifactId> <version>1.1.8</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-sms</artifactId> <version>3.0.0-rc1</version> </dependency>

#容联云通讯短信验证码user.smsCode.accountSid = #user.smsCode.accountToken = #user.smsCode.serverIp = app.cloopen.comuser.smsCode.serverPort = 8883user.smsCode.appId = ##短信验证码失效时间user.smsCode.expires = 60#短信验证码长度user.smsCode.smsCodelen = 6#阿里云AccessIduser.aliyun.smsCode.accessId=##阿里云AccessKeyuser.aliyun.smsCode.accessKey=##访问MNS服务的接入地址user.aliyun.smsCode.mnsEndpoint=##发送短信使用的主题user.aliyun.smsCode.topic=sms.topic-cn-hangzhou#发送短信使用的签名user.aliyun.smsCode.signName=竞技世界#注册模板Codeuser.aliyun.smsCode.regTemplateCode=##登录模板Codeuser.aliyun.smsCode.loginTemplateCode=##忘记密码模板Codeuser.aliyun.smsCode.forgetTemplateCode=##绑定手机模板Codeuser.aliyun.smsCode.bindTemplateCode=##免注账号升级模板Codeuser.aliyun.smsCode.upgradeTemplateCode=#

活动对象:阿里云官网已实名认证的注册会员用户;

阿里云短信提供了通过maven方式添加依赖,容联云通讯则需要自己手动去下载jar包添加到工程目录中。

一、满返先报名,特惠提前知

阿里云短信配置自动加载

** * * @ClassName: AliyunSmsCodeProperties * @Description: TODO * @author huasc* @date 2017年8月29日 下午1:44:51 * */@Configuration//自动加载配置文件前缀是user.aliyun.smsCode的配置文件@ConfigurationProperties(prefix = "user.aliyun.smsCode")//配置文件的启用条件 当user.smsService.component的值为aliyunSmcodeService时 该配置文件才会被启用@ConditionalOnProperty(name = "user.smsService.component",havingValue = "aliyunSmcodeService")//配置文件地址@PropertySource(value = "classpath:smscode.properties", encoding = "UTF-8")public class AliyunSmsCodeProperties { private String accessId; private String accessKey; private String mnsEndpoint; private String topic; private String signName; private String regTemplateCode; private String loginTemplateCode; private String forgetTemplateCode; private String bindTemplateCode; private String upgradeTemplateCode; private CloudTopic tp; public String getAccessId() { return accessId; } public void setAccessId(String accessId) { this.accessId = accessId; } public String getAccessKey() { return accessKey; } public void setAccessKey(String accessKey) { this.accessKey = accessKey; } public String getMnsEndpoint() { return mnsEndpoint; } public void setMnsEndpoint(String mnsEndpoint) { this.mnsEndpoint = mnsEndpoint; } public String getTopic() { return topic; } public void setTopic(String topic) { this.topic = topic; } public String getSignName() { return signName; } public void setSignName(String signName) { this.signName = signName; } public String getRegTemplateCode() { return regTemplateCode; } public void setRegTemplateCode(String regTemplateCode) { this.regTemplateCode = regTemplateCode; } public String getLoginTemplateCode() { return loginTemplateCode; } public void setLoginTemplateCode(String loginTemplateCode) { this.loginTemplateCode = loginTemplateCode; } public String getForgetTemplateCode() { return forgetTemplateCode; } public void setForgetTemplateCode(String forgetTemplateCode) { this.forgetTemplateCode = forgetTemplateCode; } public String getBindTemplateCode() { return bindTemplateCode; } public void setBindTemplateCode(String bindTemplateCode) { this.bindTemplateCode = bindTemplateCode; } @Bean("mnsClient") MNSClient createClient() { CloudAccount account = new CloudAccount(this.accessId, this.accessKey, this.mnsEndpoint); MNSClient client = account.getMNSClient(); this.client = client; return client; } @Bean CloudTopic cloudTopic(MNSClient mnsClient) { CloudTopic tp = mnsClient.getTopicRef(this.topic); this.tp = tp; return tp; } private MNSClient client; @PreDestroy public void destroy() { client.close(); } public String getUpgradeTemplateCode() { return upgradeTemplateCode; } public void setUpgradeTemplateCode(String upgradeTemplateCode) { this.upgradeTemplateCode = upgradeTemplateCode; }}
  • 累计有效消费金额3000-9999元,每满1000返80;

  • 累计有效消费金额10000-29999元,每满5000返600;

  • 累计有效消费金额30000元及以上,每满5000返750,最高封顶7500。

申请好了以后我们就要这些需要的信息添加到我们的配置文件中。

本活动仅适用于主动报名用户,未报名参加活动的用户在活动期间的消费不享受返代金券优惠。3.4-3.15期间,累计新购、升级预付费云产品,消费满3000元即返!最高返7500元代金券!

活动对象: