短信推送
@Component
public class MessageProperties {
@Value("${message.access_id}")
private String accessId;
@Value("${message.access_token}")
private String accessToken;
@Value("${message.url}")
private String url;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getAccessId() {
return accessId;
}
public void setAccessId(String accessId) {
this.accessId = accessId;
}
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
}
@Component
@Slf4j
public class MessageUtils {
private static MessageProperties messageProperties;
@Resource
public void setMessageProperties(MessageProperties messageProperties) {
MessageUtils.messageProperties = messageProperties;
}
private static CloseableHttpClient closeableHttpClientProxy;
@Resource(name = "closeableHttpClientNotProxy")
public void setCloseableHttpClientProxy(CloseableHttpClient closeableHttpClientProxy) {
MessageUtils.closeableHttpClientProxy = closeableHttpClientProxy;
}
public static ServiceResponse<MessageResult> sendMessage(MessageContent messageContent) {
CloseableHttpResponse response = null;
HttpEntity httpEntity = null;
MessageResult messageResult = null;
try {
if (messageContent != null) {
HttpPost req = new HttpPost(messageProperties.getUrl());
Map<String, Object> params = new HashMap<String, Object>();
params.put("userId", messageContent.getUserId());// 收信息手机号,不支持多收件号
params.put("templateCode", messageContent.getTemplateCode());// 业务模板code
params.put("templateParam", messageContent.getTemplateParam()); // 模板内容
params.put("accessId", messageProperties.getAccessId());// 通知平台接入Id
params.put("accessToken", messageProperties.getAccessToken());// 通知平台接入Token
StringEntity requestEntity = new StringEntity(JSON.toJSONString(params), "UTF-8");
requestEntity.setContentType("application/json");// 发送json数据需要设置contentType
// 添加内容
req.setEntity(requestEntity);
response = closeableHttpClientProxy.execute(req);
httpEntity = response.getEntity();
// 用EntityUtils.toString()这个静态方法将HttpEntity转换成字符串,防止服务器返回的数据带有中文,所以在转换的时候将字符集指定成utf-8就可以了
String result = EntityUtils.toString(httpEntity, "UTF-8");
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
log.info("send message request success result:{}", result);
JSONObject resultJson = JSONObject.parseObject(result);
messageResult = JSON.toJavaObject(resultJson, MessageResult.class);
return ServiceResponse.success(messageResult);
} else {
log.info("send message request unsuccess response:{}", response);
JSONObject resultJson = JSONObject.parseObject(result);
messageResult = JSON.toJavaObject(resultJson, MessageResult.class);
log.info("send message return resultJson:{}", resultJson);
return ServiceResponse.unSuccess(messageResult);
}
}
} catch (IOException e) {
log.error("end message exception", e);
} finally {
// 一定要记得把entity fully consume掉,否则连接池中的connection就会一直处于占用状态
try {
EntityUtils.consume(httpEntity);
} catch (IOException e) {
log.error("close connection exception", e);
}
}
return ServiceResponse.unSuccess();
}
}
浙公网安备 33010602011771号