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