Java實(shí)現(xiàn)發(fā)送手機(jī)短信語(yǔ)音驗(yàn)證功能代碼實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)發(fā)送手機(jī)短信語(yǔ)音驗(yàn)證功能代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
利用第三方平臺(tái)可以實(shí)現(xiàn)發(fā)送手機(jī)短信驗(yàn)證碼和語(yǔ)音驗(yàn)證碼的功能,本文使用框架是struts2+spring+hibernate,現(xiàn)就action層給出核心代碼功能。
public class VerifyAction extends BaseAction<VerifyRequest> {
private static final long serialVersionUID = 1L;
private CommonConfigService commonConfigService;
private UserPhoneVerifyService userPhoneVerifyService;
private UserVerifyService userVerifyService;
private PhoneDetectService phoneDetectService;
private AccountService accountService;
// 發(fā)送短信驗(yàn)證碼
public String sensSms() {
try {
result.setResult(JsonResult.SUCCESS);
if (model.getType() == PhoneVerifyType.REGISTER) {
if (userVerifyService.checkRegisterPhone(model.getPhone())) {
result.setErrorMessage("該手機(jī)號(hào)已注冊(cè)");
result.setResult(JsonResult.ERROR);
return SUCCESS;
}
}
if (!phoneDetectService.check(model.getPhone())) {
result.setErrorMessage("該手機(jī)號(hào)異常,不能進(jìn)行驗(yàn)證操作");
result.setResult(JsonResult.ERROR);
return SUCCESS;
}
Dh3TongSmsOperator dh3TongSmsOperator = new Dh3TongSmsOperator(
commonConfigService.getString("dh3tong", "account"),
DigestUtil.md5(commonConfigService.getString("dh3tong", "password")));
String code = RandomUtil.randomNum(6);
if (dh3TongSmsOperator.send(UUIDGenerator.generate(), model.getPhone(),
String.format("尊敬的用戶,您的驗(yàn)證碼是:%s", code), "【XX系統(tǒng)名】")) {
userPhoneVerifyService.record(model.getPhone(), model.getType(), code, model.getUserId());
} else {
result.setErrorMessage("很抱歉,發(fā)送短信失敗,請(qǐng)稍后再試");
result.setResult(JsonResult.ERROR);
return SUCCESS;
}
result.setErrorMessage( "短信驗(yàn)證碼發(fā)送成功,請(qǐng)?jiān)?分鐘內(nèi)及時(shí)使用,謝謝!");
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
// 發(fā)送語(yǔ)音驗(yàn)證碼
public String sensVoice() {
try {
result.setResult(JsonResult.SUCCESS);
if (model.getType() == PhoneVerifyType.REGISTER) {
if (userVerifyService.checkRegisterPhone(model.getPhone())) {
result.setErrorMessage("該手機(jī)號(hào)已注冊(cè)");
result.setResult(JsonResult.ERROR);
return SUCCESS;
}
}
if (!phoneDetectService.check(model.getPhone())) {
result.setErrorMessage("該手機(jī)號(hào)異常,不能進(jìn)行驗(yàn)證操作");
result.setResult(JsonResult.ERROR);
return SUCCESS;
}
String code = RandomUtil.randomNum(6);
Dh3TongVoiceOperator dh3TongVoiceOperator = new Dh3TongVoiceOperator(
commonConfigService.getString("dh3tong", "account"),
DigestUtil.md5(commonConfigService.getString("dh3tong", "password")));
if (dh3TongVoiceOperator.send(UUIDGenerator.generate(), request.getPhone(), code)) {
userPhoneVerifyService.record(request.getPhone(), request.getType(), code, request.getUserId());
} else {
result.setErrorMessage("很抱歉,發(fā)送語(yǔ)音失敗,請(qǐng)稍后再試");
result.setResult(JsonResult.ERROR);
return SUCCESS;
}
result.setErrorMessage("語(yǔ)音驗(yàn)證碼發(fā)送成功,請(qǐng)?jiān)?分鐘內(nèi)及時(shí)使用,謝謝!");
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
public void setCommonConfigService(CommonConfigService commonConfigService) {
this.commonConfigService = commonConfigService;
}
public void setUserPhoneVerifyService(UserPhoneVerifyService userPhoneVerifyService) {
this.userPhoneVerifyService = userPhoneVerifyService;
}
public void setUserVerifyService(UserVerifyService userVerifyService) {
this.userVerifyService = userVerifyService;
}
public void setPhoneDetectService(PhoneDetectService phoneDetectService) {
this.phoneDetectService = phoneDetectService;
}
public void setAccountService(AccountService accountService) {
this.accountService = accountService;
}
}
以上是干貨分享,已測(cè)試驗(yàn)證過(guò)!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java自定義注解驗(yàn)證手機(jī)格式的實(shí)現(xiàn)示例
- 使用Java 實(shí)現(xiàn)一個(gè)“你畫(huà)手機(jī)猜”的小游戲
- 微信小程序獲取手機(jī)號(hào),后端JAVA解密流程代碼
- 大數(shù)據(jù) java hive udf函數(shù)的示例代碼(手機(jī)號(hào)碼脫敏)
- 如何使用Java redis實(shí)現(xiàn)發(fā)送手機(jī)驗(yàn)證碼功能
- Java獲取手機(jī)號(hào)碼歸屬地的實(shí)現(xiàn)
- 使用java實(shí)現(xiàn)手機(jī)短信驗(yàn)證全過(guò)程
相關(guān)文章
關(guān)于MyBatis中映射對(duì)象關(guān)系的舉例
這篇文章主要介紹了關(guān)于MyBatis中映射對(duì)象關(guān)系的舉例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
如何解決SpringBoot2.6及之后版本取消了循環(huán)依賴的支持問(wèn)題
循環(huán)依賴指的是兩個(gè)或者多個(gè)bean之間相互依賴,形成一個(gè)閉環(huán),SpringBoot從2.6.0開(kāi)始默認(rèn)不允許出現(xiàn)Bean循環(huán)引用,解決方案包括在全局配置文件設(shè)置允許循環(huán)引用存在、在SpringApplicationBuilder添加設(shè)置允許循環(huán)引用、構(gòu)造器注入2024-10-10
Springboot打包代碼,反編譯后代碼混淆方式(防止還原代碼)
文章主要介紹了如何對(duì)Spring Boot項(xiàng)目進(jìn)行jar包混淆,以防止反編譯還原原始代碼,通過(guò)在項(xiàng)目中添加proguard.cfg文件并配置Maven插件,可以實(shí)現(xiàn)代碼混淆,從而增加反編譯的難度2024-11-11
解決logback使用${spring.application.name}日志打印路徑的問(wèn)題
這篇文章主要介紹了解決logback使用${spring.application.name}日志打印路徑的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
SpringBoot項(xiàng)目創(chuàng)建使用+配置文件+日志文件詳解
Spring的出現(xiàn)是為了簡(jiǎn)化 Java 程序開(kāi)發(fā),而 SpringBoot 的出現(xiàn)是為了簡(jiǎn)化 Spring 程序開(kāi)發(fā),這篇文章主要介紹了SpringBoot項(xiàng)目創(chuàng)建使用+配置文件+日志文件,需要的朋友可以參考下2023-02-02
springboot配置文件中使用${}注入值的兩種方式小結(jié)
這篇文章主要介紹了springboot配置文件中使用${}注入值的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Spring中BeanFactory與FactoryBean接口的區(qū)別詳解
這篇文章主要給大家介紹了關(guān)于Spring中BeanFactory與FactoryBean接口的區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
通過(guò)實(shí)例解析spring環(huán)繞通知原理及用法
這篇文章主要介紹了通過(guò)實(shí)例解析spring環(huán)繞通知原理及用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10

