From dc00ffea133fc15ba6cd0e5f931b20152dcb98f0 Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Tue, 10 May 2022 11:03:43 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=B5=A9=E5=87=A1sdk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HaoFanRechargeController.java | 83 +++++++++++++++++++ .../java/com/jmfy/controller/PayLogic.java | 1 + .../java/com/jmfy/paramBean/PaySdkEnum.java | 1 + 3 files changed, 85 insertions(+) create mode 100644 src/main/java/com/jmfy/controller/HaoFanRechargeController.java diff --git a/src/main/java/com/jmfy/controller/HaoFanRechargeController.java b/src/main/java/com/jmfy/controller/HaoFanRechargeController.java new file mode 100644 index 0000000..ca3b956 --- /dev/null +++ b/src/main/java/com/jmfy/controller/HaoFanRechargeController.java @@ -0,0 +1,83 @@ +package com.jmfy.controller; + +import com.google.gson.JsonObject; +import com.jmfy.dto.CUserDao; +import com.jmfy.paramBean.PaySdkEnum; +import com.jmfy.util.JsonUtil; +import org.apache.commons.codec.digest.DigestUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.*; + +/** + * 浩凡游戏 + */ +@RestController +public class HaoFanRechargeController { + + private static final String PAYKEY = "AA594A9028E147D2AD28C9C1A156F9A1"; + private static final Logger LOGGER = LoggerFactory.getLogger(HaoFanRechargeController.class); + + @Resource + private PayLogic payLogic; + + private static boolean verifySign(Map map, String sign) { + if (map == null || map.isEmpty()) { + return false; + } + StringBuilder builder = new StringBuilder(); + builder.append(map.get("orderNo")).append(map.get("userNo")).append(map.get("orderMoney")).append(PAYKEY); + String substring = builder.substring(0, builder.length() - 1).toUpperCase(); + LOGGER.info("hao fan 参数拼装sign(未加密):" + substring + PAYKEY); + String md5Hex = DigestUtils.md5Hex(substring + PAYKEY); + LOGGER.info("hao fan 参数拼装sign(加密后):" + md5Hex); + return md5Hex.equals(sign); + } + + @RequestMapping(value = "/Web/hanFanCallback") + public String youguCallback(HttpServletRequest request) throws Exception { + HashMap parameterMap = JsonUtil.getInstence().getParameterMap2(request); + if (parameterMap.isEmpty()) { + LOGGER.info("hao fan GameCallback data is null"); + return "FAIL"; + } + + String orderNo = request.getParameter("orderNo"); //此订单号由开发者生成,可用于对账、客服支持等。 + String userNo = request.getParameter("userNo"); //玩家登录成功客户端回传的用户名 + String orderMoney = request.getParameter("orderMoney"); //订单充值的金额,单位元(只接收 >=1 的整数位金额) + String flag = request.getParameter("flag"); //MD5(orderNo+userNo+orderMoney+PKEY).toUpperCase(); + String companyOrderNo = request.getParameter("companyOrderNo"); //游戏传入外部订单号 + String gamePid = request.getParameter("gamePid"); //游戏PID + String productId = request.getParameter("productId"); //物品id + String productName = request.getParameter("productName"); //物品名称 + + LOGGER.info("hao fan======》{}", parameterMap); + SortedMap map = new TreeMap<>(); + map.put("orderNo", orderNo); + map.put("userNo", userNo); + map.put("orderMoney", orderMoney); + + boolean valid = verifySign(map, flag); + if (!valid) { + LOGGER.info("callback==>extra={},sin verify fail"); + return "FAIL"; + } + int rmb = Integer.parseInt(orderMoney) * 100; + JsonObject jsonObject = new JsonObject(); + + if ("SUCCESS".equals(payLogic.initOrder(userNo + "_" + productId + "_" + companyOrderNo, orderNo, String.valueOf(rmb), new Date(), userNo, PaySdkEnum.HANFAN))) { + jsonObject.addProperty("code", "100"); + jsonObject.addProperty("msg", ""); + return jsonObject.toString(); + } else { + jsonObject.addProperty("code", "-1"); + jsonObject.addProperty("msg", ""); + return jsonObject.toString(); + } + } +} diff --git a/src/main/java/com/jmfy/controller/PayLogic.java b/src/main/java/com/jmfy/controller/PayLogic.java index fdbfab6..c6caf7a 100644 --- a/src/main/java/com/jmfy/controller/PayLogic.java +++ b/src/main/java/com/jmfy/controller/PayLogic.java @@ -37,6 +37,7 @@ public class PayLogic { } public String initOrder(String collBackInfo, String orderId, String amount, Date time, String openId, PaySdkEnum sdk){ + LOGGER.info("collBackInfo=>{} orderId {} amount{} openId{} ",collBackInfo); return initOrder(collBackInfo,orderId,amount,time,openId,sdk,""); } diff --git a/src/main/java/com/jmfy/paramBean/PaySdkEnum.java b/src/main/java/com/jmfy/paramBean/PaySdkEnum.java index f3c97d2..af286d1 100644 --- a/src/main/java/com/jmfy/paramBean/PaySdkEnum.java +++ b/src/main/java/com/jmfy/paramBean/PaySdkEnum.java @@ -16,6 +16,7 @@ public enum PaySdkEnum { DY(6,"DY"), DUOYOU(7,"DUOYOU"), AIWAN(8,"AIWAN"), + HANFAN(9,"HAOFAN"), ; private int id; From 499c62a28c81d0bec3dae11ba0e3b04d1894817b Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Tue, 10 May 2022 16:59:52 +0800 Subject: [PATCH 2/6] =?UTF-8?q?HF=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jmfy/controller/HaoFanRechargeController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/jmfy/controller/HaoFanRechargeController.java b/src/main/java/com/jmfy/controller/HaoFanRechargeController.java index ca3b956..3dc6d63 100644 --- a/src/main/java/com/jmfy/controller/HaoFanRechargeController.java +++ b/src/main/java/com/jmfy/controller/HaoFanRechargeController.java @@ -33,8 +33,8 @@ public class HaoFanRechargeController { StringBuilder builder = new StringBuilder(); builder.append(map.get("orderNo")).append(map.get("userNo")).append(map.get("orderMoney")).append(PAYKEY); String substring = builder.substring(0, builder.length() - 1).toUpperCase(); - LOGGER.info("hao fan 参数拼装sign(未加密):" + substring + PAYKEY); - String md5Hex = DigestUtils.md5Hex(substring + PAYKEY); + LOGGER.info("hao fan 参数拼装sign(未加密):" + substring); + String md5Hex = DigestUtils.md5Hex(substring ); LOGGER.info("hao fan 参数拼装sign(加密后):" + md5Hex); return md5Hex.equals(sign); } From 5de35e103fd8a56c1e6adf6c1ad0ac0046730c06 Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Tue, 10 May 2022 18:22:12 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=B5=A9=E5=87=A1=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jmfy/controller/HaoFanRechargeController.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/jmfy/controller/HaoFanRechargeController.java b/src/main/java/com/jmfy/controller/HaoFanRechargeController.java index 3dc6d63..71c1c48 100644 --- a/src/main/java/com/jmfy/controller/HaoFanRechargeController.java +++ b/src/main/java/com/jmfy/controller/HaoFanRechargeController.java @@ -32,10 +32,9 @@ public class HaoFanRechargeController { } StringBuilder builder = new StringBuilder(); builder.append(map.get("orderNo")).append(map.get("userNo")).append(map.get("orderMoney")).append(PAYKEY); - String substring = builder.substring(0, builder.length() - 1).toUpperCase(); + String substring =builder.toString(); LOGGER.info("hao fan 参数拼装sign(未加密):" + substring); - String md5Hex = DigestUtils.md5Hex(substring ); - LOGGER.info("hao fan 参数拼装sign(加密后):" + md5Hex); + String md5Hex = DigestUtils.md5Hex(substring).toUpperCase(); return md5Hex.equals(sign); } @@ -44,7 +43,7 @@ public class HaoFanRechargeController { HashMap parameterMap = JsonUtil.getInstence().getParameterMap2(request); if (parameterMap.isEmpty()) { LOGGER.info("hao fan GameCallback data is null"); - return "FAIL"; + //return "FAIL"; } String orderNo = request.getParameter("orderNo"); //此订单号由开发者生成,可用于对账、客服支持等。 From c4b8a8936b96a91899068624b238f482fcf01e2b Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Tue, 10 May 2022 18:29:25 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/jmfy/controller/HaoFanRechargeController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/jmfy/controller/HaoFanRechargeController.java b/src/main/java/com/jmfy/controller/HaoFanRechargeController.java index 71c1c48..159ae59 100644 --- a/src/main/java/com/jmfy/controller/HaoFanRechargeController.java +++ b/src/main/java/com/jmfy/controller/HaoFanRechargeController.java @@ -66,7 +66,7 @@ public class HaoFanRechargeController { LOGGER.info("callback==>extra={},sin verify fail"); return "FAIL"; } - int rmb = Integer.parseInt(orderMoney) * 100; + int rmb = (int)Float.parseFloat(orderMoney)*100; JsonObject jsonObject = new JsonObject(); if ("SUCCESS".equals(payLogic.initOrder(userNo + "_" + productId + "_" + companyOrderNo, orderNo, String.valueOf(rmb), new Date(), userNo, PaySdkEnum.HANFAN))) { From 9ad081f6b6cb4682d41c07d8dd035fa46ea8f994 Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Tue, 10 May 2022 18:52:58 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E9=80=8F=E4=BC=A0=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jmfy/controller/HaoFanRechargeController.java | 3 ++- src/main/java/com/jmfy/controller/PayLogic.java | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/jmfy/controller/HaoFanRechargeController.java b/src/main/java/com/jmfy/controller/HaoFanRechargeController.java index 159ae59..7da2a02 100644 --- a/src/main/java/com/jmfy/controller/HaoFanRechargeController.java +++ b/src/main/java/com/jmfy/controller/HaoFanRechargeController.java @@ -54,6 +54,7 @@ public class HaoFanRechargeController { String gamePid = request.getParameter("gamePid"); //游戏PID String productId = request.getParameter("productId"); //物品id String productName = request.getParameter("productName"); //物品名称 + String remark = request.getParameter("remark"); //透传参数 LOGGER.info("hao fan======》{}", parameterMap); SortedMap map = new TreeMap<>(); @@ -69,7 +70,7 @@ public class HaoFanRechargeController { int rmb = (int)Float.parseFloat(orderMoney)*100; JsonObject jsonObject = new JsonObject(); - if ("SUCCESS".equals(payLogic.initOrder(userNo + "_" + productId + "_" + companyOrderNo, orderNo, String.valueOf(rmb), new Date(), userNo, PaySdkEnum.HANFAN))) { + if ("SUCCESS".equals(payLogic.initOrder(remark, orderNo, String.valueOf(rmb), new Date(), userNo, PaySdkEnum.HANFAN))) { jsonObject.addProperty("code", "100"); jsonObject.addProperty("msg", ""); return jsonObject.toString(); diff --git a/src/main/java/com/jmfy/controller/PayLogic.java b/src/main/java/com/jmfy/controller/PayLogic.java index c6caf7a..fdbfab6 100644 --- a/src/main/java/com/jmfy/controller/PayLogic.java +++ b/src/main/java/com/jmfy/controller/PayLogic.java @@ -37,7 +37,6 @@ public class PayLogic { } public String initOrder(String collBackInfo, String orderId, String amount, Date time, String openId, PaySdkEnum sdk){ - LOGGER.info("collBackInfo=>{} orderId {} amount{} openId{} ",collBackInfo); return initOrder(collBackInfo,orderId,amount,time,openId,sdk,""); } From b05daf92a3e742d1989d9cb9828c3644d5d33908 Mon Sep 17 00:00:00 2001 From: xuexinpeng Date: Wed, 11 May 2022 18:20:38 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=B5=A9=E5=87=A1ios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jmfy/controller/HaoFanRechargeController.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/jmfy/controller/HaoFanRechargeController.java b/src/main/java/com/jmfy/controller/HaoFanRechargeController.java index 7da2a02..cd574f9 100644 --- a/src/main/java/com/jmfy/controller/HaoFanRechargeController.java +++ b/src/main/java/com/jmfy/controller/HaoFanRechargeController.java @@ -21,6 +21,7 @@ import java.util.*; public class HaoFanRechargeController { private static final String PAYKEY = "AA594A9028E147D2AD28C9C1A156F9A1"; + private static final String PAYKEY_IOS = "5A98DACA26C446EDB481AE3E617AFBB5"; private static final Logger LOGGER = LoggerFactory.getLogger(HaoFanRechargeController.class); @Resource @@ -31,7 +32,8 @@ public class HaoFanRechargeController { return false; } StringBuilder builder = new StringBuilder(); - builder.append(map.get("orderNo")).append(map.get("userNo")).append(map.get("orderMoney")).append(PAYKEY); + builder.append(map.get("orderNo")).append(map.get("userNo")).append(map.get("orderMoney")) + .append(map.get("pKey")); String substring =builder.toString(); LOGGER.info("hao fan 参数拼装sign(未加密):" + substring); String md5Hex = DigestUtils.md5Hex(substring).toUpperCase(); @@ -55,12 +57,13 @@ public class HaoFanRechargeController { String productId = request.getParameter("productId"); //物品id String productName = request.getParameter("productName"); //物品名称 String remark = request.getParameter("remark"); //透传参数 - + String pKey = request.getParameter("pKey"); LOGGER.info("hao fan======》{}", parameterMap); SortedMap map = new TreeMap<>(); map.put("orderNo", orderNo); map.put("userNo", userNo); map.put("orderMoney", orderMoney); + map.put("pKey", pKey); boolean valid = verifySign(map, flag); if (!valid) {