package edu.fudan.eservice.common.utils;
import java.util.Map;
import edu.fudan.weixin.entity.payment.PaymentResponseCode;
public class PaymentUtil {
public static String[] createResponseSignParam = {
"returnCode",
"sysId",
"itemId",
"objId",
"otherId",
"objName",
"amount",
"projectId",
"payId",
"payPassword",
"specialValue",
"returnURL"
};
public static String[] batchSummarySignParam = {
"returnCode",
"sysId",
"itemId",
"projectId",
"count"};
public static String[] singleDetailSignParam = {
"returnCode",
"sysId",
"itemId",
"objId",
"otherId",
"objName",
"amount",
"paid",
"refund",
"overTime",
"status",
"projectId",
"payId",
"payPassword",
"specialValue",
"payType"};
public static String[] batchDetailSignParam = {
"objId",
"otherId",
"objName",
"amount",
"paid",
"refund",
"overTime",
"status",
"payId",
"payPassword",
"specialValue",
"payType"};
public static PaymentResponseCode getReturnCode(Map<String, Object> values) {
if(!CommonUtil.isEmpty(values)) {
String returnCode = (String)values.get("returnCode");
if(!CommonUtil.isEmpty(returnCode))
return PaymentResponseCode.translate(returnCode);
}
return PaymentResponseCode.EMPTY_SUMMARY;
}
/**
* 检查签名字串有效性
* @return
*/
public static boolean checkSign(String Sign, String sysCert, String[] signParameters, Map<String, Object> values) {
return Sign.equals(createSign(sysCert, signParameters, values));
}
public static boolean checkSign(String sysCert, String[] signParameters, Map<String, Object> values) {
if(!CommonUtil.isEmpty(values)) {
String sign = (String)values.get("sign");
if(!CommonUtil.isEmpty(sign))
return checkSign(sign, sysCert, signParameters, values);
}
return false;
}
/**
* 生成签名字串
* @return
*/
public static String createSign(String sysCert, String[] signParameters, Map<String, Object> values) {
char firstSC = sysCert.charAt(0);
StringBuffer buf = new StringBuffer(512);
for (int i = 0; i < signParameters.length; i++)
{
Object value = values.get(signParameters[i]);
//即使参数为空依然添加首字母
buf.append(firstSC);
if (value == null)
{
continue;
}
buf.append(value);
}
buf.append(sysCert);
return EncodeHelper.digest(buf.toString(), "MD5");
}
}