最近在因为业务需求要发送短信 做个记录!
我这里采用的是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证书@Configurationpublic class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(ClientHttpRequestFactory factory){return new RestTemplate(factory);}@Beanpublic 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 所以这里贴一下 。
如果对你有帮助 麻烦点个赞吧 🤭