最近在因为业务需求要发送短信 做个记录!
我这里采用的是restTemplate 的方式 发送的https的请求。
一.restTemplate 发送https 请求
-
public class SMSUtil { -
private static final Logger logger = LoggerFactory.getLogger(SMSUtil.class); -
public static final String EC_NAME = "企业名称"; -
public static final String AP_ID = "接口id"; -
public static final String TEMPLATE_ID = "模板id"; -
public static final String MAS_SIGN = "签名编码"; -
public static final String SECRET_KEY = "模板密码"; -
// 移动云mas 的请求url 路径 https 和htpp的不一致 要注意 -
public static final String URL = "https://112.35.10.201:28888/sms/tmpsubmit"; -
@Data -
//创建一个实体类 用于存放报文 -
public static class SendRequest { -
String ecName; -
String apId; -
String templateId; -
String mobiles; -
String params; -
String sign; -
String addSerial; -
String mac; //需要MD5加密 -
} -
//这里就是发送的具体代码 模板短信的参数 必须要加上 [] 中括号 你也可以用更高级的方式 -
public static void sendText(String mobiles, String params) { -
if (params != null) { -
params = "[" + params + "]"; -
} else { -
params = "[]"; -
logger.error("验证码为空,请及时处理:{}"+params); -
} -
SendRequest sendRequest = new SendRequest(); -
String addSerial = ""; -
sendRequest.setEcName(EC_NAME); -
sendRequest.setApId(AP_ID); -
sendRequest.setTemplateId(TEMPLATE_ID); -
sendRequest.setMobiles(mobiles); -
sendRequest.setParams(params); -
sendRequest.setSign(MAS_SIGN); -
sendRequest.setAddSerial(addSerial); -
String mac = DigestUtils.md5Hex(EC_NAME + AP_ID + SECRET_KEY + TEMPLATE_ID + mobiles + params + MAS_SIGN + addSerial); -
sendRequest.setMac(mac); -
RestTemplate restTemplate = null; -
try { -
// 需要写一个配置类 用于忽略ssl证书 配置类的代码贴在了下面 -
restTemplate = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory()); -
} catch (NoSuchAlgorithmException e) { -
e.printStackTrace(); -
logger.info("忽略SSL证书异常:{}"+e.getMessage()); -
logger.info("忽略SSL证书异常:{}"+e.getMessage()); -
} catch (KeyManagementException e) { -
e.printStackTrace(); -
logger.info("忽略SSL证书异常:{}"+e.getMessage()); -
} catch (KeyStoreException e) { -
e.printStackTrace(); -
logger.info("忽略SSL证书异常:{}"+e.getMessage()); -
} -
String reqText = JSON.toJSONString(sendRequest); -
String encode = null; -
try { -
encode = Base64.encodeBase64String(reqText.getBytes("UTF-8")); -
} catch (UnsupportedEncodingException e) { -
e.printStackTrace(); -
logger.info("base64编码异常:{}"+e.getMessage()); -
} -
System.out.println(encode); -
String resStr = restTemplate.postForObject(URL, encode, String.class); -
} -
}
二. restTemplate 的配置类 用于忽略ssl证书
-
//restTemplate的配置类 用于忽略ssl证书 -
@Configuration -
public class RestTemplateConfig { -
@Bean -
public RestTemplate restTemplate(ClientHttpRequestFactory factory){ -
return new RestTemplate(factory); -
} -
@Bean -
public ClientHttpRequestFactory simpleClientHttpRequestFactory(){ -
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); -
factory.setConnectTimeout(15000); -
factory.setReadTimeout(5000); -
return factory; -
} -
public static HttpComponentsClientHttpRequestFactory generateHttpRequestFactory()throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException{ -
TrustStrategy trustStrategy = (x509Certificates, s) -> true; -
SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null,trustStrategy).build(); -
SSLConnectionSocketFactory connectionSocketFactory = new SSLConnectionSocketFactory(sslContext,new NoopHostnameVerifier()); -
HttpClientBuilder httpClientBuilder = HttpClients.custom(); -
httpClientBuilder.setSSLSocketFactory(connectionSocketFactory); -
CloseableHttpClient httpClient = httpClientBuilder.build(); -
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); -
factory.setHttpClient(httpClient); -
return factory; -
} -
}
三.普通短信大概一致 只是一些参数和url的变化 这里就不赘述了
因为现在我基本上都是用的restTemplate 发送的方式 网上搜了一圈 基本没搜到 用移动云mas发送https 请求时用的restTemplate 所以这里贴一下 。
如果对你有帮助 麻烦点个赞吧 🤭

470

被折叠的 条评论
为什么被折叠?



