java如何实现发送短信验证码功能?

java如何实现发送短信验证码功能?,第1张

1、创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法

/** * 文件说明 * @Description:扩展说明 * @Copyright: XXXX dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */package com.demo.utilimport java.io.IOExceptionimport java.util.Mapimport org.apache.commons.httpclient.HttpClientimport org.apache.commons.httpclient.HttpExceptionimport org.apache.commons.httpclient.SimpleHttpConnectionManagerimport org.apache.commons.httpclient.methods.GetMethodimport org.apache.commons.httpclient.methods.PostMethod/** * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser: feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX * @Version:V6.0 */public class HttpRequestUtil { /** * HttpClient 模拟POST请求 * 方法说明 * @Discription:扩展说明 * @param url * @param params * @return String * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static String postRequest(String url, Map<String, String>params) { //构造HttpClient的实例 HttpClient httpClient = new HttpClient() //创建POST方法的实例 PostMethod postMethod = new PostMethod(url) //设置请求头信息 postMethod.setRequestHeader("Connection", "close") //添加参数 for (Map.Entry<String, String>entry : params.entrySet()) { postMethod.addParameter(entry.getKey(), entry.getValue()) } //使用系统提供的默认的恢复策略,设置请求重试处理,用的是默认的重试处穗毁理:请求三次 httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false) //接收处理结果 String result = null try { //执行Http Post请求 httpClient.executeMethod(postMethod) //返回处理结果 result = postMethod.getResponseBodyAsString() } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("请此侍检查输入的URL!") e.printStackTrace() } catch (IOException e) { // 发生网络异常 System.out.println("发生网络异常!") e.printStackTrace() } finally { //释放链森族吵接 postMethod.releaseConnection() //关闭HttpClient实例 if (httpClient != null) {((SimpleHttpConnectionManager) httpClient.getHttpConnectionManager()).shutdown() httpClient = null } } return result} /** * HttpClient 模拟GET请求 * 方法说明 * @Discription:扩展说明 * @param url * @param params * @return String * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static String getRequest(String url, Map<String, String>params) { //构造HttpClient实例 HttpClient client = new HttpClient() //拼接参数 String paramStr = "" for (String key : params.keySet()) { paramStr = paramStr + "&" + key + "=" + params.get(key) } paramStr = paramStr.substring(1) //创建GET方法的实例 GetMethod method = new GetMethod(url + "?" + paramStr) //接收返回结果 String result = null try { //执行HTTP GET方法请求 client.executeMethod(method) //返回处理结果 result = method.getResponseBodyAsString() } catch (HttpException e) { // 发生致命的异常,可能是协议不对或者返回的内容有问题 System.out.println("请检查输入的URL!") e.printStackTrace() } catch (IOException e) { // 发生网络异常 System.out.println("发生网络异常!") e.printStackTrace() } finally { //释放链接 method.releaseConnection() //关闭HttpClient实例 if (client != null) {((SimpleHttpConnectionManager) client.getHttpConnectionManager()).shutdown() client = null } } return result}}

2、在创建一个类,生成验证码,然后传递相应的参数(不同的短信平台接口会有不同的参数要求,这个一般短信平台提供的接口文档中都会有的,直接看文档然后按要求来即可)

/** * 文件说明 * @Description:扩展说明 * @Copyright: XXXX dreamtech.com.cn Inc. All right reserved * @Version: V6.0 */package com.demo.utilimport java.net.URLEncoderimport java.util.HashMapimport java.util.Map/** * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser: feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX * @Version:V6.0 */public class SendMsgUtil { /** * 发送短信消息 * 方法说明 * @Discription:扩展说明 * @param phones * @param content * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:18:08 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:18:08 */ @SuppressWarnings("deprecation") public static String sendMsg(String phones,String content){ //短信接口URL提交地址 String url = "短信接口URL提交地址" Map<String, String>params = new HashMap<String, String>() params.put("zh", "用户账号") params.put("mm", "用户密码") params.put("dxlbid", "短信类别编号") params.put("extno", "扩展编号") //手机号码,多个号码使用英文逗号进行分割 params.put("hm", phones) //将短信内容进行URLEncoder编码 params.put("nr", URLEncoder.encode(content)) return HttpRequestUtil.getRequest(url, params)} /** * 随机生成6位随机验证码 * 方法说明 * @Discription:扩展说明 * @return * @return String * @Author: feizi * @Date: 2015年4月17日 下午7:19:02 * @ModifyUser:feizi * @ModifyDate: 2015年4月17日 下午7:19:02 */ public static String createRandomVcode(){ //验证码 String vcode = "" for (int i = 0i <6i++) { vcode = vcode + (int)(Math.random() * 9) } return vcode} /** * 测试 * 方法说明 * @Discription:扩展说明 * @param args * @return void * @Author: feizi * @Date: XXXX年XX月XX日 XX:XX:XX * @ModifyUser:feizi * @ModifyDate: XXXX年XX月XX日 XX:XX:XX */ public static void main(String[] args) {// System.out.println(SendMsgUtil.createRandomVcode())// System.out.println("&ecb=12".substring(1)) System.out.println(sendMsg("18123456789,15123456789", "尊敬的用户,您的验证码为" + SendMsgUtil.createRandomVcode() + ",有效期为60秒,如有疑虑请详询XXX-XXX-XXXX【XXX中心】"))}

然后执行一下,一般的情况下参数传递正确,按照接口文档的规范来 *** 作的话,都会发送成功的,手机都能收到验证码的,然后可能会出现的问题就是:发送的短信内容有可能会出现中文乱码,然后就会发送不成功,按照短信平台的要求进行相应的编码即可。一般都会是UTF-8编码。

package com.winhands.quartz

import java.io.PrintWriter

import 指辩告java.io.StringWriter

import java.io.UnsupportedEncodingException

import java.util.ArrayList

import java.util.Date

import java.util.HashMap

import java.util.List

import org.slf4j.Logger

import org.slf4j.LoggerFactory

import com.winhands.base.service.BaseService

import com.winhands.util.BaseConstant

import com.winhands.web.dict.entity.DictCommon

import com.winhands.web.xfhf.entity.SmsOutBox

import com.winhands.web.xfhf.entity.SmsVisit

import com.winhands.web.xfhf.entity.TaskInfo

public class SmsSendSync {

public BaseService baseService

public BaseService baseServiceMas

public static final Logger logger = LoggerFactory.getLogger(SmsSendSync.class)

//同步短信到mas机待发短信表

public void work() {

// 任务ID 100001

// 首先查询任务是否正在执行

// 查询列表

TaskInfo taskInfo = new TaskInfo()

taskInfo.setTask_id("100001")

try {

taskInfo = (TaskInfo) baseService.queryForObject("sms_send.queryTaskStatus", taskInfo)

//如果状态是处室状态则执行,否则此次任务不执行

if (BaseConstant.task_status_cs.equals(taskInfo.getTask_status())) {

taskInfo.setTask_status(BaseConstant.task_status_zx)//设置任务执行状态为执行

taskInfo.setTask_last_start_time(new Date())//设置任务执行开始唯明时间

baseService.update("sms_send.updateTaskStatus", taskInfo)//

//移动号码库

HashMap<String,String> hashMap = new HashMap<String,String>()

//134 、135、136、137、138、139、150、151、152、158、159、182、183、184。157、187、188

hashMap.put("134", "134")

hashMap.put("135", "135")

hashMap.put("136", "136")

hashMap.put("137", "137")

hashMap.put("138", "138")

hashMap.put("139", 灶亩"139")

hashMap.put("150", "150")

hashMap.put("151", "151")

hashMap.put("152", "152")

hashMap.put("157", "157")

hashMap.put("158", "158")

hashMap.put("159", "159")

hashMap.put("182", "182")

hashMap.put("183", "183")

hashMap.put("184", "184")

hashMap.put("187", "187")

hashMap.put("188", "188")

SmsVisit smsSend = new SmsVisit()

smsSend.setSms_status(BaseConstant.sms_status_csh)

List list = baseService.queryForList("sms_send.queryForSmsTask", smsSend)

List smsMasList = new ArrayList()

List smsList = new ArrayList()

if (list == null||list.size()==0) return// 如果列表为空,没有待办任务,则任务结束

for (int i = 0 i < list.size() i++) {

smsSend = (SmsVisit) list.get(i)

//String msg = messagecontent(smsSend)

String msg = smsSend.getSpare_2()

if(hashMap.get(smsSend.getVisit_phone().substring(0, 3))!=null){

                     SmsOutBox smsOutBox = new SmsOutBox()

     smsOutBox.setSismsid(smsSend.getP_id())

     smsOutBox.setReqdeliveryreport(BaseConstant.NoReport)

     smsOutBox.setApplicationid(BaseConstant.APPLICATIONID)

     smsOutBox.setDestaddr(smsSend.getVisit_phone())

     smsOutBox.setMsgfmt(BaseConstant.MSGFMT)

     smsOutBox.setRequesttime(new Date())

     smsOutBox.setExtcode(smsSend.getExtccode())

     smsOutBox.setSendmethod(BaseConstant.NoMsg)// 正常短信

                     smsOutBox.setMessagecontent(msg)

                     smsMasList.add(smsOutBox)

}else{

boolean con = true

String lastMsg = msg

int xh =0

while(con){

lastMsg = msg.substring(0,msg.length() > 55 ? 55 : msg.length())

msg = msg.substring(msg.length() > 55 ? 55 : msg.length(),msg.length())

if (msg.equals("")) {

con = false

}

SmsOutBox smsOutBox = new SmsOutBox()

     smsOutBox.setSismsid(smsSend.getP_id()+(xh==0?"":xh))

     xh++

     smsOutBox.setReqdeliveryreport(BaseConstant.NoReport)

     smsOutBox.setApplicationid(BaseConstant.APPLICATIONID)

     smsOutBox.setDestaddr(smsSend.getVisit_phone())

     smsOutBox.setMsgfmt(BaseConstant.MSGFMT)

     smsOutBox.setRequesttime(new Date())

     smsOutBox.setExtcode(smsSend.getExtccode())

     smsOutBox.setSendmethod(BaseConstant.NoMsg)// 正常短信

                     smsOutBox.setMessagecontent(lastMsg)

                        smsMasList.add(smsOutBox)

}

}

    SmsVisit smsSendTemp = new SmsVisit()

smsSendTemp.setP_id(smsSend.getP_id()) 

//smsSendTemp.setSpare_2(msg)//短信内容

smsSendTemp.setSms_status_time(new Date())

smsSendTemp.setSms_status(BaseConstant.sms_status_yfswg) 

    smsList.add(smsSendTemp)

}

baseService.insertBatch("sms_send.insertSmsOutBox", smsMasList)//插入本地历史记录表

baseServiceMas.insertBatch("sms_mas.insertSmsOutBox", smsMasList)//插入mas机待发送表

baseService.updateBatch("sms_send.updateSmsVisit", smsList)//更新回访记录状态

}

} catch (Exception e) {

e.printStackTrace()

//baseService.saveLog("同步短信到mas机待发短信表", "100001", "同步短信到mas机待发短信表错误")

logger.error("同步短信到mas机待发短信表错误", getTrace(e))

}finally{

try {

taskInfo.setTask_status(BaseConstant.task_status_cs)//设置任务执行状态为初始

taskInfo.setTask_last_end_time(new Date())//设置任务执行结束时间

taskInfo.setTask_status_desc("任务执行结束")

baseService.update("sms_send.updateTaskStatus", taskInfo)//

} catch (Exception e2) {

e2.printStackTrace()

// TODO: handle exception

}

}

}

public String messagecontent(SmsVisit smsSend){

//XX,您好!您于XX月XX日办理XX业务(或XX,您好!XX大队于XX月XX日对你单位进行监督检查/行政处罚/火灾调查),现进行满意度回访,请回复数字:1为满意;2为基本满意;3为不满意。感谢您对消防工作的支持!回复免费。宿迁市公安消防支队

//首先根据业务类型来判断采用哪种模板 监察

StringBuffer msg = new StringBuffer("") 

if(BaseConstant.jiancha.equals(smsSend.getVisit_deal_business_type())){

msg.append(smsSend.getVisit_name_cn())

   .append(",您好!")

   .append(smsSend.getVisit_deal_org_name())

   .append("于")

   .append(smsSend.getVisit_deal_time().substring(4, 6)).append("月")

   .append(smsSend.getVisit_deal_time().substring(6, 8)).append("日")

   .append("对你单位进行").append(DictCommon.getEntryMap(BaseConstant.jiancha).get(smsSend.getVisit_deal_business()))

   .append(",现进行满意度回访,请回复数字:1为满意;2为基本满意;3为不满意。感谢您对消防工作的支持!")

}else if(BaseConstant.yewu.equals(smsSend.getVisit_deal_business_type())){

msg.append(smsSend.getVisit_name_cn())

   .append(",您好!您于")

   .append(smsSend.getVisit_deal_time().substring(4, 6)).append("月")

   .append(smsSend.getVisit_deal_time().substring(6, 8)).append("日")

   .append("办理").append(smsSend.getVisit_deal_business()).append("业务,")

   .append("现进行满意度回访,请回复数字:1为满意;2为基本满意;3为不满意。感谢您对消防工作的支持!")

}

return msg.toString()

}

public BaseService getBaseService() {

return baseService

}

public void setBaseService(BaseService baseService) {

this.baseService = baseService

}

public BaseService getBaseServiceMas() {

return baseServiceMas

}

public void setBaseServiceMas(BaseService baseServiceMas) {

this.baseServiceMas = baseServiceMas

}

public static void main(String[] args){

List smsMasList = new ArrayList() 

try {

String msg = "***,您好!*********于2015年5月2日对你单位进行监督检查,现进行满意度回访,请回复数字:1为满意;2为基本满意;3为不满意。感谢您对消防工作的支持!"

SmsOutBox smsOutBox = new SmsOutBox()

smsOutBox.setSismsid("12344")

smsOutBox.setReqdeliveryreport(BaseConstant.NoReport)

smsOutBox.setApplicationid(BaseConstant.APPLICATIONID)

smsOutBox.setDestaddr("111")

smsOutBox.setMsgfmt(BaseConstant.MSGFMT)

smsOutBox.setRequesttime(new Date())

smsOutBox.setExtcode("2222")

smsOutBox.setSendmethod(BaseConstant.NoMsg)// 正常短信

boolean con = true

String lastMsg = msg

while(con){

lastMsg = msg.substring(0,msg.length() > 55 ? 55 : msg.length())

msg = msg.substring(msg.length() > 55 ? 55 : msg.length(),msg.length())

if (msg.equals("")) {

con = false

}

SmsOutBox smOutBox_temp = new SmsOutBox() 

smOutBox_temp = smsOutBox

smOutBox_temp.setMessagecontent(lastMsg)

 

smsMasList.add(smOutBox_temp)

}

    for(Object o:smsMasList){

     SmsOutBox smsOutBox2 = (SmsOutBox)o

     System.out.println(smsOutBox2.getMessagecontent())

    }

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

public static String getTrace(Throwable t) {

        StringWriter stringWriter= new StringWriter()

        PrintWriter writer= new PrintWriter(stringWriter)

        t.printStackTrace(writer)

        StringBuffer buffer= stringWriter.getBuffer()

        return buffer.toString()

    }

}

短信不是你想发  想发就能发,是收费的,我们公司是租用的移动MAS平台的短信发送接收平台,上面那是和一个和mas同步的一个小程序,租用别人的mas平台是收费的,平台有很多自己选择,有发送接口可以调,发送内容自己提供


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12477635.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存