java语言实现的短信接入实例,各公司大同小异
和几家短信平台接触过,都进行了接入测试。总体来说短信发送又快,覆盖率又全的,价格相对贵些。简易选两家分开使用,短信验证码的用一家贵的快的,普通的推广群发短信就用一个便宜的。
下面显示下测试代码
public class HttpSMSSender {
protected final Logger logger = LoggerFactory.getLogger(getClass());
// 短信接口地址
private String postUrl = "http://ip:port/webservice.asmx";
@Autowired
private AppVars vars;
private String sname = "username"; // 提交账户
private String spwd = "password"; // 提交账户的密码
private String spnumber = ""; // 企业代码(扩展号,可空着)
private String key = "【某某公司】";
@Deprecated
String sdst; // 接收号码,每次只能提交1个号码
@Deprecated
String smsg; // 信息内容,通常为70汉字以内,具体由平台内部决定
/**
* @param phoneNum
* 手机号码
* @param msg
* 短信内容
* @return 成功返回0
*/
public static void main(String[] args) {
HttpSMSSender sms = new HttpSMSSender();
// String msg = "您正通过" + vars2.websiteNameCn
// + "提现至银行卡(尾号0908),金额90元,请确认无误后方可输入短信验证码:289002。如非本人操作,请拨打客服电话"
// + vars2.servicePhone;
String msg = "您好!用户哈哈,您好!您" + "平台的手机绑定验证码为:989887,请确认。";
sms.send("186****5286", msg);
}
public int send(String phoneNum, String msg) {
StringBuilder postData = new StringBuilder();
try {
// sb
String pwdd = MD5.EncoderByMd5(sname + spwd);
postData.append("sn").append("=").append(sname).append("&");
postData.append("pwd").append("=").append(pwdd).append("&");
postData.append("Ext").append("=").append("").append("&");
postData.append("stime").append("=").append("").append("&");
postData.append("mobile").append("=").append(phoneNum).append("&");
postData.append("Rrid").append("=").append("").append("&");
postData.append("Content").append("=")
.append(java.net.URLEncoder.encode(msg + key, "GBK"));
return send(postData.toString());
} catch (Exception x) {
logger.error("发送短信时发生异常", x);
return -1;
}
}
private int send(String postData) throws UnsupportedEncodingException,
IOException, ParserConfigurationException, SAXException {
logger.info("请求短信接口内容[{}]", postData);
HttpURLConnection conn = null;
try {
final URL url = new URL(postUrl + "?" + postData);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.connect();
// 获取响应状态
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
logger.error("连接短信服务器失败");
return -1;
}
InputStream is = conn.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = -1;
while ((i = is.read()) != -1) {
baos.write(i);
}
logger.info("请求短信接口返回内容[{}]", baos.toString());
int resultCode = -1;
try {
resultCode = 0;
} catch (Exception e) {
resultCode = -1;
// TODO: handle exception
}
return resultCode;
} finally {
if (conn != null) {
conn.disconnect();
}
}
}
private int parseResultCode(InputStream is)
throws ParserConfigurationException, SAXException, IOException {
final Map<String, String> map = new HashMap<String, String>();
SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
saxParser.parse(is, new DefaultHandler() {
private String tag = "";
public void endElement(String uri, String localName, String qName)
throws SAXException {
tag = "";
}
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {
tag = qName;
}
public void characters(char[] ch, int start, int length)
throws SAXException {
if (!tag.isEmpty()) {
map.put(tag, new String(ch, start, length));
}
}
});
logger.info("短信接口返回码[{}]描述[{}]", map.get("State"), map.get("MsgState"));
return Integer.valueOf(map.get("State"));
}
public String getPostUrl() {
return postUrl;
}
public String getSname() {
return sname;
}
public String getSpwd() {
return spwd;
}
public void setPostUrl(String postUrl) {
this.postUrl = postUrl;
}
public void setSname(String sname) {
this.sname = sname;
}
public void setSpwd(String spwd) {
this.spwd = spwd;
}
}
java语言实现的短信接入实例,各公司大同小异的更多相关文章
- java springboot activemq 邮件短信微服务,解决国际化服务的国内外兼容性问题,含各服务商调研情况
java springboot activemq 邮件短信微服务,解决国际化服务的国内外兼容性问题,含各服务商调研情况 邮件短信微服务 spring boot 微服务 接收json格式参数 验证参数合 ...
- Java 实现手机发送短信验证码
Java 实现手机发送短信验证码 采用引入第三方工具的方式,网上查了半天,发现简单的实现方式便是注册一个中国网建的账号,新建账号的时候会附带赠几条免费短信,彩信 ,之后想要在使用就得花钱了.简单的操作 ...
- java短信接入
1,注册一个中间公司的短信平台(比如网建) 2,找到密匙 3,找到链接案例 4,复制代码 下载jar包 import java.io.UnsupportedEncodingException;imp ...
- java实现注册的短信验证码
最近在做只能净化器的后台用户管理系统,需要使用手机号进行注册,找了许久才大致了解了手机验证码实现流程,今天在此和大家分享一下. 我们使用的是榛子云短信平台, 官网地址:http://smsow.zhe ...
- 第一次发博,发个简单的Java程序发送手机短信验证
最近在准备一个项目,想的登录时候用手机验证,就通过上网查阅了一下手机验证的实现方法,原来超级简单,下面将一步一步介绍. 1.去中国网建注册一个账号密码,首次注册送五条免费短信和3条免费彩信.具体的网址 ...
- wuzhicms短信API 实例调用
1.接口调用 $sendsms = load_class('sms','sms'); echo $sendsms->send_sms('18911549611', '888888', 1); / ...
- java + maven 实现发送短信验证码功能
如何使用java + maven的项目环境发送短信验证码,本文使用的是榛子云短信 的接口. 1. 安装sdk 下载地址: http://smsow.zhenzikj.com/doc/sdk.html ...
- SSH2框架实现注冊发短信验证码实例
这两天開始写程序了,让用SSH2框架,曾经没有接触过Java项目更没有接触过SSH2框架,所以用注冊開始了我Java之旅.后来发现,后台代码挺easy理解的,跟.net的差点儿相同.就是层与层之间的调 ...
- Java演示手机发送短信验证码功能实现
我们这里采用阿里大于的短信API 第一步:登陆阿里大于,下载阿里大于的SDK a.在阿里大于上创建自己的应用 b.点击配置管理中的验证码,先添加签名,再配置短信模板 第二步:解压相关SDK,第一个为j ...
随机推荐
- LintCode "Triangle Count"
Should be "Medium" or even "Easy".. Just with a little Greedy. class Solution { ...
- linux时间管理
/etc/sysconfig/clock 该配置文件可用来设置用户选择何种方式显示时间.如果硬件时钟为本地时间,则UTC设为0,并且不用设置环境变量TZ.如果硬件时钟为UTC时间,则要 ...
- bzoj4637: 期望
Description 在米国有一所大学,名叫万国歌剧与信息大学(UniversalOperaandInformaticasUniversity).简称UOI大学.UO I大学的建筑与道路分布很有趣, ...
- 就Double、Decimal来说数据计算异常
场景: 客户提示发料时提示库存不足,可肉眼比对发料数量与库存数量没有一点问题. 但调度跟踪却发现出现“不可思议”的异常. 简单分析: 1.转Decimal再计算没问题.精度较高,存储方法也不一样,所以 ...
- Ubuntu下面配置问题
下开启root登陆 sudo passwd root 输入两次新密码 就能在虚拟终端下用 root登陆了,或者 su到root用户了. ctrl + alt +t 弹出终端 ctrl+ alt+ f7 ...
- MySQL key/value存储方案(转)
需求 250M entities, entities表共有2.5亿条记录,当然是分库的. 典型解决方案:RDBMS 问题:由于业务需要不定期更改表结构,但是在2.5亿记录的表上增删字段.修改索引需要锁 ...
- 1.运行Android Studio,一直提示:Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.
1.解决问题办法:菜单栏,Tools -> Adnroid -> enable ADB integration勾上 2.暂时性的解决方案:在Android Studio中的:Prefere ...
- [实变函数]4.1 可测函数 (measurable function) 及其性质
1 记号 (notations) (1) 广义实数: $\overline{\bbR}=\bbR\cup\sed{-\infty}\cup\sed{+\infty}$. (2) 本章主要考虑 ...
- bug_ _Popwindow被魅族手机自带虚拟键挡住完美解决
======== 1 之前做了一个分享的功能,从底部弹出popwindow进行分享,但是由于部分手机自带虚拟键,如魅族X4,所以弹出的popwindow被虚拟键挡住, 在网上找了好多资料,一些资料说 ...
- winform DataGridView控件判断滚动条是否滚动到当前已加载的数据行底部 z
http://www.zuowenjun.cn/post/2015/05/20/162.html 判断 DataGridView控件滚动条是否滚动到当前已加载的数据行底部,其实方法很简单,就是为Dat ...