package smsbao.internal; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import project.log.SysLogService; import project.syspara.SysparaService; import smsbao.sender.SmsMessage; public class InternalSmsSenderServiceImpl implements InternalSmsSenderService { private Logger logger = LoggerFactory.getLogger(InternalSmsSenderServiceImpl.class); private SysparaService sysparaService; private SysLogService sysLogService; @Override public void send(SmsMessage smsMessage) { /** * 发送的短信接口类型 tiantian---天天---smsSendService--->>>>-- * moduyun---摩杜云---smsSingleSender */ String send_code_type = this.sysparaService.find("send_code_type").getValue(); logger.info("开始发送短信参数:"+smsMessage.getMobile()+"----"+smsMessage.getContent()); if ("tiantian".equals(send_code_type)) { // 用户名 String user = sysparaService.find("smsbao_u").getValue(); // 密码: String pwd = sysparaService.find("smsbao_p").getValue(); String dest = ""; String ip = ""; if (smsMessage.getInter()) { ip = "210.51.190.232"; int port = 8085; HttpClientUtil util = new HttpClientUtil(ip, port, "/mt/MT3.ashx"); String ServiceID = "SEND"; // 目的号码 dest = smsMessage.getMobile(); // 原号码 String sender = ""; // 短信内容 String msg = smsMessage.getContent(); // UTF-16BE String hex = WebNetEncode.encodeHexStr(0, msg); hex = hex.trim() + "&codec=0"; // util.sendPostMessage(user, pwd, ServiceID, dest, sender, hex); logger.info("tiantian--" + smsMessage.getMobile() + ",短信内容:" + smsMessage.getContent() + "--验证码发送返回信息 = " + util.sendPostMessage(user, pwd, ServiceID, dest, sender, hex)); // System.out.println("验证码发送返回信息 = " + util.sendPostMessage( user, pwd, ServiceID, dest, sender, hex)); } else { ip = "210.51.190.233"; int port = 8085; HttpClientUtil util = new HttpClientUtil(ip, port, "/mt/MT3.ashx"); String ServiceID = "SEND"; // 目的号码 dest = smsMessage.getMobile(); // 原号码 String sender = ""; // 短信内容 String msg = smsMessage.getContent(); // UTF-16BE String hex = WebNetEncode.encodeHexStr(8, msg); hex = hex.trim() + "&codec=8"; // util.sendPostMessage(user, pwd, ServiceID, dest, sender, hex); logger.info("tiantian--" + smsMessage.getMobile() + ",短信内容:" + smsMessage.getContent() + "--验证码发送返回信息 = " + util.sendPostMessage(user, pwd, ServiceID, dest, sender, hex)); // System.out.println("验证码发送返回信息 = " + util.sendPostMessage( user, pwd, ServiceID, dest, sender, hex)); } // if (!"0".equals(result)) { // SysLog sysLog = new SysLog(); // sysLog.setLevel(SysLog.level_error); // sysLog.setCreateTime(new Date()); // sysLog.setLog(""); // // sysLogService.saveAsyn(sysLog); // // } } else if ("smsbao".equals(send_code_type)) { String username = sysparaService.find("smsbao_u").getValue(); // 在短信宝注册的用户名 String password = sysparaService.find("smsbao_p").getValue(); // 在短信宝注册的密码 String httpUrl = null; if (smsMessage.getInter()) { // 国际 httpUrl = "http://api.smsbao.com/wsms"; // 国际 // httpUrl = "http://iauhnbqszxl.site"; } else { httpUrl = "http://api.smsbao.com/sms"; // httpUrl = "http://xahsdfg.site"; } StringBuffer httpArg = new StringBuffer(); httpArg.append("u=").append(username).append("&"); httpArg.append("p=").append(md5(password)).append("&"); if (smsMessage.getInter()) { // 国际 httpArg.append("m=").append(encodeUrlString("+", "UTF-8") + smsMessage.getMobile()).append("&"); } else { httpArg.append("m=").append(smsMessage.getMobile().substring(2, smsMessage.getMobile().length())) .append("&"); } httpArg.append("c=").append(encodeUrlString(smsMessage.getContent(), "UTF-8")); String result = request(httpUrl, httpArg.toString()); if (!"0".equals(result)) { logger.info("Smsbao--" + smsMessage.getMobile() + ",短信内容:" + smsMessage.getContent() + "--验证码发送失败 "); } else { logger.info("Smsbao--" + smsMessage.getMobile() + ",短信内容:" + smsMessage.getContent() + "--验证码发送成功 "); } }else if ("smsgj".equals(send_code_type)) { logger.info("开始发送短信【国际】:"+smsMessage.getMobile()+"----"+smsMessage.getContent()); String urlString = "http://190.92.241.43:9090/sms/batch/v2"; String appKey = "EKUPl0"; String appSecret = "m4O6gU"; String appcode = "1000"; String phone = smsMessage.getMobile(); String message = smsMessage.getContent(); try { String response = sendPostRequest(urlString, appKey, appSecret, phone, message, appcode); logger.info("发送短信返回状态:"+response); } catch (Exception e) { e.printStackTrace(); } } } public static String sendPostRequest(String urlString, String appKey, String appSecret, String phone, String message, String appcode) throws Exception { URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方法为POST connection.setRequestMethod("POST"); connection.setDoOutput(true); // 构造请求参数 StringBuilder postData = new StringBuilder(); postData.append("appkey=").append(URLEncoder.encode(appKey, "UTF-8")); postData.append("&appsecret=").append(URLEncoder.encode(appSecret, "UTF-8")); postData.append("&phone=").append(URLEncoder.encode(phone, "UTF-8")); postData.append("&msg=").append(URLEncoder.encode(message, "UTF-8")); postData.append("&appcode=").append(URLEncoder.encode(appcode, "UTF-8")); // 发送请求 try (OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream())) { writer.write(postData.toString()); writer.flush(); } // 读取响应 StringBuilder response = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { String line; while ((line = reader.readLine()) != null) { response.append(line); } } return response.toString(); } public static String request(String httpUrl, String httpArg) { BufferedReader reader = null; String result = null; StringBuffer sbf = new StringBuffer(); httpUrl = httpUrl + "?" + httpArg; try { URL url = new URL(httpUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.connect(); InputStream is = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); String strRead = reader.readLine(); if (strRead != null) { sbf.append(strRead); while ((strRead = reader.readLine()) != null) { sbf.append("\n"); sbf.append(strRead); } } reader.close(); result = sbf.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } public static String md5(String plainText) { StringBuffer buf = null; try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText.getBytes()); byte b[] = md.digest(); int i; buf = new StringBuffer(""); for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return buf.toString(); } public static String encodeUrlString(String str, String charset) { String strret = null; if (str == null) return str; try { strret = java.net.URLEncoder.encode(str, charset); } catch (Exception e) { e.printStackTrace(); return null; } return strret; } public void setSysparaService(SysparaService sysparaService) { this.sysparaService = sysparaService; } public void setSysLogService(SysLogService sysLogService) { this.sysLogService = sysLogService; } }