package com.yc.duanxin; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.HashMap; 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.HttpException; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; import com.yc.param.DuanXinPrama; import com.yc.utils.KeywordFilter; /** * 接收及发送短信 * * @author pengbei * */ public class Sms { /** * 发送短信 * * @param mob * 手机号 可以多个如(13888888886,13888888887,1388888888 一次最多对50个手机发送) * @param content * 短信内容 * @return * @throws IOException * @throws HttpException * @throws UnsupportedEncodingException */ /** 登录帐号 */ private String uid = ""; /** 登录密匙 */ private String key = ""; public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public static void main(String[] args) { Sms sms = new Sms(); sms.setKey("b6f237346163cccc2eea"); sms.setUid("yingchen"); String rs = sms.sendSMS("13639117724", "【巴士软件】验证码 [6731],请勿告诉他人!有效时间10分钟"); // int rsNum = Integer.parseInt(rs); // String ret; // if (rsNum < 0) { // // switch (rsNum) { // case -1: // ret = "没有该用户账户" + "[" + corpEntity.getSmsKey() + "]"; // break; // case -2: // ret = "密钥不正确 "; // break; // case -3: // ret = "短信数量不足"; // break; // case -11: // ret = "该用户被禁用"+"["+ corpEntity.getSmsKey() + "]"; // break; // case -14: // ret = "短信内容出现非法字符"+"[" + content + "]"; // break; // case -4: // ret = "手机号格式不正确"+"[" + tel + "]"; // break; // case -41: // ret = "手机号码为空"; // break; // case -42: // ret = "短信内容为空"; // break; // case -51: // ret = "短信签名格式不正确,接口签名格式为:【签名内容】"; // break; // } // } System.out.println(rs); } /** * 发送短信 * @param mob发送短信接收的手机号 * @param content 发送短信的内容 * @return */ public String sendSMS(String mob, String content) { try { // 过滤关键词 String contents = filterSMSKey(content); HttpClient client = new HttpClient(); //PostMethod post = new PostMethod("http://gbk.sms.webchinese.cn/"); //post.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=gbk");// 在头文件中设置转码 PostMethod post = new PostMethod("https://utf8api.smschinese.cn"); //新版接口, Modified by Johns Wang,2021-04-01 , 新接口后台管理地址: http://user.smschinese.cn/Login.shtml post.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");// 在头文件中设置转码 NameValuePair[] data = { new NameValuePair("Uid", getUid()), new NameValuePair("Key", getKey()), new NameValuePair("smsMob", mob), new NameValuePair("smsText", contents) }; post.setRequestBody(data); client.executeMethod(post); String result = new String(post.getResponseBodyAsString().getBytes("utf-8")); post.releaseConnection(); return result; } catch (Exception e) { return "-1"; } } /** * 接收短信 * * @param Action * UP 输出上行回复信息 * @param Prompt * 0 下次继续提示,1 输出回复下次不提示 * @return 回复获得用户的集合 * @throws IOException * @throws HttpException * @throws UnsupportedEncodingException */ public List> upSMS(String Action, String Prompt) throws IOException, HttpException, UnsupportedEncodingException { SmsParm smsParm = new SmsParm();// 接收回复短信统一用公司账号进行处理,因为回复过来的不知道是属于那个客户的,也不需要收费。 HttpURLConnection httpconn = null; // 组装配置参数 StringBuilder sb = new StringBuilder(); sb.append("http://sms.webchinese.cn/web_api/SMS/?");// utf-8:http://sms.webchinese.cn/web_api/SMS/ // gbk:http://sms.webchinese.cn/web_api/SMS/GBK sb.append("Uid=").append(smsParm.getUid()); sb.append("&Key=").append(smsParm.getKey()); sb.append("&Action=").append(Action); sb.append("&Prompt=").append(Prompt); List> infoList = new ArrayList>(); try { URL url = new URL(sb.toString()); httpconn = (HttpURLConnection) url.openConnection(); BufferedReader rd = new BufferedReader(new InputStreamReader(httpconn.getInputStream())); Pattern pattern = null; Matcher matcher = null; HashMap infoMap = new HashMap(); String result = ""; while (null != (result = rd.readLine())) { if (result.indexOf("") != -1) {// 有电话 pattern = Pattern.compile("(.*)"); matcher = pattern.matcher(result); if (matcher.find()) {// 只要读到的第一个 result = matcher.group(1); infoMap.put(DuanXinPrama.MOB, result); continue; } } if (result.indexOf("") != -1) {// 有回复内容 pattern = Pattern.compile("(.*)"); matcher = pattern.matcher(result); if (matcher.find()) {// 只要读到的第一个 result = matcher.group(1); infoMap.put(DuanXinPrama.CONTENT, result); continue; } } if (result.indexOf("") != -1) {// 有回复时间 pattern = Pattern.compile(""); matcher = pattern.matcher(result); if (matcher.find()) {// 只要读到的第一个 result = matcher.group(1); infoMap.put(DuanXinPrama.TIME, result); continue; } } if (result.indexOf("") != -1) {// 一条信息读取结束 infoList.add(infoMap); infoMap = new HashMap(); // 清空infoMap } } rd.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (UnknownHostException e) { // 不处理 System.out.println("发送手机短信时,无法联系短信服务器:" + e.getMessage()); } catch (IOException e) { e.printStackTrace(); } finally { if (httpconn != null) { httpconn.disconnect(); httpconn = null; } } return infoList; } private String filterSMSKey(String content) {// 处理手机短信的一些关键词,以便能发送出去 KeywordFilter.init(); return KeywordFilter.getFilterString(content, "*"); } }