doum
3 天以前 c5c4f201eedfcf374008238dce7afc84f8200ea4
server/services/src/main/java/com/allinpay/syb/lib/SybUtil.java
@@ -1,6 +1,5 @@
package com.allinpay.syb.lib;
import java.io.UnsupportedEncodingException;
import java.security.KeyFactory;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@@ -8,13 +7,13 @@
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.allinpay.syb.model.PayOrderNotifyParam;
import org.apache.commons.codec.binary.Base64;
public class SybUtil {
@@ -101,16 +100,16 @@
   public static boolean validSign(TreeMap<String, String> param,
         String appkey, String signType) throws Exception {
      if (param != null && !param.isEmpty()) {
         if (!param.containsKey("sign"))
            return false;
         String sign = param.remove("sign");
         if ("MD5".equals(signType)) {// 如果是md5则需要把md5的key加入到排序
            param.put("key", appkey);
         }
         StringBuilder sb = new StringBuilder();
         for (Map.Entry<String, String> entry : param.entrySet()) {
            if (entry.getValue() != null && entry.getValue().length() > 0) {
            if (param != null && !param.isEmpty()) {
               if (!param.containsKey("sign"))
                  return false;
               String sign = param.remove("sign");
               if ("MD5".equals(signType)) {// 如果是md5则需要把md5的key加入到排序
                  param.put("key", appkey);
               }
               StringBuilder sb = new StringBuilder();
               for (Map.Entry<String, String> entry : param.entrySet()) {
                  if (entry.getValue() != null && entry.getValue().length() > 0) {
               sb.append(entry.getKey()).append("=")
                     .append(entry.getValue()).append("&");
            }
@@ -239,4 +238,124 @@
      return keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
   }
   public static String getPayInfoByStatus(PayOrderNotifyParam map) {
      /**
       * 0000:交易成功
       * 1001:交易不存在
       * 2008或者2000 : 交易处理中,请查询交易,如果是实时交易(例如刷卡支付,交易撤销,退货),建议每隔一段时间(10秒)查询交易
       * 3开头的错误码代表交易失败
       * 3888-流水号重复
       * 3889-交易控制失败,具体原因看errmsg
       * 3099-渠道商户错误
       * 3014-交易金额小于应收手续费
       * 3024-退款频率限制,建议30秒后再发起退款
       * 3031-校验实名信息失败
       * 3088-交易未支付(在查询时间区间内未成功支付,如已影响资金24小时内会做差错退款处理)
       * 3089-撤销异常,如已影响资金24小时内会做差错退款处理
       * 3045-其他错误,具体原因看errmsg
       * 3050-交易已被撤销
       * 3999-其他错误,具体原因看errmsg
       * 3008-商户余额不足
       */
      String info = "交易失败";
      switch (map.getTrxstatus()){
         case "0000":
            info="交易成功";
            break;
         case "1001":
            info="交易不存在";
            break;
         case "2008":
            info="交易处理中,请查询交易,如果是实时交易(例如刷卡支付,交易撤销,退货),建议每隔一段时间(10秒)查询交易";
            break;
         case "2000":
            info="交易处理中,请查询交易,如果是实时交易(例如刷卡支付,交易撤销,退货),建议每隔一段时间(10秒)查询交易";
            break;
         case "3888":
            info="流水号重复";
            break;
         case "3889":
            info="交易控制失败,具体原因看errmsg";
            break;
         case "3099":
            info="渠道商户错误";
            break;
         case "3014":
            info="退款频率限制,建议30秒后再发起退款";
            break;
         case "3024":
            info="交易金额小于应收手续费";
            break;
         case "3031":
            info="校验实名信息失败";
            break;
         case "3088":
            info="交易未支付(在查询时间区间内未成功支付,如已影响资金24小时内会做差错退款处理)";
            break;
         case "3089":
            info="撤销异常,如已影响资金24小时内会做差错退款处理";
            break;
         case "3045":
            info="其他错误,具体原因看errmsg";
            break;
         case "3050":
            info="交易已被撤销";
            break;
         case "3999":
            info= "其他错误1,具体原因看errmsg";
            break;
         case "3008":
            info="商户余额不足";
            break;
         default:
            break;
      }
      return map.getTrxstatus() + info ;
   }
   public static String getPayTypeByCode(PayOrderNotifyParam map) {
      /**
       VSP501   微信支付
       VSP502   微信支付撤销
       VSP503   微信支付退款
       VSP511   支付宝支付
       VSP512   支付宝支付撤销
       VSP513   支付宝支付退款
       VSP551   银联扫码支付
       VSP552   银联扫码撤销
       VSP553   银联扫码退货
       */
      String info = "交易失败";
      switch (map.getTrxcode()){
         case "VSP501":
            info="微信支付";
            break;
         case "VSP502":
            info="微信支付撤销";
            break;
         case "VSP511":
            info="付宝支付";
            break;
         case "VSP512":
            info="支付宝支付撤销";
            break;
         case "VSP513":
            info="支付宝支付退款";
            break;
         case "VSP551":
            info="银联扫码支付";
            break;
         case "VSP552":
            info="银联扫码撤销";
            break;
         case "VSP553":
            info="银联扫码退货";
            break;
         default:
            break;
      }
      return  info ;
   }
}