package com.cku.sms; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.Date; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.cku.config.Global; import com.cku.util.MD5Generator; /** * 短信发送功能模块 * * fanhuibin 优化 * @author yueyang */ public class ZtSmsUtil { private static Logger logger = LoggerFactory.getLogger(ZtSmsUtil.class); public static final String SMS_LEFT = "尊敬的会员,"; private static final String SMS_RIGHT = "【宠爱王国】"; private static final String SMS_UN_SUBSCRIBE = "拒收请回复R"; private static final String sendUrl = "http://api.mix2.zthysms.com/v2/sendSms"; private static final String usernameHY = "chongaihy"; private static final String passwordHY = "136jr64H"; private static final String usernameYX = "chongaiyx"; private static final String passwordYX = "s12RE0tt"; private static final int TYPE_HY = 1; private static final int TYPE_YX = 2; public static String getUrl(String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(sendUrl); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("content-type", "application/json"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); //设置相应请求时间 conn.setConnectTimeout(30000); //设置读取超时时间 conn.setReadTimeout(30000); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream(),"utf-8")); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { e.printStackTrace(); // System.out.println(e); // return "发送 POST 请求出现异常!"; } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } logger.info("send sms result:{}",result); return result; } /** * @Description: 发送通知类短信 * @author: yuanshuai * @date: 2018/1/19 11:29 */ public static String sendNote(String content, String mobile) { content = SMS_LEFT + content + SMS_RIGHT; String sendParam = buildSendParam(mobile, content, TYPE_HY); return StringUtils.isBlank(sendParam) ? null : getUrl(sendParam); } /** * @Description: 发送营销类短信 * @author: yuanshuai * @date: 2018/1/19 11:29 */ public static String sendNoteYX(String content, String mobile) { content = content + SMS_UN_SUBSCRIBE + SMS_RIGHT; String sendParam = buildSendParam(mobile, content, TYPE_YX); return StringUtils.isBlank(sendParam) ? null : getUrl(sendParam); } /** * * @Description:注册宠爱王国账号使用的发送验证码方法 * @author: zhuoHeng * @version: 2017年5月22日 上午11:01:50 */ public static String sendVerificationCode(String content, String mobile, String type) { String sendParam = buildSendParam(mobile, SMS_LEFT + content, TYPE_HY); logger.info("ztsms param:{}",sendParam); return StringUtils.isBlank(sendParam) ? null : getUrl(sendParam); } /** * @Description: 根据手机号和内容构建发送的url * @author: yuanshuai * @date: 2017/12/13 17:01 */ private static String buildSendParam(String mobile, String content, int type) { logger.info("build send param mobile:{},content:{},type:{}",mobile,content,type); String param; //非正式环境无法发送短信 if (Global.isDevMode() && !mobile.equals("18515039553")// 刘慧敏 && !mobile.equals("18810669468")// 袁帅 && !mobile.equals("15811560827")// 朱云飞 && !mobile.equals("13911284656")// 甘甘 && !mobile.equals("15652191645")// 张君武 && !mobile.equals("15210500649")// 张向 && !mobile.equals("13651185032") // 林涛 && !mobile.equals("15652388352") //赵雪圆 && !mobile.equals("15210500649")// 张向 ) { logger.debug("短信发送失败,开发模式不能发送短信"); return ""; } if(mobile.length() != 11){ logger.debug("手机号码不正确发送失败"); return ""; } try { String tKey = String.valueOf(new Date().getTime()).substring(0,10); String username = null; String password = null; switch (type) { case TYPE_HY: username = usernameHY; password = passwordHY; break; case TYPE_YX: username = usernameYX; password = passwordYX; break; } param = "{" + "\"content\":\"" + content + SMS_RIGHT + "\"," + "\"mobile\":\"" + mobile + "\"," + "\"tKey\":\"" + tKey + "\"," + "\"username\":\"" + username + "\"," + "\"password\":\"" + MD5Generator.generate(MD5Generator.generate(password) + tKey) + "\"" + "}"; } catch (Exception e) { e.printStackTrace(); return null; } return param; } }