|
@@ -1,124 +0,0 @@
|
|
|
-package com.zanxiang.sdk.common.util;
|
|
|
-
|
|
|
-import com.zanxiang.common.utils.MD5Util;
|
|
|
-import org.apache.logging.log4j.util.Strings;
|
|
|
-
|
|
|
-import java.text.SimpleDateFormat;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.Set;
|
|
|
-import java.util.SortedMap;
|
|
|
-
|
|
|
-/**
|
|
|
- * @author xufeng
|
|
|
- * @date 2022/6/8 15:37
|
|
|
- */
|
|
|
-public class PayCommonUtil {
|
|
|
-
|
|
|
- /**
|
|
|
- * 是否签名正确,规则是:按参数名称a-z排序,遇到空值的参数不参加签名
|
|
|
- *
|
|
|
- * @param characterEncoding
|
|
|
- * @param packageParams
|
|
|
- * @param apiKey
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static boolean isTenPaySign(String characterEncoding, Map<String, String> packageParams, String apiKey) {
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- Set es = packageParams.entrySet();
|
|
|
- for (Object e : es) {
|
|
|
- Map.Entry entry = (Map.Entry) e;
|
|
|
- String k = (String) entry.getKey();
|
|
|
- String v = (String) entry.getValue();
|
|
|
- if (!"sign".equals(k) && null != v && !"".equals(v)) {
|
|
|
- sb.append(k).append("=").append(v).append("&");
|
|
|
- }
|
|
|
- }
|
|
|
- packageParams.remove("sign");
|
|
|
- packageParams.forEach((key, value) -> {
|
|
|
- sb.append(key).append("=").append(value).append("&");
|
|
|
- });
|
|
|
- sb.append("key=").append(apiKey);
|
|
|
- //算出摘要
|
|
|
- String mySign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toLowerCase();
|
|
|
- String tenPaySign = (packageParams.get("sign")).toLowerCase();
|
|
|
- return tenPaySign.equals(mySign);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * sign签名
|
|
|
- *
|
|
|
- * @param characterEncoding
|
|
|
- * @param packageParams
|
|
|
- * @param apiKey
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static String createSign(String characterEncoding, SortedMap<Object, Object> packageParams, String apiKey) {
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- Set es = packageParams.entrySet();
|
|
|
- for (Object e : es) {
|
|
|
- Map.Entry entry = (Map.Entry) e;
|
|
|
- String k = (String) entry.getKey();
|
|
|
- String v = entry.getValue() == null ? "" : (String) entry.getValue();
|
|
|
- if (Strings.isNotBlank(v) && !"sign".equals(k) && !"key".equals(k)) {
|
|
|
- sb.append(k).append("=").append(v).append("&");
|
|
|
- }
|
|
|
- }
|
|
|
- sb.append("key=").append(apiKey);
|
|
|
- return MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 将请求参数转换为xml格式的string
|
|
|
- *
|
|
|
- * @param parameters
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static String getRequestXml(SortedMap<Object, Object> parameters) {
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- sb.append("<xml>");
|
|
|
- Set es = parameters.entrySet();
|
|
|
- for (Object e : es) {
|
|
|
- Map.Entry entry = (Map.Entry) e;
|
|
|
- String k = (String) entry.getKey();
|
|
|
- String v = (String) entry.getValue();
|
|
|
- if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k) || "sign".equalsIgnoreCase(k)) {
|
|
|
- sb.append("<").append(k).append(">").append("<![CDATA[").append(v).append("]]></").append(k).append(">");
|
|
|
- } else {
|
|
|
- sb.append("<").append(k).append(">").append(v).append("</").append(k).append(">");
|
|
|
- }
|
|
|
- }
|
|
|
- sb.append("</xml>");
|
|
|
- return sb.toString();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 取出一个指定长度大小的随机正整数.
|
|
|
- *
|
|
|
- * @param length
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static int buildRandom(int length) {
|
|
|
- int num = 1;
|
|
|
- double random = Math.random();
|
|
|
- if (random < 0.1) {
|
|
|
- random = random + 0.1;
|
|
|
- }
|
|
|
- for (int i = 0; i < length; i++) {
|
|
|
- num = num * 10;
|
|
|
- }
|
|
|
- return (int) ((random * num));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取当前时间
|
|
|
- *
|
|
|
- * @return String
|
|
|
- */
|
|
|
- public static String getCurrTime() {
|
|
|
- Date now = new Date();
|
|
|
- SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");
|
|
|
- String s = outFormat.format(now);
|
|
|
- return s;
|
|
|
- }
|
|
|
-}
|