接口实体类:InterfaceServiceCache.java
public class InterfaceServiceCache implements Serializable {
private static final long serialVersionUID = -5855556857352346121L;
private Integer serviceId;//主键
private String serviceName;//接口名称
private String serviceCode;//接口编码
private String clazz;//上传代码
private Integer version;//版本
}
后台上传txt格式脚本,解析后存入clazz字段
定义接口:InterfaceService.java
public interface InterfaceService {
ResultHelp doPost(Order order);
}
脚本重写doPost方法,执行调用第三方接口,Order为需要参数的对象
验证脚本有效性:
InterfaceService instance = InterfaceServiceUtil.parseGameClass(interfaceServiceCache);
if (null != instance) {
return true;
}
return false;
定义InterfaceServiceUtil.java
parseGameClass方法
import groovy.lang.GroovyClassLoader;
public static InterfaceService parseGameClass(InterfaceServiceCache interfaceServiceCache) {
InterfaceService s = null;
boolean isSuccess = true;
try {
GroovyClassLoader classLoader = new GroovyClassLoader();
Class<?> clazz = classLoader.parseClass(interfaceServiceCache.getClazz(),
"S" + interfaceServiceCache.getServiceCode() + ".groovy");
s = (InterfaceService) clazz.newInstance();
} catch (Exception e) {
logger.error("classLoader.parseClass", e);
isSuccess = false;
}
logger.info("初始化接口实现..." + interfaceServiceCache.getServiceCode() + " " + isSuccess);
return s;
}
pom.xml
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>2.3.3</version>
</dependency>
脚本:保存再clazz字段
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.misc.BASE64Decoder;
import java.util.HashMap;
import java.util.Map;
public class KeyInterfaceService extends InterfaceService {
private final static Logger logger = LoggerFactory.getLogger(KeyInterfaceService.class);
private static final String CHARGE_URL = "http://pubg.com/api/getKey";
@Override
public ResultHelp doPost(Order order) {
ResultHelp resultHelp = new ResultHelp();
try {
Map<String, Object> params = new HashMap<String, Object>();
params.put("orderNo", purchaseOrder.getOrderNo());
params.put("productDes", purchaseRecord.getProductName());
params.put("parter", "gamelife_mall");
String timestamp = (System.currentTimeMillis()) + "";
params.put("timestamp", timestamp);
String sign = RSASignature.sign(sign, privateKey, "utf-8");
params.put("sign", sign);
String responseText = HttpClientUtil.doPost(CHARGE_URL, params);
if (StringUtil.isNotNullStr(responseText)) {
JSONObject json = JSONObject.fromObject(responseText);
int code = json.getInt("code");
String key= json.getString("key");
resultHelp.setKeyValue(key);
resultHelp.setResultFlag(true);
return resultHelp;
} else {
resultHelp.setKeyValue(null);
resultHelp.setMsg("接口未返回数据");
resultHelp.setResultFlag(false);
return resultHelp;
}
} catch (Exception e) {
logger.error("接口异常:{}", e);
resultHelp.setKeyValue(null);
resultHelp.setMsg("接口异常");
resultHelp.setResultFlag(false);
return resultHelp;
}
}
}
HttpClientUtil.java