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);
}
}