From a2c4571d89ef86fe6d9c41ed7c583ec98b7101df Mon Sep 17 00:00:00 2001 From: "DESKTOP-C3M45P4\\dengdan" Date: Thu, 28 Nov 2024 14:29:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=85=85=E5=80=BC=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ljsd/controller/GameTitleController.java | 2 +- .../com/ljsd/controller/RebateController.java | 78 +++++++++++++----- .../ljsd/controller/RechargeController.java | 79 ++++++++----------- src/main/java/com/ljsd/pojo/Pay.java | 20 +++++ src/main/java/com/ljsd/pojo/ResultVo.java | 5 ++ src/main/java/com/ljsd/redis/RedisApp.java | 4 +- src/main/java/com/ljsd/redis/RedisKey.java | 4 +- src/main/java/com/ljsd/util/BaseGlobal.java | 2 +- src/main/java/com/ljsd/util/GlobalSys.java | 18 +---- .../java/com/ljsd/util/GlobalVersion.java | 2 +- src/main/java/com/ljsd/util/HttpUtil.java | 11 ++- 11 files changed, 136 insertions(+), 89 deletions(-) create mode 100644 src/main/java/com/ljsd/pojo/Pay.java diff --git a/src/main/java/com/ljsd/controller/GameTitleController.java b/src/main/java/com/ljsd/controller/GameTitleController.java index 513388c..7cb0cde 100644 --- a/src/main/java/com/ljsd/controller/GameTitleController.java +++ b/src/main/java/com/ljsd/controller/GameTitleController.java @@ -49,7 +49,7 @@ public class GameTitleController extends HttpServlet { String sign = parameterMap.get("sign"); boolean isSignSuccess = false; for (String value : BaseGlobal.PAY_KEY.values()) { - String info = accountid + roleId + HttpUtil.getEncode(roleName) +gameId + serviceId + opStatus + shutupTime + HttpUtil.getEncode(chatContents) + random + value; + String info = accountid + roleId + HttpUtil.getEncode(roleName).toLowerCase() +gameId + serviceId + opStatus + shutupTime + HttpUtil.getEncode(chatContents) + random + value; String sig = MyMD5Util.encrypByMd5(info); if (sig.equals(sign)){ isSignSuccess = true; diff --git a/src/main/java/com/ljsd/controller/RebateController.java b/src/main/java/com/ljsd/controller/RebateController.java index ef2ad0a..07e6abc 100644 --- a/src/main/java/com/ljsd/controller/RebateController.java +++ b/src/main/java/com/ljsd/controller/RebateController.java @@ -1,11 +1,9 @@ package com.ljsd.controller; import com.google.gson.Gson; -import com.ljsd.pojo.ResultVo; import com.ljsd.redis.RedisKey; import com.ljsd.util.BaseGlobal; import com.ljsd.util.HttpUtil; -import com.ljsd.util.MyMD5Util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,7 +13,11 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; import java.util.HashMap; +import java.util.Map; +import java.util.TreeMap; /** * @author gaojie @@ -35,44 +37,39 @@ public class RebateController extends HttpServlet { resp.setContentType("application/json; charset=utf-8"); PrintWriter out = resp.getWriter(); HashMap parameterMap = HttpUtil.getParameterMap(req); - String rebateType = parameterMap.get("rebate_type"); - String rebate_no = parameterMap.get("rebate_no"); - String gameOrderNo = parameterMap.get("game_order_no"); - String accountid = parameterMap.get("user_id"); - String payMoney = parameterMap.get("pay_money"); - String gold = parameterMap.get("gold"); - String gameId = parameterMap.get("game_id"); - String serviceId = parameterMap.get("service_id"); + String sid = parameterMap.get("sid"); + String puid = parameterMap.get("puid"); + String roleid = parameterMap.get("roleid"); + String sendid = parameterMap.get("sendid"); + String amount = parameterMap.get("amount"); + String nonce = parameterMap.get("nonce"); + String props = parameterMap.get("props"); String roleId = parameterMap.get("role_id"); String roleName = parameterMap.get("role_name"); String payTime = parameterMap.get("time"); String payStatus = parameterMap.get("pay_status"); String sign = parameterMap.get("sign"); - boolean isSignSuccess = false; for (String value : BaseGlobal.PAY_KEY.values()) { - String info =rebateType + rebate_no + HttpUtil.getUrlEncoder(gameOrderNo) + HttpUtil.getUrlEncoder(accountid) + payMoney + gold + gameId + HttpUtil.getUrlEncoder(serviceId) - + HttpUtil.getUrlEncoder(roleId) +payTime + value; - String sig = MyMD5Util.encrypByMd5(info); + String sig = generateSignature(parameterMap, value); if (sig.equals(sign)){ isSignSuccess = true; break; } - LOGGER.info("rebate()info={}, md5Sign={},sig" + "={} sin derify fail !!!",info,sign,sig); + LOGGER.info("rebate()yg_md5Sign={},sig" + "={} sin derify fail !!!",sign,sig); } if (!isSignSuccess) { - ResultVo resultVo = new ResultVo(100,"sign fail"); - out.print(HttpUtil.getResult(resultVo)); + out.print(HttpUtil.getYgResult("1","sign fail")); out.flush(); return; } try { Gson gson = new Gson(); - BaseGlobal.redisApp.hset( serviceId + ":" + RedisKey.BT_REBATE_KEY,"",rebate_no,gson.toJson(parameterMap),-1); + BaseGlobal.redisApp.hset( sid + ":" + RedisKey.YG_REBATE_KEY,"",sendid,gson.toJson(parameterMap),-1,false); } catch (Exception e) { e.printStackTrace(); } - String result = HttpUtil.getResult(new ResultVo(200, "success")); + String result =HttpUtil.getYgResult("0","success"); LOGGER.info("RebateController==>url:{},result={}",req.getRequestURI(),result); out.print(result); out.flush(); @@ -82,4 +79,47 @@ public class RebateController extends HttpServlet { protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } + + + public String generateSignature(Map params, String secretKey){ + // 1. 将参数按键名进行升序排列 + TreeMap sortedParams = new TreeMap<>(params); + + // 2. 拼接参数 + StringBuilder queryStringBuilder = new StringBuilder(); + for (Map.Entry entry : sortedParams.entrySet()) { + if ("sign".equals(entry.getKey())){ + continue; + } + if (queryStringBuilder.length() > 0) { + queryStringBuilder.append('&'); + } + try { + queryStringBuilder.append(entry.getKey()).append('=').append(HttpUtil.getUrlEncoder(entry.getValue())); // 手动进行 URL 编码 + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + + // 3. 拼接游戏密钥 + queryStringBuilder.append('&').append(secretKey); + + // 4. MD5 加密 + String queryString = queryStringBuilder.toString(); + LOGGER.info("generateSignature==>queryString:{}",queryString); + String signature; + MessageDigest md; + try { + md = MessageDigest.getInstance("MD5"); + byte[] bytes = md.digest(queryString.getBytes("UTF-8")); + StringBuilder resultStringBuilder = new StringBuilder(); + for (byte b : bytes) { + resultStringBuilder.append(String.format("%02x", b)); + } + signature = resultStringBuilder.toString(); + } catch (Exception e) { + throw new RuntimeException(e); + } + return signature; + } } diff --git a/src/main/java/com/ljsd/controller/RechargeController.java b/src/main/java/com/ljsd/controller/RechargeController.java index d546743..539e0e5 100644 --- a/src/main/java/com/ljsd/controller/RechargeController.java +++ b/src/main/java/com/ljsd/controller/RechargeController.java @@ -2,16 +2,13 @@ package com.ljsd.controller; import com.google.gson.Gson; import com.google.gson.JsonObject; -import com.ljsd.pojo.KSConstant; -import com.ljsd.pojo.KSPay; -import com.ljsd.pojo.ResultVo; +import com.ljsd.pojo.Pay; import com.ljsd.util.BaseGlobal; import com.ljsd.util.HttpUtil; import com.ljsd.util.MyMD5Util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -25,7 +22,7 @@ import java.util.Map; * @version V1.0 * @className RechargeController * @packageName com.ljsd.controller - * @description bt 充值 + * @description 幽谷 充值 * @date 2022-02-21 14:10 * copyright(c) 2020-2030 蓝鲸时代技术有限公司 **/ @@ -38,79 +35,65 @@ public class RechargeController extends HttpServlet { resp.setContentType("application/json; charset=utf-8"); PrintWriter out = resp.getWriter(); HashMap parameterMap = HttpUtil.getParameterMap(req); - String orderNo = parameterMap.get("order_sn"); - String goodName = parameterMap.get("good_name"); - String gameOrderSn = parameterMap.get("game_order_sn"); - String accountid = parameterMap.get("uuid"); - String amount = parameterMap.get("pay_money"); - String gameId = parameterMap.get("game_id"); - String serviceId = parameterMap.get("service_id"); - String serviceName = parameterMap.get("service_name"); - String roleId = parameterMap.get("role_id"); - String roleName = parameterMap.get("role_name"); - String payTime = parameterMap.get("time"); - String payStatus = parameterMap.get("pay_status"); - String goodsInfo = parameterMap.get("remark"); - String couponAmount = parameterMap.get("coupon_amount"); - String sign = parameterMap.get("sign"); - int isTest = Integer.parseInt(parameterMap.get("is_test")); - - String version = "zhj_bt"; + String serverId = parameterMap.get("sid"); + String uid = parameterMap.get("uid"); + String orderno = parameterMap.get("orderno"); + String amount = parameterMap.get("amount"); + // 暂时无用 + String isFreePay = parameterMap.get("isFreePay"); + String status = parameterMap.get("status"); + String extInfo = parameterMap.get("extinfo"); + String nonce = parameterMap.get("nonce"); + String token = parameterMap.get("token"); boolean isSignSuccess = false; - for (Map.Entry entry : BaseGlobal.PAY_KEY.entrySet()) { - String info = "good_name=" + HttpUtil.getUrlEncoder(goodName) + "&uuid="+accountid + "&order_sn="+orderNo + "&game_order_sn="+gameOrderSn + "&game_id="+gameId + "&service_id=" - +serviceId + "&service_name="+HttpUtil.getUrlEncoder(serviceName) + "&role_id=" + roleId + "&role_name=" + HttpUtil.getUrlEncoder(roleName) + "&pay_money=" + amount + "&pay_status=" + payStatus - +"&remark=" + HttpUtil.getUrlEncoder(goodsInfo) + "&time=" + payTime + "&key=" + entry.getValue(); - String sig = MyMD5Util.encrypByMd5(info); - if (sig.equals(sign)){ + for (String value : BaseGlobal.PAY_KEY.values()) { + String info = serverId + uid + orderno + amount + extInfo + nonce + value; + String sign = MyMD5Util.encrypByMd5(info); + if (token.equals(sign)){ isSignSuccess = true; - version = entry.getKey(); break; } - LOGGER.info("callback()info={}, md5Sign={},sig={} sin derify fail !!!",info,sign,sig); + LOGGER.info("callback()info={}, bt_md5Sign={},sig" + "={} sin derify fail !!!",info,sign,token); } if (!isSignSuccess) { - ResultVo resultVo = new ResultVo(100,"sign fail"); - out.print(HttpUtil.getResult(resultVo)); + out.print(HttpUtil.getYgResult("1","sign fail")); out.flush(); return; } //init pay Gson gson = new Gson(); - String[] split = goodsInfo.split("\\|"); + String[] split = extInfo.split("\\|"); JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("orderId", split[0]); jsonObject.addProperty("goodsId",split[1]); - jsonObject.addProperty("welfareNum",split[2]); + jsonObject.addProperty("uid",split[2]); + // 游戏中uid Map json = gson.fromJson(jsonObject, Map.class); - KSPay pay = new KSPay(); - pay.app_id = version; - pay.allin_trade_no = orderNo ; - pay.goods_id = json.get("goodsId"); - pay.role_id = roleId; - pay.server_id = serviceId; - pay.data = payStatus; - pay.extension = jsonObject.toString() ; + Pay pay = new Pay(); + pay.roleId = json.get("uid"); + pay.serverId = serverId ; + pay.goodsId = json.get("goodsId"); pay.money = amount; - pay.couponAmount = couponAmount; + pay.extension = jsonObject.toString(); + pay.sdkOrderId = orderno; String orderId = json.get("orderId"); //存入redis 存入成功就返回成功,后续在游戏服处理 try { - BaseGlobal.redisApp.hset("game", pay.server_id, "pay", KSConstant.KS_PAY, orderId, gson.toJson(pay), -1); + BaseGlobal.redisApp.hset(pay.serverId, "PAY_KEY", orderId, gson.toJson(pay), -1,false); } catch (Exception e) { e.printStackTrace(); out.print("data error"); out.flush(); return; } - LOGGER.info("玩家充值成功,存入redis----roleId={},orderId={},money={}", pay.role_id, pay.allin_trade_no,pay.money); - String result = HttpUtil.getResult(new ResultVo(200, "success")); + LOGGER.info("玩家充值成功,存入redis----roleId={},orderId={},money={}", pay.roleId, pay.sdkOrderId,pay.money); + String result =HttpUtil.getYgResult("0","success"); LOGGER.info("RechargeController==>url:{},result={}",req.getRequestURI(),result); out.print(result); out.flush(); } @Override - protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { this.doGet(req, resp); } diff --git a/src/main/java/com/ljsd/pojo/Pay.java b/src/main/java/com/ljsd/pojo/Pay.java new file mode 100644 index 0000000..d92ae44 --- /dev/null +++ b/src/main/java/com/ljsd/pojo/Pay.java @@ -0,0 +1,20 @@ +package com.ljsd.pojo; + +/** + * @version V1.0 + * @ClassName: KSPay + * @Package com.ljsd.pojo + * @Description: ${TODO} + * @Author: zw + * @date: 2020/7/28 18:30 + */ +public class Pay { + public String roleId; + public String serverId; + public String goodsId; + public String money; + public String extension; + public String data; + public String sdkOrderId; + +} diff --git a/src/main/java/com/ljsd/pojo/ResultVo.java b/src/main/java/com/ljsd/pojo/ResultVo.java index b2e067b..53694ff 100644 --- a/src/main/java/com/ljsd/pojo/ResultVo.java +++ b/src/main/java/com/ljsd/pojo/ResultVo.java @@ -21,6 +21,11 @@ public class ResultVo { this.data = ""; } + public ResultVo(String code, String msg){ + this.msg = msg; + this.data = ""; + } + public String getCode() { return status; } diff --git a/src/main/java/com/ljsd/redis/RedisApp.java b/src/main/java/com/ljsd/redis/RedisApp.java index cd15a9f..da22041 100644 --- a/src/main/java/com/ljsd/redis/RedisApp.java +++ b/src/main/java/com/ljsd/redis/RedisApp.java @@ -156,8 +156,8 @@ public class RedisApp { public void hset(final String type, final K key, final String field, final T value, int seconds, boolean withServerId) throws Exception { String fullKey = getKey(type, key, withServerId); - String strValue = gson.toJson(value); - redisUtil.hset(fullKey, field, strValue, seconds); +// String strValue = gson.toJson(value); + redisUtil.hset(fullKey, field, String.valueOf(value), seconds); } //设置redis map一个键值 下的子key下的值 new--- diff --git a/src/main/java/com/ljsd/redis/RedisKey.java b/src/main/java/com/ljsd/redis/RedisKey.java index be5c47b..c134bb4 100644 --- a/src/main/java/com/ljsd/redis/RedisKey.java +++ b/src/main/java/com/ljsd/redis/RedisKey.java @@ -34,9 +34,9 @@ public interface RedisKey { */ String BT_SEND_REWARD_KEY = "BT_SEND_REWARD_KEY"; /** - * bt 充值返利 + * YG充值返利 */ - String BT_REBATE_KEY = "BT_REBATE_KEY"; + String YG_REBATE_KEY = "YG_REBATE_KEY"; /** * 禁言列表 diff --git a/src/main/java/com/ljsd/util/BaseGlobal.java b/src/main/java/com/ljsd/util/BaseGlobal.java index 4117301..1681d56 100644 --- a/src/main/java/com/ljsd/util/BaseGlobal.java +++ b/src/main/java/com/ljsd/util/BaseGlobal.java @@ -24,7 +24,7 @@ public class BaseGlobal { for (Map.Entry mapEntry : sdkInfos.entrySet()) { String version = mapEntry.getKey(); HashMap value = mapEntry.getValue(); - PAY_KEY.put(version, (String) value.get(GlobalSys.PAY_KEY)); + PAY_KEY.put(version, (String) value.get("pay_key")); LOGGER.info("init==>version={} PAY_KEY={},",version, PAY_KEY.get(version)); } } diff --git a/src/main/java/com/ljsd/util/GlobalSys.java b/src/main/java/com/ljsd/util/GlobalSys.java index 6ba70bd..e7a7684 100644 --- a/src/main/java/com/ljsd/util/GlobalSys.java +++ b/src/main/java/com/ljsd/util/GlobalSys.java @@ -3,19 +3,9 @@ package com.ljsd.util; public interface GlobalSys { int SERVER_GM_ID = 1000; - - String KEY = "f79012fe1147d62dcdaf67d6952ca42d"; - - String KEY_AQ = "88ead6d89711427f71febc0793bbec9f"; - - String KEY_QF = "e506dd6f38f6a50e5879bfab6165ede5"; - - String GAME_ID = "game_id"; - String LOGIN_KEY = "login_key"; - String PAY_KEY = "pay_key"; - - - String APP_ID = "230824152474"; - String YY_APP_KEY = "0dqescukctfzxvenirpjcb1f3txqcsaq"; + /** + * 幽谷支付key + */ + String YG_PAY_KEY = "b09c8bb4c5764bc08fc20d75845e5839"; } diff --git a/src/main/java/com/ljsd/util/GlobalVersion.java b/src/main/java/com/ljsd/util/GlobalVersion.java index ca34930..2fd8f43 100644 --- a/src/main/java/com/ljsd/util/GlobalVersion.java +++ b/src/main/java/com/ljsd/util/GlobalVersion.java @@ -23,7 +23,7 @@ public class GlobalVersion { /** * 当前服务器编译版本号 */ - private static int serverBuildVersion = 111; + private static int serverBuildVersion = 145; public static String getServerVersion() { diff --git a/src/main/java/com/ljsd/util/HttpUtil.java b/src/main/java/com/ljsd/util/HttpUtil.java index 5816f1f..f65f904 100644 --- a/src/main/java/com/ljsd/util/HttpUtil.java +++ b/src/main/java/com/ljsd/util/HttpUtil.java @@ -5,9 +5,10 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.ljsd.pojo.ResultVo; +import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.commons.lang.StringUtils; + import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.IOException; @@ -16,6 +17,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Enumeration; import java.util.HashMap; +import java.util.Map; public class HttpUtil { private static final Logger LOGGER = LoggerFactory.getLogger(HttpUtil.class); @@ -79,6 +81,13 @@ public class HttpUtil { public static String getResult(ResultVo resultVo) { return gson.toJson(resultVo); } + public static String getYgResult(String errno, String errMsg) { + Map map = new HashMap<>(); + map.put("errno",errno); + map.put("errmsg",errMsg); + return gson.toJson(map); + + } public static String getReward(String itemInfo) { JsonArray items = gson.fromJson(itemInfo, JsonArray.class);