package com.walker.pay;
import com.walker.infrastructure.utils.StringUtils;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;
/**
* 订单请求返回响应对象。
* 第三方如:微信、通联等返回的实际结果。
* @author 时克英
* @date 2023-01-15
*/
public class ResponsePay {
// protected static final Logger logger = LoggerFactory.getLogger(ResponsePay.class);
// private static final Map> responsePayClassCache = new HashMap<>(64);
/**
* 创建并返回一个错误响应。
* @param clazz 业务提供响应类型,如: ResponseBindPhone
* @param errorMsg 错误信息
* @return
* @param
* @date 2023-02-24
*/
public static final T error(Class clazz, String errorMsg){
// Class> responsePayClazz = responsePayClassCache.get(clazz.getName());
try {
// if(responsePayClazz == null){
// if(logger.isDebugEnabled()){
// logger.debug("没有class,创建新的:{}", clazz.getName());
// }
// responsePayClazz = ClassUtils.forName(clazz.getName(), ResponsePay.class.getClassLoader());
// responsePayClassCache.put(clazz.getName(), responsePayClazz);
// }
// Constructor constructor = (Constructor)responsePayClazz.getConstructor();
Constructor constructor = clazz.getConstructor();
ResponsePay responsePay = constructor.newInstance();
responsePay.setStatus(false);
responsePay.setMessage(errorMsg);
return (T)responsePay;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public boolean getStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
/**
* 当在环境中不能通过泛型定义结果明细时,可以使用data字段,但这仅在非常阶段使用,
* 一般都使用result属性。
* @return
*/
public Map getData() {
return data;
}
public void setData(Map data) {
this.data = data;
}
public void add(String key, Object value){
this.data.put(key, value);
}
// /**
// * 返回调用结果的具体细节,每个提供商的每个接口,返回的内容都不同;
// * 该结果会被定义为对象形式,由子业务通过泛型确定格式。
// * @return
// */
// public T getResult() {
// return result;
// }
//
// public void setResult(T result) {
// this.result = result;
// }
//
// private T result = null;
private boolean status = true;
private String message = StringUtils.EMPTY_STRING;
private Map data = new HashMap<>();
}