java语言实现的短信接入实例,各公司大同小异

时间:2022-05-13 08:10:07

和几家短信平台接触过,都进行了接入测试。总体来说短信发送又快,覆盖率又全的,价格相对贵些。简易选两家分开使用,短信验证码的用一家贵的快的,普通的推广群发短信就用一个便宜的。

下面显示下测试代码

 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;
}
}