package com.java110.core.factory; import com.java110.core.client.OutRestTemplate; import com.java110.core.log.LoggerFactory; import com.java110.dto.sms.SmsConfigDto; import com.java110.utils.cache.MappingCache; import com.java110.utils.factory.ApplicationContextFactory; import com.java110.vo.ResultVo; import org.slf4j.Logger; import org.springframework.http.*; import org.springframework.util.MultiValueMap; import org.springframework.web.client.HttpStatusCodeException; import java.util.Random; /** * 移动短信 对接 * http://mas.10086.cn/login * http://112.35.10.201:1999/smsservice?wsdl * webservice 方式 * Created by wuxw on 2019/3/23. */ public class YidongSendMessageFactory { private final static Logger logger = LoggerFactory.getLogger(YidongSendMessageFactory.class); private static OutRestTemplate outRestTemplate; public final static int DEFAULT_MESSAGE_CODE_LENGTH = 6; public final static String YIDONG_SMS_DOMAIN = "YIDONG_SMS"; private final static String WEBSERVICE_BODY = "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\t \n" + "\t\t\n" + " \n" + " \n" + ""; private final static String WEBSERVICE_BODY2 = "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\t\t\n" + "\t\t\n" + " \n" + " \n" + ""; /** * 生成6位短信码 * * @return */ public static String generateMessageCode() { return generateMessageCode(DEFAULT_MESSAGE_CODE_LENGTH); } /** * 生成验证码 * * @param limit 位数 * @return */ public static String generateMessageCode(int limit) { Random random = new Random(); String result = ""; for (int i = 0; i < limit; i++) { result += (random.nextInt(9) + 1); } return result; } // public static void sendMessage(String tel, String code) { // // String apId = MappingCache.getValue(YIDONG_SMS_DOMAIN, "apId"); // String secretKey = MappingCache.getValue(YIDONG_SMS_DOMAIN, "secretKey"); // String ecName = MappingCache.getValue(YIDONG_SMS_DOMAIN, "ecName"); // String sign = MappingCache.getValue(YIDONG_SMS_DOMAIN, "sign"); // String addSerial = MappingCache.getValue(YIDONG_SMS_DOMAIN, "addSerial"); // String templateId = MappingCache.getValue(YIDONG_SMS_DOMAIN, "templateId"); // String url = MappingCache.getValue(YIDONG_SMS_DOMAIN, "yidong_url"); // // String mac = getMac(ecName, apId, secretKey, templateId, tel, code, sign, addSerial); // // //开始发送验证码 // String reqParam = "\n" + // "\n" + // " " + apId + "\n" + // " " + secretKey + "\n" + // " " + ecName + "\n" + // " \n" + // " " + tel + "\n" + // " \n" + // " \n" + // " " + code + "\n" + // " \n" + // " " + sign + "\n" + // " " + addSerial + "\n" + // " " + mac + "\n" + // " " + templateId + "\n" + // ""; // // reqParam = WEBSERVICE_BODY.replace("REQUESTBODY",reqParam); // logger.debug("请求移动公司请求报文:{}",reqParam); // HttpHeaders httpHeaders = new HttpHeaders(); // httpHeaders.add("Content-Type","text/xml;charset=UTF-8"); // outRestTemplate = ApplicationContextFactory.getBean("outRestTemplate",OutRestTemplate.class); // HttpEntity> httpEntity = new HttpEntity(reqParam, httpHeaders); // try { // ResponseEntity responseEntity = outRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class); // logger.debug("移动公司返回报文,{}",responseEntity); // }catch (HttpStatusCodeException e){ // logger.error("调用异常",e); // }catch (Exception e){ // logger.error("调用异常",e); // } // // } public static void sendMessage(String tel, String code) { String apId = MappingCache.getValue(YIDONG_SMS_DOMAIN, "apId"); String secretKey = MappingCache.getValue(YIDONG_SMS_DOMAIN, "secretKey"); String ecName = MappingCache.getValue(YIDONG_SMS_DOMAIN, "ecName"); String sign = MappingCache.getValue(YIDONG_SMS_DOMAIN, "sign"); String addSerial = MappingCache.getValue(YIDONG_SMS_DOMAIN, "addSerial"); String url = MappingCache.getValue(YIDONG_SMS_DOMAIN, "yidong_url"); String param = "您的验证码是:"+code+",验证码有效期5分钟"; String mac = getMac(ecName, apId, secretKey, tel, param, sign, addSerial); //开始发送验证码 String reqParam = "\n" + "\n" + " " + apId + "\n" + " " + secretKey + "\n" + " " + ecName + "\n" + " \n" + " " + tel + "\n" + " \n" + " " + param + "\n" + " " + sign + "\n" + " " + addSerial + "\n" + " " + mac + "\n" + ""; reqParam = WEBSERVICE_BODY2.replace("REQUESTBODY",reqParam); logger.debug("请求移动公司请求报文:{}",reqParam); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add("Content-Type","text/xml;charset=UTF-8"); outRestTemplate = ApplicationContextFactory.getBean("outRestTemplate",OutRestTemplate.class); HttpEntity> httpEntity = new HttpEntity(reqParam, httpHeaders); try { ResponseEntity responseEntity = outRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class); logger.debug("移动公司返回报文,{}",responseEntity); }catch (HttpStatusCodeException e){ logger.error("调用异常",e); }catch (Exception e){ logger.error("调用异常",e); } } private static String getMac(String ecName, String apId, String secretKey, String templateId, String tel, String code, String sign, String addSerial) { String macStr = ecName + apId + secretKey + templateId + tel + code + sign + addSerial; return AuthenticationFactory.md5(macStr); } private static String getMac(String ecName, String apId, String secretKey, String tel, String content, String sign, String addSerial) { String macStr = ecName + apId + secretKey + tel + content + sign + addSerial; return AuthenticationFactory.md5(macStr); } public static ResultVo sendOweFeeSms(String tel, Object param, SmsConfigDto smsConfigDto) { String apId = MappingCache.getValue(YIDONG_SMS_DOMAIN, "apId"); String secretKey = MappingCache.getValue(YIDONG_SMS_DOMAIN, "secretKey"); String ecName = MappingCache.getValue(YIDONG_SMS_DOMAIN, "ecName"); String sign = MappingCache.getValue(YIDONG_SMS_DOMAIN, "sign"); String addSerial = MappingCache.getValue(YIDONG_SMS_DOMAIN, "addSerial"); String url = MappingCache.getValue(YIDONG_SMS_DOMAIN, "yidong_url"); String mac = getMac(ecName, apId, secretKey, tel, param.toString(), sign, addSerial); //开始发送验证码 String reqParam = "\n" + "\n" + " " + apId + "\n" + " " + secretKey + "\n" + " " + ecName + "\n" + " \n" + " " + tel + "\n" + " \n" + " " + param + "\n" + " " + sign + "\n" + " " + addSerial + "\n" + " " + mac + "\n" + ""; reqParam = WEBSERVICE_BODY2.replace("REQUESTBODY",reqParam); logger.debug("请求移动公司请求报文:{}",reqParam); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add("Content-Type","text/xml;charset=UTF-8"); outRestTemplate = ApplicationContextFactory.getBean("outRestTemplate",OutRestTemplate.class); HttpEntity> httpEntity = new HttpEntity(reqParam, httpHeaders); try { ResponseEntity responseEntity = outRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class); logger.debug("移动公司返回报文,{}",responseEntity); }catch (HttpStatusCodeException e){ logger.error("调用异常",e); }catch (Exception e){ logger.error("调用异常",e); } return new ResultVo(ResultVo.CODE_OK, ResultVo.MSG_OK); } }