From 1f19b78818609bf6d0849f8e58b349132a800538 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Mon, 01 Jun 2026 17:08:49 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/utils/pay/OcocnPayUtil.java |   97 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 97 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/nq/utils/pay/OcocnPayUtil.java b/src/main/java/com/nq/utils/pay/OcocnPayUtil.java
new file mode 100644
index 0000000..8d0519e
--- /dev/null
+++ b/src/main/java/com/nq/utils/pay/OcocnPayUtil.java
@@ -0,0 +1,97 @@
+package com.nq.utils.pay;
+
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class OcocnPayUtil {
+
+    private OcocnPayUtil() {
+    }
+
+    public static String encode(String value) {
+        if (value == null) {
+            return "";
+        }
+        try {
+            return URLEncoder.encode(value, StandardCharsets.UTF_8.name());
+        } catch (UnsupportedEncodingException e) {
+            return value;
+        }
+    }
+
+    public static String buildSubmitSign(String money, String productName, String notifyUrl,
+                                         String ordersn, String pid, String returnUrl,
+                                         String sitename, String payType, String key) {
+        Map<String, String> params = new TreeMap<>();
+        params.put("money", money);
+        params.put("name", productName);
+        params.put("notify_url", notifyUrl);
+        params.put("out_trade_no", ordersn);
+        params.put("pid", pid);
+        params.put("return_url", returnUrl);
+        if (StringUtils.isNotBlank(sitename)) {
+            params.put("sitename", sitename);
+        }
+        params.put("type", payType);
+        return md5Sign(params, key);
+    }
+
+    public static Map<String, String> parseRequestParams(HttpServletRequest request) {
+        Map<String, String> result = new HashMap<>();
+        if (request == null) {
+            return result;
+        }
+        Map<String, String[]> parameterMap = request.getParameterMap();
+        for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
+            String[] values = entry.getValue();
+            if (values != null && values.length > 0) {
+                result.put(entry.getKey(), values[0]);
+            }
+        }
+        return result;
+    }
+
+    public static boolean verifyNotifySign(Map<String, String> params, String key) {
+        if (params == null || StringUtils.isBlank(key)) {
+            return false;
+        }
+        String remoteSign = params.get("sign");
+        if (StringUtils.isBlank(remoteSign)) {
+            return false;
+        }
+        Map<String, String> signParams = new TreeMap<>();
+        for (Map.Entry<String, String> entry : params.entrySet()) {
+            String name = entry.getKey();
+            String value = entry.getValue();
+            if ("sign".equalsIgnoreCase(name) || "sign_type".equalsIgnoreCase(name)) {
+                continue;
+            }
+            if (StringUtils.isBlank(value)) {
+                continue;
+            }
+            signParams.put(name, value);
+        }
+        String localSign = md5Sign(signParams, key);
+        return remoteSign.equalsIgnoreCase(localSign);
+    }
+
+    private static String md5Sign(Map<String, String> params, String key) {
+        StringBuilder sb = new StringBuilder();
+        for (Map.Entry<String, String> entry : params.entrySet()) {
+            if (sb.length() > 0) {
+                sb.append('&');
+            }
+            sb.append(entry.getKey()).append('=').append(entry.getValue());
+        }
+        sb.append(key);
+        return DigestUtils.md5Hex(sb.toString()).toLowerCase();
+    }
+}

--
Gitblit v1.9.3