「javasms短信接口」java发短信接口

博主:adminadmin 2023-01-02 10:09:07 739

今天给各位分享javasms短信接口的知识,其中也会对java发短信接口进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

实现第三方短信接口的工具类怎么写

package com.szqbl.qxfz.io;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.HttpMethod;

import org.apache.commons.httpclient.HttpStatus;

import org.apache.commons.httpclient.URIException;

import org.apache.commons.httpclient.methods.GetMethod;

import org.apache.commons.httpclient.util.URIUtil;

import org.apache.commons.lang3.StringUtils;

import com.szqbl.lib.util.MD5Util;

public class SMSUtil {

public static void sendSMS_GM(ListString mobileno, String content) {

String eprId = "***";

String userId = "******";//用户名

String pwd = "******";//密码

long timestamp = System.currentTimeMillis();

int msgId = (int) (Math.random() * 1000);

String key = MD5Util.string2MD5(eprId + userId + pwd + timestamp);

String mobile = "";

for (String tel : mobileno) {

mobile += isMobile(tel) ? tel + "," : "";

}

if (StringUtils.isNotEmpty(mobile)) {

mobile = mobile.substring(0, mobile.length() - 1);

}

String url = "***";

String parmString = "?cmd=sendeprId=" + eprId + "userId=" + userId + "key=" + key + "timestamp=" + timestamp

+ "format=1mobile=" + mobile + "msgId=" + msgId + "content=" + content;

// 发送短信

String result = doGet(url, parmString, "utf-8", false);

System.out.println(result);

}

/**

 * 手机号验证

 * 

 * @param str

 * @return 验证通过返回true

 */

public static boolean isMobile(String str) {

Pattern p = null;

Matcher m = null;

boolean b = false;

p = Pattern.compile("^[1][3,4,5,8][0-9]{9}$"); // 验证手机号

m = p.matcher(str);

b = m.matches();

return b;

}

/**

 * 执行一个HTTP GET请求,返回请求响应的HTML

 * 

 * @param url

 *            请求的URL地址

 * @param queryString

 *            请求的查询参数,可以为null

 * @param charset

 *            字符集

 * @param pretty

 *            是否美化

 * @return 返回请求响应的HTML

 */

public static String doGet(String url, String queryString, String charset, boolean pretty) {

StringBuffer response = new StringBuffer();

HttpClient client = new HttpClient();

HttpMethod method = new GetMethod(url);

try {

if (queryString != null  !queryString.equals(""))

// 对get请求参数做了http请求默认编码,好像没有任何问题,汉字编码后,就成为%式样的字符串

method.setQueryString(URIUtil.encodeQuery(queryString));

client.executeMethod(method);

if (method.getStatusCode() == HttpStatus.SC_OK) {

BufferedReader reader = new BufferedReader(

new InputStreamReader(method.getResponseBodyAsStream(), charset));

String line;

while ((line = reader.readLine()) != null) {

if (pretty)

response.append(line).append(System.getProperty("line.separator"));

else

response.append(line);

}

reader.close();

}

} catch (URIException e) {

} catch (IOException e) {

} finally {

method.releaseConnection();

}

return response.toString();

}

public static void main(String[] args) throws Exception {

ListString tels = new ArrayListString();

tels.add("18288888888");

sendSMS_GM(tels, "短信main测试!");

}

}

这个得根据你的短信接口文档来,大概也就这样,写的比较简单,忘采纳!

java 如何发送短信

