LAPTOP-SB56SG4Q\86185
3 years ago
10 changed files with 525 additions and 1 deletions
Binary file not shown.
@ -1,3 +1,6 @@ |
|||||||
# open-JSD-9185 |
# open-JSD-9185 |
||||||
|
|
||||||
JSD-9185 基于服务调用客户消息接口 |
JSD-9185 基于服务调用客户消息接口\ |
||||||
|
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||||
|
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||||
|
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系hugh处理。 |
Binary file not shown.
@ -0,0 +1,18 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||||
|
<plugin> |
||||||
|
<id>com.fr.plugin.third.party.jsdjbif</id> |
||||||
|
<name><![CDATA[发送消息]]></name> |
||||||
|
<active>yes</active> |
||||||
|
<version>0.2</version> |
||||||
|
<env-version>10.0</env-version> |
||||||
|
<jartime>2019-01-01</jartime> |
||||||
|
<vendor>fr.open</vendor> |
||||||
|
<description><![CDATA[]]></description> |
||||||
|
<change-notes><![CDATA[]]></change-notes> |
||||||
|
<extra-decision> |
||||||
|
<HttpHandlerProvider class="com.fr.plugin.third.party.jsdjbif.http.CustomHttpHandlerProvider"/> |
||||||
|
<URLAliasProvider class="com.fr.plugin.third.party.jsdjbif.http.CustomURLAliasProvider"/> |
||||||
|
</extra-decision> |
||||||
|
<function-recorder class="com.fr.plugin.third.party.jsdjbif.config.DataConfigInitializeMonitor"/> |
||||||
|
<lifecycle-monitor class="com.fr.plugin.third.party.jsdjbif.config.DataConfigInitializeMonitor"/> |
||||||
|
</plugin> |
@ -0,0 +1,156 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdjbif; |
||||||
|
|
||||||
|
import com.fanruan.api.log.LogKit; |
||||||
|
import com.fanruan.api.util.StringKit; |
||||||
|
import com.fr.general.IOUtils; |
||||||
|
import com.fr.third.org.apache.http.HttpEntity; |
||||||
|
import com.fr.third.org.apache.http.HttpStatus; |
||||||
|
import com.fr.third.org.apache.http.client.config.RequestConfig; |
||||||
|
import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; |
||||||
|
import com.fr.third.org.apache.http.client.methods.HttpGet; |
||||||
|
import com.fr.third.org.apache.http.client.methods.HttpPost; |
||||||
|
import com.fr.third.org.apache.http.conn.ssl.NoopHostnameVerifier; |
||||||
|
import com.fr.third.org.apache.http.conn.ssl.SSLConnectionSocketFactory; |
||||||
|
import com.fr.third.org.apache.http.entity.StringEntity; |
||||||
|
import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; |
||||||
|
import com.fr.third.org.apache.http.impl.client.HttpClients; |
||||||
|
import com.fr.third.org.apache.http.ssl.SSLContextBuilder; |
||||||
|
import com.fr.third.org.apache.http.ssl.TrustStrategy; |
||||||
|
import com.fr.third.org.apache.http.util.EntityUtils; |
||||||
|
|
||||||
|
import javax.net.ssl.HostnameVerifier; |
||||||
|
import javax.net.ssl.SSLContext; |
||||||
|
import javax.servlet.ServletInputStream; |
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import java.io.IOException; |
||||||
|
import java.security.cert.CertificateException; |
||||||
|
import java.security.cert.X509Certificate; |
||||||
|
|
||||||
|
public class Utils { |
||||||
|
public static String DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"; |
||||||
|
public static RequestConfig REQUEST_CONFIG = RequestConfig.custom() |
||||||
|
.setConnectionRequestTimeout(30000) |
||||||
|
.setSocketTimeout(30000) // 服务端相应超时
|
||||||
|
.setConnectTimeout(30000) // 建立socket链接超时时间
|
||||||
|
.build(); |
||||||
|
|
||||||
|
public static CloseableHttpClient createSSLClientDefault() { |
||||||
|
try { |
||||||
|
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
||||||
|
return true; |
||||||
|
} |
||||||
|
}).build(); |
||||||
|
HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE; |
||||||
|
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, hostnameVerifier); |
||||||
|
return HttpClients.custom().setSSLSocketFactory(sslsf).build(); |
||||||
|
} catch (Exception e) { |
||||||
|
LogKit.error(e.getMessage(), e); |
||||||
|
} |
||||||
|
return HttpClients.createDefault(); |
||||||
|
} |
||||||
|
|
||||||
|
public static synchronized CloseableHttpClient createHttpClient(String url) { |
||||||
|
CloseableHttpClient httpClient = null; |
||||||
|
if (StringKit.isEmpty(url)) { |
||||||
|
httpClient = HttpClients.createDefault(); |
||||||
|
return httpClient; |
||||||
|
} |
||||||
|
|
||||||
|
if (url.startsWith("https://")) { |
||||||
|
httpClient = createSSLClientDefault(); |
||||||
|
return httpClient; |
||||||
|
} |
||||||
|
httpClient = HttpClients.createDefault(); |
||||||
|
return httpClient; |
||||||
|
} |
||||||
|
|
||||||
|
public static synchronized String createHttpGetContent(CloseableHttpClient httpClient, String url) throws IOException { |
||||||
|
if ((httpClient == null) || (StringKit.isEmpty(url))) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
HttpGet httpGet = new HttpGet(url); |
||||||
|
httpGet.addHeader("User-Agent", Utils.DEFAULT_USER_AGENT); |
||||||
|
httpGet.setConfig(Utils.REQUEST_CONFIG); |
||||||
|
CloseableHttpResponse response = httpClient.execute(httpGet); |
||||||
|
int statusCode = response.getStatusLine().getStatusCode(); |
||||||
|
if (statusCode != HttpStatus.SC_OK) { |
||||||
|
response.close(); |
||||||
|
LogKit.info("http请求出错,http status:" + statusCode); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
HttpEntity httpEntity = response.getEntity(); |
||||||
|
if (httpEntity == null) { |
||||||
|
response.close(); |
||||||
|
LogKit.info("http请求出错,http响应内容为空"); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
String responseContent = EntityUtils.toString(httpEntity, "UTF-8"); |
||||||
|
response.close(); |
||||||
|
if (StringKit.isEmpty(responseContent)) { |
||||||
|
LogKit.info("http请求出错,http响应内容为空1"); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
return responseContent; |
||||||
|
} |
||||||
|
|
||||||
|
public static synchronized String createHttpPostContent(CloseableHttpClient httpClient, String url, String bodyContent) throws IOException { |
||||||
|
if ((httpClient == null) || (StringKit.isEmpty(url)) || (StringKit.isEmpty(bodyContent))) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
HttpPost httpPost = new HttpPost(url); |
||||||
|
httpPost.addHeader("User-Agent", Utils.DEFAULT_USER_AGENT); |
||||||
|
httpPost.setConfig(Utils.REQUEST_CONFIG); |
||||||
|
StringEntity bodyEntity = new StringEntity(bodyContent, "UTF-8"); |
||||||
|
httpPost.setEntity(bodyEntity); |
||||||
|
CloseableHttpResponse response = httpClient.execute(httpPost); |
||||||
|
int statusCode = response.getStatusLine().getStatusCode(); |
||||||
|
if (statusCode != HttpStatus.SC_OK) { |
||||||
|
response.close(); |
||||||
|
LogKit.info("http请求出错,http status:" + statusCode); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
HttpEntity httpEntity = response.getEntity(); |
||||||
|
if (httpEntity == null) { |
||||||
|
response.close(); |
||||||
|
LogKit.info("http请求出错,http响应内容为空"); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
String responseContent = EntityUtils.toString(httpEntity, "UTF-8"); |
||||||
|
response.close(); |
||||||
|
if (StringKit.isEmpty(responseContent)) { |
||||||
|
LogKit.info("http请求出错,http响应内容为空1"); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
return responseContent; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取请求主体内容 |
||||||
|
* @param req |
||||||
|
* @return |
||||||
|
* @throws IOException |
||||||
|
*/ |
||||||
|
public static String getHttpRequestBody(HttpServletRequest req) throws IOException { |
||||||
|
if (req == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
ServletInputStream inputStream = req.getInputStream(); |
||||||
|
if (inputStream == null) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
String content = IOUtils.inputStream2String(inputStream); |
||||||
|
if (StringKit.isEmpty(content)) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,103 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdjbif.config; |
||||||
|
|
||||||
|
|
||||||
|
import com.fr.config.*; |
||||||
|
import com.fr.config.holder.Conf; |
||||||
|
import com.fr.config.holder.factory.Holders; |
||||||
|
|
||||||
|
/** |
||||||
|
* 配置数据保存 |
||||||
|
*/ |
||||||
|
@Visualization(category = "发送消息") |
||||||
|
public class CustomDataConfig extends DefaultConfiguration { |
||||||
|
public String getNameSpace() { |
||||||
|
return this.getClass().getName(); |
||||||
|
} |
||||||
|
|
||||||
|
private static volatile CustomDataConfig config = null; |
||||||
|
|
||||||
|
public static CustomDataConfig getInstance() { |
||||||
|
if (config == null) { |
||||||
|
config = ConfigContext.getConfigInstance(CustomDataConfig.class); |
||||||
|
} |
||||||
|
return config; |
||||||
|
} |
||||||
|
|
||||||
|
@Identifier(value = "msgUrl", name = "消息地址", description = "", status = Status.SHOW) |
||||||
|
private Conf<String> msgUrl = Holders.simple("http://xxxx/ImMessageService.asmx"); |
||||||
|
|
||||||
|
@Identifier(value = "nSenderPlatID", name = "平台标识(nSenderPlatID)", description = "", status = Status.SHOW) |
||||||
|
private Conf<String> nSenderPlatID = Holders.simple(""); |
||||||
|
|
||||||
|
@Identifier(value = "nOnlineOnly", name = "是否只支持在线发送(nOnlineOnly)", description = "0:否;1:是", status = Status.SHOW) |
||||||
|
private Conf<String> nOnlineOnly = Holders.simple("0"); |
||||||
|
|
||||||
|
@Identifier(value = "nReserveDays", name = "保留天数(nReserveDays)", description = "", status = Status.SHOW) |
||||||
|
private Conf<Integer> nReserveDays = Holders.simple(2); |
||||||
|
|
||||||
|
@Identifier(value = "strFromApp", name = "来源(strFromApp)", description = "", status = Status.SHOW) |
||||||
|
private Conf<String> strFromApp = Holders.simple("xxxx"); |
||||||
|
|
||||||
|
@Identifier(value = "strAppCode", name = "协同应用代码(strAppCode)", description = "", status = Status.SHOW) |
||||||
|
private Conf<String> strAppCode = Holders.simple(""); |
||||||
|
|
||||||
|
public String getMsgUrl() { |
||||||
|
return msgUrl.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setMsgUrl(String msgUrl) { |
||||||
|
this.msgUrl.set(msgUrl); |
||||||
|
} |
||||||
|
|
||||||
|
public String getnSenderPlatID() { |
||||||
|
return nSenderPlatID.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setnSenderPlatID(String nSenderPlatID) { |
||||||
|
this.nSenderPlatID.set(nSenderPlatID); |
||||||
|
} |
||||||
|
|
||||||
|
public String getnOnlineOnly() { |
||||||
|
return nOnlineOnly.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setnOnlineOnly(String nOnlineOnly) { |
||||||
|
this.nOnlineOnly.set(nOnlineOnly); |
||||||
|
} |
||||||
|
|
||||||
|
public Integer getnReserveDays() { |
||||||
|
return nReserveDays.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setnReserveDays(Integer nReserveDays) { |
||||||
|
this.nReserveDays.set(nReserveDays); |
||||||
|
} |
||||||
|
|
||||||
|
public String getStrFromApp() { |
||||||
|
return strFromApp.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setStrFromApp(String strFromApp) { |
||||||
|
this.strFromApp.set(strFromApp); |
||||||
|
} |
||||||
|
|
||||||
|
public String getStrAppCode() { |
||||||
|
return strAppCode.get(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setStrAppCode(String strAppCode) { |
||||||
|
this.strAppCode.set(strAppCode); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Object clone() throws CloneNotSupportedException { |
||||||
|
CustomDataConfig cloned = (CustomDataConfig) super.clone(); |
||||||
|
cloned.msgUrl = (Conf<String>) msgUrl.clone(); |
||||||
|
cloned.nSenderPlatID = (Conf<String>) nSenderPlatID.clone(); |
||||||
|
cloned.nOnlineOnly = (Conf<String>) nOnlineOnly.clone(); |
||||||
|
cloned.nReserveDays = (Conf<Integer>) nReserveDays.clone(); |
||||||
|
cloned.strFromApp = (Conf<String>) strFromApp.clone(); |
||||||
|
cloned.strAppCode = (Conf<String>) strAppCode.clone(); |
||||||
|
return cloned; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,24 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdjbif.config; |
||||||
|
|
||||||
|
import com.fr.intelli.record.Focus; |
||||||
|
import com.fr.intelli.record.Original; |
||||||
|
import com.fr.plugin.context.PluginContext; |
||||||
|
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||||
|
import com.fr.record.analyzer.EnableMetrics; |
||||||
|
|
||||||
|
/** |
||||||
|
* 配置信息初始化 |
||||||
|
*/ |
||||||
|
@EnableMetrics |
||||||
|
public class DataConfigInitializeMonitor extends AbstractPluginLifecycleMonitor { |
||||||
|
@Override |
||||||
|
@Focus(id = "com.fr.plugin.third.party.jsdjbif", text = "plugin-jsdjbif", source = Original.PLUGIN) |
||||||
|
public void afterRun(PluginContext pluginContext) { |
||||||
|
CustomDataConfig.getInstance(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void beforeStop(PluginContext pluginContext) { |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdjbif.http; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.stable.fun.Authorize; |
||||||
|
|
||||||
|
@Authorize(callSignKey = "com.fr.plugin.third.party.jsdjbif") |
||||||
|
public class CustomHttpHandlerProvider extends AbstractHttpHandlerProvider { |
||||||
|
@Override |
||||||
|
public BaseHttpHandler[] registerHandlers() { |
||||||
|
return new BaseHttpHandler[]{ |
||||||
|
new SendMsgHttpHandler(), |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdjbif.http; |
||||||
|
|
||||||
|
import com.fr.decision.fun.impl.AbstractURLAliasProvider; |
||||||
|
import com.fr.decision.webservice.url.alias.URLAlias; |
||||||
|
import com.fr.decision.webservice.url.alias.URLAliasFactory; |
||||||
|
|
||||||
|
public class CustomURLAliasProvider extends AbstractURLAliasProvider { |
||||||
|
@Override |
||||||
|
public URLAlias[] registerAlias() { |
||||||
|
return new URLAlias[]{ |
||||||
|
URLAliasFactory.createPluginAlias("/jsdjbif/SendCommonMessageByUserCode", "/jsdjbif/SendCommonMessageByUserCode", true), |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,191 @@ |
|||||||
|
package com.fr.plugin.third.party.jsdjbif.http; |
||||||
|
|
||||||
|
import com.fanruan.api.log.LogKit; |
||||||
|
import com.fanruan.api.util.StringKit; |
||||||
|
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||||
|
import com.fr.json.JSONObject; |
||||||
|
import com.fr.plugin.context.PluginContexts; |
||||||
|
import com.fr.plugin.third.party.jsdjbif.Utils; |
||||||
|
import com.fr.plugin.third.party.jsdjbif.config.CustomDataConfig; |
||||||
|
import com.fr.third.org.apache.http.HttpEntity; |
||||||
|
import com.fr.third.org.apache.http.HttpStatus; |
||||||
|
import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; |
||||||
|
import com.fr.third.org.apache.http.client.methods.HttpPost; |
||||||
|
import com.fr.third.org.apache.http.entity.StringEntity; |
||||||
|
import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; |
||||||
|
import com.fr.third.org.apache.http.util.EntityUtils; |
||||||
|
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import com.fr.web.utils.WebUtils; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.io.IOException; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
*/ |
||||||
|
public class SendMsgHttpHandler extends BaseHttpHandler { |
||||||
|
|
||||||
|
@Override |
||||||
|
public RequestMethod getMethod() { |
||||||
|
return RequestMethod.POST; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getPath() { |
||||||
|
return "/jsdjbif/SendCommonMessageByUserCode"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isPublic() { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||||
|
res.setContentType("application/json; charset=utf-8"); |
||||||
|
|
||||||
|
//添加认证
|
||||||
|
if (!PluginContexts.currentContext().isAvailable()) { |
||||||
|
LogKit.error("发送消息件试用过期, 请购买许可证"); |
||||||
|
WebUtils.printAsJSON(res, getResultJson("0", "发送消息件试用过期, 请购买许可证")); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
String reqContent = Utils.getHttpRequestBody(req); |
||||||
|
if (StringKit.isEmpty(reqContent)) { |
||||||
|
WebUtils.printAsJSON(res, getResultJson("0", "无内容传递")); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
JSONObject json = new JSONObject(reqContent); |
||||||
|
String nSenderUserCode = json.getString("nSenderUserCode"); |
||||||
|
nSenderUserCode = StringKit.trim(nSenderUserCode); |
||||||
|
if (StringKit.isEmpty(nSenderUserCode)) { |
||||||
|
WebUtils.printAsJSON(res, getResultJson("0", "发送者用户账号为空")); |
||||||
|
return; |
||||||
|
} |
||||||
|
String sReceiverPlatUserIds = json.getString("sReceiverPlatUserIds"); |
||||||
|
sReceiverPlatUserIds = StringKit.trim(sReceiverPlatUserIds); |
||||||
|
if (StringKit.isEmpty(sReceiverPlatUserIds)) { |
||||||
|
WebUtils.printAsJSON(res, getResultJson("0", "接受消息者为空")); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
String strContent = json.getString("strContent"); |
||||||
|
strContent = StringKit.trim(strContent); |
||||||
|
if (StringKit.isEmpty(strContent)) { |
||||||
|
WebUtils.printAsJSON(res, getResultJson("0", "内容为空")); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
String msg = sendMsg(nSenderUserCode, sReceiverPlatUserIds, strContent); |
||||||
|
if (StringKit.isNotEmpty(msg)) { |
||||||
|
WebUtils.printAsJSON(res, getResultJson("0", msg)); |
||||||
|
return; |
||||||
|
} |
||||||
|
} catch (Exception e) { |
||||||
|
WebUtils.printAsJSON(res, getResultJson("0", "发送出错")); |
||||||
|
return; |
||||||
|
} |
||||||
|
WebUtils.printAsJSON(res, getResultJson("1", "")); |
||||||
|
} |
||||||
|
|
||||||
|
private JSONObject getResultJson(String code, String message) { |
||||||
|
JSONObject json = new JSONObject(); |
||||||
|
json.put("message", message); |
||||||
|
json.put("code", code); |
||||||
|
return json; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 发送消息 |
||||||
|
* |
||||||
|
* @param nSenderUserCode 发送者用户账号 |
||||||
|
* @param sReceiverPlatUserIds 接受消息者 |
||||||
|
* @param strContent strContent |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private synchronized String sendMsg(String nSenderUserCode, String sReceiverPlatUserIds, String strContent) throws IOException { |
||||||
|
String msgUrl = CustomDataConfig.getInstance().getMsgUrl(); |
||||||
|
HttpPost httpPost = new HttpPost(msgUrl); |
||||||
|
httpPost.addHeader("User-Agent", Utils.DEFAULT_USER_AGENT); |
||||||
|
String receiverContent = createReceiver(sReceiverPlatUserIds); |
||||||
|
if (StringKit.isEmpty(receiverContent)) { |
||||||
|
return "接受者为空"; |
||||||
|
} |
||||||
|
String bodyContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + |
||||||
|
"<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">\n" + |
||||||
|
" <soap12:Body>\n" + |
||||||
|
" <SendCommonMessageByUserCode xmlns=\"http://tempuri.org/\">\n" + |
||||||
|
" <nSenderPlatID>" + CustomDataConfig.getInstance().getnSenderPlatID() + "</nSenderPlatID>\n" + |
||||||
|
" <nSenderUserCode>" + nSenderUserCode + "</nSenderUserCode>\n" + |
||||||
|
" <sReceiverPlatUserIds><![CDATA[" + receiverContent + "]]></sReceiverPlatUserIds>\n" + |
||||||
|
" <strContent><![CDATA[" + strContent + "]]></strContent>\n" + |
||||||
|
" <nOnlineOnly>" + CustomDataConfig.getInstance().getnOnlineOnly() + "</nOnlineOnly>\n" + |
||||||
|
" <nReserveDays>" + CustomDataConfig.getInstance().getnReserveDays() + "</nReserveDays>\n" + |
||||||
|
" <strFromApp>" + CustomDataConfig.getInstance().getStrFromApp() + "</strFromApp>\n" + |
||||||
|
" <strAppCode>" + CustomDataConfig.getInstance().getStrAppCode() + "</strAppCode>\n" + |
||||||
|
" <strFromUserName></strFromUserName>\n" + |
||||||
|
" <strCustomInfo></strCustomInfo>\n" + |
||||||
|
" </SendCommonMessageByUserCode>\n" + |
||||||
|
" </soap12:Body>\n" + |
||||||
|
"</soap12:Envelope>"; |
||||||
|
LogKit.info("发送消息,http url:" + msgUrl); |
||||||
|
LogKit.info("发送消息,http body:\n" + bodyContent); |
||||||
|
httpPost.setEntity(new StringEntity(bodyContent, "UTF-8")); |
||||||
|
httpPost.setHeader("Content-type", "application/soap+xml; charset=utf-8"); |
||||||
|
httpPost.setConfig(Utils.REQUEST_CONFIG); |
||||||
|
CloseableHttpClient httpClient = Utils.createHttpClient(msgUrl); |
||||||
|
CloseableHttpResponse response = httpClient.execute(httpPost); |
||||||
|
int statusCode = response.getStatusLine().getStatusCode(); |
||||||
|
if (statusCode != HttpStatus.SC_OK) { |
||||||
|
response.close(); |
||||||
|
httpClient.close(); |
||||||
|
LogKit.info("发送消息出错,http status:" + statusCode); |
||||||
|
return "发送消息出错,http status:" + statusCode; |
||||||
|
} |
||||||
|
|
||||||
|
HttpEntity httpEntity = response.getEntity(); |
||||||
|
if (httpEntity == null) { |
||||||
|
response.close(); |
||||||
|
httpClient.close(); |
||||||
|
LogKit.info("发送消息出错,http响应内容为空"); |
||||||
|
return "发送消息出错,http响应内容为空"; |
||||||
|
} |
||||||
|
String responseContent = EntityUtils.toString(httpEntity, "UTF-8"); |
||||||
|
response.close(); |
||||||
|
httpClient.close(); |
||||||
|
LogKit.info("发送消息,http响应内容\n" + responseContent); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
private String createReceiver(String receiverContent) { |
||||||
|
if (StringKit.isEmpty(receiverContent)) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
String[] receivers = receiverContent.split(","); |
||||||
|
if ((receivers == null) || (receivers.length <= 0)) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
String senderPlatID = CustomDataConfig.getInstance().getnSenderPlatID(); |
||||||
|
String receiver, tempReceiver; |
||||||
|
int count = 0; |
||||||
|
String content = ""; |
||||||
|
for (int i = 0, max = receivers.length - 1; i <= max; i++) { |
||||||
|
receiver = StringKit.trim(receivers[i]); |
||||||
|
if (StringKit.isEmpty(receiver)) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
tempReceiver = senderPlatID + "@" + receiver; |
||||||
|
if (count >= 1) { |
||||||
|
content = content + ","; |
||||||
|
} |
||||||
|
content = content + tempReceiver; |
||||||
|
count++; |
||||||
|
} |
||||||
|
return content; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue