package com.nova.sankuai.infra.utils.sms.shandongMessage; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; /** * @Author Lilinhong * @Date 2022/6/13 15:28 */ @Component @AllArgsConstructor public class ShanDongMessageSendUtil { private static final Logger logger = LoggerFactory.getLogger("smsLogger"); private static final String appkey = "tGCOUa"; private static final String appsecret = "e2N9oH"; private static final String appcode = "1000"; private static final String URL = "http://39.103.200.133:9090/sms/distinct/v1"; public static boolean sendMessage(String phone, String content) { HttpClient httpClient = null; HttpPost httppost = null; String response = null; Map map = new HashMap<>(); map.put("appkey", ShanDongMessageSendUtil.appkey); map.put("appcode", ShanDongMessageSendUtil.appcode); String timestamp = System.currentTimeMillis() + ""; map.put("timestamp", timestamp); ArrayList smsParams = new ArrayList<>(); SmsParam sms = new SmsParam(); sms.setMsg(content); sms.setPhone(phone); smsParams.add(sms); map.put("sms", smsParams); String sign = null; try { sign = md5(ShanDongMessageSendUtil.appkey + ShanDongMessageSendUtil.appsecret + timestamp); } catch (Exception e) { logger.info("山东商帮登录验证码日志: 用户手机:" + phone + "参数md5加密失败"); e.printStackTrace(); return false; } map.put("sign", sign); logger.info("山东商帮登录验证码日志: 用户手机:" + phone + "验证码发送参数:" + map); try { httpClient = new DefaultHttpClient(); httppost = new HttpPost(ShanDongMessageSendUtil.URL); String json = JSONObject.toJSONString(map); StringEntity formEntity = new StringEntity(json, "utf-8"); httppost.setEntity(formEntity); HttpResponse httpresponse = null; httpresponse = httpClient.execute(httppost); HttpEntity httpEntity = httpresponse.getEntity(); response = EntityUtils.toString(httpEntity, "utf-8"); logger.info("山东商帮登录验证码日志: 用户手机:" + phone + "验证码发送返回结果:" + response); } catch (Exception e) { logger.info("山东商帮登录验证码日志: 用户手机:" + phone + "验证码发送返回失败"); e.printStackTrace(); return false; } finally { if (httppost != null) { httppost.abort(); } if (httpClient != null) { httpClient.getConnectionManager().shutdown(); } } ShanDongMessageResponse shanDongMessageResponse = null; try { shanDongMessageResponse = JSON.parseObject(response, ShanDongMessageResponse.class); } catch (Exception e) { logger.info("山东商帮登录验证码日志: 用户手机:" + phone + "验证码发送返回结果转换失败"); e.printStackTrace(); return false; } if (shanDongMessageResponse != null) { logger.info("山东商帮登录验证码日志: 用户手机:" + phone + "验证码发送返回结果转换:" + shanDongMessageResponse.toString()); } if (shanDongMessageResponse != null && "00000".equals(shanDongMessageResponse.getCode()) && shanDongMessageResponse.getResult() != null && "00000".equals(shanDongMessageResponse.getResult().get(0).getStatus())) { return true; } return false; } public static boolean sendSMSContent(String phone, String content) { HttpClient httpClient = null; HttpPost httppost = null; String response = null; Map map = new HashMap<>(); map.put("appkey", ShanDongMessageSendUtil.appkey); map.put("appcode", ShanDongMessageSendUtil.appcode); String timestamp = System.currentTimeMillis() + ""; map.put("timestamp", timestamp); ArrayList smsParams = new ArrayList<>(); SmsParam sms = new SmsParam(); sms.setMsg(content); sms.setPhone(phone); smsParams.add(sms); map.put("sms", smsParams); String sign = null; try { sign = md5(ShanDongMessageSendUtil.appkey + ShanDongMessageSendUtil.appsecret + timestamp); } catch (Exception e) { logger.info("山东供应商发送自定义短信内容日志: 用户手机:" + phone + "参数md5加密失败"); e.printStackTrace(); return false; } map.put("sign", sign); logger.info("山东供应商发送自定义短信内容日志: 用户手机:" + phone + "验证码发送参数:" + map); try { httpClient = new DefaultHttpClient(); httppost = new HttpPost(ShanDongMessageSendUtil.URL); String json = JSONObject.toJSONString(map); StringEntity formEntity = new StringEntity(json, "utf-8"); httppost.setEntity(formEntity); HttpResponse httpresponse = null; httpresponse = httpClient.execute(httppost); HttpEntity httpEntity = httpresponse.getEntity(); response = EntityUtils.toString(httpEntity, "utf-8"); logger.info("山东供应商自定义短信内容日志: 用户手机:" + phone + "自定义短信内容发送返回结果:" + response); } catch (Exception e) { logger.info("山东供应商自定义短信内容日志: 用户手机:" + phone + "自定义短信内容发送返回失败"); e.printStackTrace(); return false; } finally { if (httppost != null) { httppost.abort(); } if (httpClient != null) { httpClient.getConnectionManager().shutdown(); } } ShanDongMessageResponse shanDongMessageResponse = null; try { shanDongMessageResponse = JSON.parseObject(response, ShanDongMessageResponse.class); } catch (Exception e) { logger.info("山东供应商自定义短信内容日志: 用户手机:" + phone + "自定义短信内容发送返回结果转换失败"); e.printStackTrace(); return false; } if (shanDongMessageResponse != null) { logger.info("山东供应商自定义短信内容日志: 用户手机:" + phone + "自定义短信内容发送返回结果转换:" + shanDongMessageResponse.toString()); } if (shanDongMessageResponse != null && "00000".equals(shanDongMessageResponse.getCode()) && shanDongMessageResponse.getResult() != null && "00000".equals(shanDongMessageResponse.getResult().get(0).getStatus())) { return true; } return false; } private static String md5(String param) throws NoSuchAlgorithmException, UnsupportedEncodingException { MessageDigest md5 = MessageDigest.getInstance("MD5"); byte[] md5Byte = md5.digest(param.getBytes("utf8")); String result = byteToHex(md5Byte); return result; } private static String byteToHex(byte[] md5Byte) { String result = ""; StringBuilder sb = new StringBuilder(); for (byte each : md5Byte) { int value = each & 0xff; String hex = Integer.toHexString(value); if (value < 16) { sb.append("0"); } sb.append(hex); } result = sb.toString(); return result; } public static int byte4ToInteger(byte[] b, int offset) { return (0xff & b[offset]) << 24 | (0xff & b[offset + 1]) << 16 | (0xff & b[offset + 2]) << 8 | (0xff & b[offset + 3]); } }