微信后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

177 lines
5.8 KiB

package com.ynxbd.common.helper.common;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Map;
/**
* @Author wsq
* @Date 2021/3/19 9:50
* @Copyright @ 2020 云南新八达科技有限公司 All rights reserved.
*/
@Slf4j
public class SoapHelper {
/**
* 特殊字符解码
*
* @param value 数据
* @return data
*/
public static String decodeValue(String value) {
return value.replaceAll("&", "&")
.replaceAll("&lt;", "<")
.replaceAll("&gt;", ">")
.replaceAll("&apos;", "'")
.replaceAll("&quot;", "\"");
}
public static String getRespXmlData(String xml) {
if (xml == null) {
return null;
}
xml = decodeValue(xml);
String leftSign = "<Response>";
String rightSign = "</Response>";
int leftIndex = xml.indexOf(leftSign);
int rightIndex = xml.lastIndexOf(rightSign);
return xml.substring(leftIndex, rightIndex + rightSign.length());
}
/**
* 创建一个连接
*
* @param projectName 请求项目名
* @param soapUrl soapURL
* @param soapAction soapAction
* @param soapRequestXml 请求XML参数
* @return 数据
*/
public static String post(String projectName, String soapUrl, String soapAction, String soapRequestXml) {
return createConnection(projectName, soapUrl, soapAction, "POST", soapRequestXml);
}
/**
* 创建一个连接
*
* @param projectName 请求项目名
* @param soapUrl soapURL
* @param soapAction soapAction
* @param soapRequestXml 请求XML参数
* @return 数据
*/
public static String get(String projectName, String soapUrl, String soapAction, String soapRequestXml) {
return createConnection(projectName, soapUrl, soapAction, "GET", soapRequestXml);
}
/**
* 创建一个连接
*
* @param projectName 请求项目名
* @param soapUrl soapURL
* @param soapAction soapAction
* @param soapRequestXml 请求XML参数
* @return 数据
*/
public static String createConnection(String projectName, String soapUrl, String soapAction, String httpType, String soapRequestXml) {
if (soapUrl == null) {
return null;
}
String respData = null; // 返回数据
HttpURLConnection connection = null;
OutputStreamWriter out = null;
BufferedReader reader = null;
try {
// 第一步:创建服务地址
URL url = new URL(soapUrl);
// 第二步:打开一个通向服务地址的连接
connection = (HttpURLConnection) url.openConnection();
// 第三步:设置参数
// 3.1发送方式设置:POST必须大写
connection.setRequestMethod(httpType);
// 3.2设置数据格式:content-msgInterface
connection.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
if (soapAction != null && !"".equals(soapAction)) {
connection.setRequestProperty("SOAPAction", soapAction);
}
// 3.3设置输入输出,因为默认新创建的connection没有读写权限,
connection.setDoInput(true);
connection.setDoOutput(true);
// 将信息以流的方式发送出去
out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
// 第四步:组织SOAP数据,发送请求
out.append(soapRequestXml);
out.flush();
// 第五步:接收服务端响应
int responseCode = connection.getResponseCode();
StringBuilder sb = new StringBuilder();
String temp;
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
while ((temp = reader.readLine()) != null) {
sb.append(temp);
}
if (responseCode == 200) { // 请求成功
respData = sb.toString();
} else {
log.error("{} 请求失败: {}", projectName, sb);
}
} catch (IOException e) {
log.error("{} 请求异常: {}", projectName, e.getMessage());
ErrorHelper.println(e);
} finally {
try {
if (out != null) out.close();
if (reader != null) reader.close();
if (connection != null) connection.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
return respData;
}
/**
* 组合请求数据
*
* @param params 数据
* @return 组合好的请求xml数据
*/
public static String requestParams(String sys, Map<String, Object> params) {
StringBuilder paramsXml = new StringBuilder();
String key;
Object value;
for (Map.Entry<String, Object> entry : params.entrySet()) {
key = entry.getKey();
value = entry.getValue();
value = value == null ? "" : value.toString();
paramsXml.append("<").append(key).append(">").append(value).append("</").append(key).append(">");
}
log.info("{} <Request>" + paramsXml + "</Request>", sys);
return paramsXml.toString();
}
}