这段代码本身只是利用java访问了一个url:(",后面带了一堆的参数:String data = "user_id=" + user_id + "password=" + password +

"mobile_phone=" + mobile_phone +

"msg=" + URLEncoder.encode(msg, "GBK") + "send_date=" + send_date +

"subcode=" + subcode;

,仅此而已,至于具体要怎么发,那就要看这个URL提供放的后台是如何定义参数的含义了。

java怎么同步发送及异步发送短信例子解析

发送短信的接口

根据自己的情况选择服务商。

开发文档

从开发文档中我们可以看到. 可以直接使用http请求也可以使用WebService请求发送短信. 由于DEMO文件夹下的java和jsp文件夹中的代码都是使用http请求发送短信. 所以这里就不再细说了, 我们使用WebService的方式演示发送短信.

生成客户端代码

从接口文档中我们知道它的WebService的WSDL的url为: 那么我们可以执行下面的命令生成客户端代码:

wsimport -keep

其中wsimport是JDK自带的工具, -keep url选项是"保留生成的文件". 该命令会在当前目录下生成sms.cn.ihuyi._106包, 以及众多的类. 接下来开始编写我们自己的代码.

定义接口

为了方便, 这里我们首先定义一个接口:

Sms.java

public interface Sms {

 /**

  * 向mobile发送短信, 内容为message

  * 

  * @param mobile 手机号

  * @param message 短信内容

  * @return 成功返回-1, 否则返回其他值

  */

 int sendMessage(String mobile, String message);

}

这个接口很简单, 只有一个方法. 这个方法用来发送短信.

同步发送短信

接下来我们首先实现一个同步发送短信的类:

IhuyiSmsImpl.java

public class IhuyiSmsImpl implements Sms {

 private String account;

 private String password;

 public void setAccount(String account) {

  this.account = account;

 }

 public void setPassword(String password) {

  this.password = password;

 }

 @Override

 public int sendMessage(String mobile, String message) {

  cn.ihuyi._106.Sms factory = new cn.ihuyi._106.Sms();

  SmsSoap smsSoap = factory.getSmsSoap();

  SubmitResult submit = smsSoap.submit(account, password, mobile, message);

  int code = submit.getCode();

  if(code == 2){

   return -1;

  }

  System.out.println("发送短信失败, code:" + code);

  return code;

 }

}

异步发送短信

由于发送短信涉及到网络通信, 因此sendMessage方法可能会有一些延迟. 为了改善用户体验, 我们可以使用异步发送短信的方法. 原理很简单: 如果用户请求发送短信, 我们不是直接调用IhuyiSmsImpl的sendMessage方法, 而是将请求保存起来(生产者), 然后告诉用户: 短信发送成功. 之后有若干个消费者取出任务, 调用sendMessage方法发送短信.

这里, 我使用线程池完成上面的任务:

AsyncSmsImpl.java

public class AsyncSmsImpl implements Sms {

 public Sms sendSms;

 private ExecutorService executorService = Executors.newFixedThreadPool(3);

 public void setSendSms(Sms sendSms) {

  this.sendSms = sendSms;

 }

 @Override

 public int sendMessage(String mobile, String message) {

  try {

   executorService.submit(() - sendSms.sendMessage(mobile, message));

  }

  catch(Exception e) {

   Sysemt.out.println("提交任务时发生错误" + e);

   return 0;

  }

  return -1;

 }

 public void destroy(){

  try{

   executorService.shutdown();

  }

  catch(Exception e){}

 }

}

在第17行, 我们获得远程对象的一个代理对象. 之后就可以通过这个代理对象进行发送短信, 查询账户余额等操作.

第18行, 使用该代理对象的submit方法提交了短信内容. 该方法的参数信息及返回值含义在接口文档中有详细的说明.

第19行我们获得了结果的状态码. 根据文档上的说明, 状态码为2说明提交成功. 简单起见, 这里我们只关注提交成功的情况. 需要注意的是, 状态码为2只是说明提交成功. 根据官网上的"3-5秒内响应、100%到达", 我们可以推测. 如果提交成功, 那么基本上3-5秒内,短信就会发送成功, 根据用户的网络情况, 可能稍有延迟用户就可以收到短信.

使用这段代码发送短信也很简单, 直接new一个对象, 设置好账号和密码就可以发送短信了.

代码很简单, 直接将Sms接口的sendMessage(mobile, message)方法作为一个任务加到线程池的任务队列中. 这样等到有空闲线程时, 就会执行sendSms.sendMessage(mobile, message)发送短信. 这里我们假设只要保存到线程池就可以成功发送短信. 因为发送失败的情况实际上很罕见.

java程序怎么调用webservice接口,实现发送短信功能

给你一个最简单的方法:

第一、根据 拿到WSDL文件。

第二、根据Axis的jar包,把WSDL文件生成客服端java代码。(可以把java文件打成jar文件,便于管理。怎么生成java代码,百度里都有说明我就不写了。)

第三、在你工程里用AXIS的功能属性,调用外部接口;给你一个格式模板:

MobileCodeWSLocator l=new MobileCodeWSLocator();//MobileCodeWSLocator是WSDL文件生成客服端java类;

MobileCodeWSSoap s=l.getMobileCodeWSSoap();();//MobileCodeWSSoap 是WSDL文件生成客服端java类

String m=s.getMobileCodeInfo("13811534742", "");

如果你用Axis生成的java类,格式和上面一样;自己参考一下就懂了。

你上面明显的连接异常,第三方服务明显没有开,WEBSERVICE可以设置户名、密码,像行所有的WEBSERVICE都设置,安全考虑吧。

java发送手机短信

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);//

//移动号码库

HashMapString,String hashMap = new HashMapString,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平台是收费的,平台有很多自己选择,有发送接口可以调,发送内容自己提供

短信接口是什么东西?

我来给你介绍一下短信接口就是短信SDK、API,以下就是我编辑的java短信接口,已经测试请求步骤。

单条短信接口:此接口为客户发送单条短信提供支持

安全接口

安全接口的数据传输经过加密、压缩,能够保障数据传输安全,如果有安全性要求,建议选用安全接口;

安全接口所接收、响应的数据,均经过AES加密,在数据加密前允许使用gzip算法压缩数据。

数据加密方式:AES;

加密算法:AES/ECB/PKCS5Padding;

压缩算法:gzip 【建议进行数据压缩】;

请求

链接

参数

参数类型传输方式描述appIdStringhttp头信息传输用户Appid(必填)gzipStringhttp头信息传输是否启用GZIP压缩【非必填】

on :是encodeStringhttp头信息传输字符集【非必填】

如果不填,默认UTF-8编码集,此字符集必须与实际传输数据字符集相同mobileString1、将所有参数拼装成json串后;

2、将json串进行AES加密;

3、加密后的byte数组通过post直接传输;手机号(必填)contentString短信内容(必填)timerTimeString定时发送时间(选填,定时时间在90天之内)

格式:yyyy-MM-dd HH:mm:ss

如果不填,则为即时发送customSmsIdString自定义消息ID(选填)

最长32位extendedCodeString扩展码(选填)

最长支持12位,如果最终号码长度超长,会截取扩展码,请根据我司建议位数提交requestTimelong请求时间(必填)

格式:时间毫秒数

安全验证字段,防止同一个请求重复提交;

短信平台根据requestTime与requestValidPeriod共同判断请求是否有效,针对无效的请求,短信平台响应错误;

判断方法:请求时间 + 请求有效时间 当前时间 ? 有效 : 无效;requestValidPeriodint请求有效时间(必填)[单位:秒]

描述同上示例

1、将参数拼装成json串

{

"mobile":"15538850000",

"content":"【清华大学】 i love you ! ",

"timerTime":"2017-03-15 12:00:00",

"extendedCode":"112",

"customSmsId":"2017010709302911",

"requestTime":1490588340964,

"requestValidPeriod":30

}

2、将json串转化为UTF-8编码的byte数组

Byte[] data = json.toBytes["UTF-8"];

3、如果需要gzip压缩,则压缩数据,并放入标示,[非必需步骤]

data =gzip.com (data);

http.setHead("gzip","on");

4、通过AES加密

data = AES. encryption (secretKey,data,算法);

5、将appId放入http head

http.setHead("appId",appId);

6、通过http post方法传输

Byte[] response = http.post(url,data);

响应

参数

参数类型传输方式描述resultStringhttp头信息传输请求状态码,详见本文档《接口状态码表》

当result不是SUCCESS时,不会响应下面参数数据。mobileString传输过来的数据是加密后的byte数组手机号smsIdString消息IDcustomSmsIdString客户自定义SMSID示例

1、从http头信息获取请求状态,如果code不是SUCCESS,不用进行下面几步

String code = http.getHead("reasult");

2、从响应流获取响应数据,并解密

Byte[] data = Response.getdata();

data = AES. decryption (secretKey, data,算法);

3、如果请求信息中有压缩标示,返回的数据也是压缩过的,需要解压缩;[非必须步骤]

data = GZIP.dcom(data);

4、将数据转换成JSON串

String json = new String(data,"UTF-8");

{

"mobile":"15538850000",

"smsId":"20170392833833891100",

"customSmsId":"20170392833833891100"

接入指导

步骤一:登录亿美软通官网

步骤二:注册并获取客户标识(AppId)和客户密钥(secretKey)账号

步骤三:参照接口文档和DEMO,对接接口并测试

步骤四:测试通过,正式上线,充值使用

javasms短信接口的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java发短信接口、javasms短信接口的信息别忘了在本站进行查找喔。