diff --git a/src/main/java/com/jmfy/controller/MHTHwNetRechargeController.java b/src/main/java/com/jmfy/controller/MHTHwNetRechargeController.java new file mode 100644 index 0000000..42246c6 --- /dev/null +++ b/src/main/java/com/jmfy/controller/MHTHwNetRechargeController.java @@ -0,0 +1,210 @@ +package com.jmfy.controller; + +import com.google.gson.Gson; +import com.jmfy.dto.CPayOrder; +import com.jmfy.dto.CUserDao; +import com.jmfy.dto.CUserInfo; +import com.jmfy.thrift.idl.RPCRequestIFace; +import com.jmfy.thrift.idl.Result; +import com.jmfy.thrift.pool.ClientAdapterPo; +import com.jmfy.thrift.pool.ServiceKey; +import com.jmfy.util.JsonUtil; +import com.jmfy.util.MD5Util; +import org.apache.commons.lang.StringUtils; +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.lang.reflect.Field; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * consumerId 游戏用户唯一标识 + * consumerName Cp自定义信息 + * orderNo 平台订单编号 + * orderDetail 订单详情 + * mhtOrderAmt 充值金额(分) + * time 平台支付时间 + * sign 签名 + */ +@RestController +public class MHTHwNetRechargeController { + @Resource + private CUserDao cuserDao; + private static final Logger LOGGER = LoggerFactory.getLogger(MHTHwNetRechargeController.class); + private static Gson gson = new Gson(); + + + @RequestMapping(value = "/Web/MHTHwcallback") + public String MHTcallback(HttpServletRequest request) throws Exception { + return process(request,"6d415f7ae72649b5b9a248677b080034"); + } + + @RequestMapping(value = "/Web/MHTHwIosCallback") + public String MHTHwIosCallback(HttpServletRequest request) throws Exception { + return process(request,"c130d086f10a275de2440f6e2a28912a"); + } + + @RequestMapping(value = "/Web/MHTHwTestCallback") + public String MHTHwIestCallback(HttpServletRequest request) throws Exception { + return process(request,"02738d4f8aad8f4860c3916be35dc89b"); + } + + + private String process(HttpServletRequest request,String appsecret) throws Exception{ + HashMap parameterMap = JsonUtil.getInstence().getParameterMap2(request); + if (parameterMap.isEmpty()) { + LOGGER.info("data is null"); + return "FAIL"; + } + + MHTNetRechargeRequestBean data = getData(parameterMap); + + if (data == null) { + LOGGER.info("data is null"); + return "FAIL"; + } + + String response = "SUCCESS"; + try { + String consumerid = data.getUser_id(); + String sign = data.getSign(); + + String sig = getMySign(data, appsecret); + + if (!sig.equals(sign)) { + LOGGER.info("callback==>roleUid={},sin derify fail,mine sign={} ", consumerid, sig); + return "sign fail"; + } + + response = insertOrder(data); + + } catch (Exception e) { + e.printStackTrace(); + LOGGER.info("callback==>err " + e.toString()); + response = "FAIL"; + } + + return response; + } + + + private MHTNetRechargeRequestBean getData(HashMap parameterMap) { + String source = parameterMap.keySet().iterator().next(); + source = source.replaceAll(" ", "+"); + LOGGER.info(source); + MHTNetRechargeRequestBean rechargeRequestBean = gson.fromJson(source, MHTNetRechargeRequestBean.class); + return rechargeRequestBean; + } + + + private String insertOrder(MHTNetRechargeRequestBean data) { + try { + String user_id = data.getPlayer_id(); + + String consumerName = data.getItem_id(); + + String orderNo = data.getOrder_id(); + + CUserInfo cUserInfo = cuserDao.findUserInfo(Integer.valueOf(user_id)); + if (cUserInfo == null) { + LOGGER.info("该用户无此角色" + user_id); + return "FAIL"; + } + + CPayOrder cPayOrder = cuserDao.getCpayOrderByOrderId(orderNo); + + if (cPayOrder != null) { + LOGGER.info("callback==>creditId={},uId={} orderId is exit!!!", cUserInfo.getId(), cUserInfo.getOpenId()); + return "FAIL"; + } else { + DateFormat dateTimeformat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + String date = dateTimeformat.format(new Date()); + cPayOrder = new CPayOrder(); + cPayOrder.setOrderId(orderNo); + cPayOrder.setServerId(cUserInfo.getServerid()); + cPayOrder.setDelivery_time(date); + cPayOrder.setUserId(user_id); + + + Result result = null; + String userAddress = cuserDao.findUserAddress(cUserInfo.getId()); + if (userAddress != null) { + LOGGER.info("callback==>userAddress={} ", userAddress); + String[] split = userAddress.split(":"); + String ip = split[0]; + String port = split[1]; + LOGGER.info("RPC address --> IP : " + ip + "; PORT : " + port); + ClientAdapterPo rPCClient = null; + String serviceKey = JsonUtil.getServiceKey(ServiceKey.RPCCore, ip, port); + LOGGER.info("serviceKey : " + serviceKey); + try { + rPCClient = ClientAdapterPo.getClientAdapterPo(serviceKey); + result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(), consumerName, data.getUser_id(), orderNo, 0, 0); + } catch (Exception e) { + LOGGER.info("callback=>", e); + } finally { + if (rPCClient != null) { + rPCClient.returnObject(serviceKey); + } else { + LOGGER.info("callback=> rPCClient is null "); + } + } + } else { + LOGGER.info("not get the user url,the openID={} ", user_id); + return "FAIL"; + } + if (result != null && result.getResultCode() == 1) { + LOGGER.info(" callback==>RPC result : ResultCode : " + result.getResultCode() + "; ResultMsg : " + result.getResultMsg()); + cuserDao.addCpayOrder(cPayOrder); + } else { + return "FAIL"; + } + } + + } catch (Exception e) { + e.printStackTrace(); + LOGGER.info("callback==>err " + e.toString()); + return "FAIL"; + } + return "SUCCESS"; + } + + private static String getMySign(MHTNetRechargeRequestBean rechargeRequestBean,String appsecret) throws IllegalAccessException { + StringBuilder stringBuilder = new StringBuilder(); + TreeMap tempMap = new TreeMap<>(new Comparator() { + @Override + public int compare(String o1, String o2) { + return o1.compareTo(o2); + } + }); + + Class aClass = rechargeRequestBean.getClass(); + Field[] fields = aClass.getDeclaredFields(); + for (Field field : fields) { + field.setAccessible(true); + if ("sign".equals(field.getName())) { + continue; + } + tempMap.put(field.getName(), field.get(rechargeRequestBean).toString()); + } + for (Map.Entry item : tempMap.entrySet()) { + String value = item.getValue(); + if (StringUtils.isEmpty(value)) { + continue; + } + String key = item.getKey(); + stringBuilder.append(key).append("=").append(value).append("&"); + } + String plain = stringBuilder.substring(0, stringBuilder.length() - 1) +appsecret; + System.out.println(plain); + return MD5Util.encrypByMd5(plain); + } + + +} diff --git a/src/main/java/com/jmfy/controller/MHTHwRechargeController.java b/src/main/java/com/jmfy/controller/MHTHwRechargeController.java index 4ec2249..19fb1f8 100644 --- a/src/main/java/com/jmfy/controller/MHTHwRechargeController.java +++ b/src/main/java/com/jmfy/controller/MHTHwRechargeController.java @@ -44,12 +44,12 @@ public class MHTHwRechargeController { @RequestMapping(value = "/MHTHwcallback") public String MHTcallback(HttpServletRequest request) throws Exception { - return process(request,""); + return process(request,"6d415f7ae72649b5b9a248677b080034"); } @RequestMapping(value = "/MHTHwIosCallback") public String MHTHwIosCallback(HttpServletRequest request) throws Exception { - return process(request,"6d415f7ae72649b5b9a248677b080034"); + return process(request,"c130d086f10a275de2440f6e2a28912a"); } @RequestMapping(value = "/MHTHwTestCallback") @@ -57,6 +57,8 @@ public class MHTHwRechargeController { return process(request,"02738d4f8aad8f4860c3916be35dc89b"); } + + private String process(HttpServletRequest request,String appsecret) throws Exception{ HashMap parameterMap = JsonUtil.getInstence().getParameterMap2(request); if (parameterMap.isEmpty()) { @@ -64,9 +66,9 @@ public class MHTHwRechargeController { return "FAIL"; } - MHTRechargeRequestBean rechargeRequestBean = getData(parameterMap); + MHTRechargeRequestBean.DataBean rechargeRequestBean = getData(parameterMap); - MHTRechargeRequestBean.DataBean data = rechargeRequestBean.getData(); + MHTRechargeRequestBean.DataBean data = rechargeRequestBean; if (data == null) { LOGGER.info("data is null"); return "FAIL"; @@ -77,7 +79,7 @@ public class MHTHwRechargeController { String consumerid = data.getConsumerid(); String sign = data.getSign(); - String sig = getMySign(rechargeRequestBean, appsecret); + String sig = getMySign(data, appsecret); if (!sig.equals(sign)) { LOGGER.info("callback==>roleUid={},sin derify fail,mine sign={} ", consumerid, sig); @@ -96,11 +98,11 @@ public class MHTHwRechargeController { } - private MHTRechargeRequestBean getData(HashMap parameterMap) { + private MHTRechargeRequestBean.DataBean getData(HashMap parameterMap) { String source = parameterMap.keySet().iterator().next(); source = source.replaceAll(" ", "+"); LOGGER.info(source); - MHTRechargeRequestBean rechargeRequestBean = gson.fromJson(source, MHTRechargeRequestBean.class); + MHTRechargeRequestBean.DataBean rechargeRequestBean = gson.fromJson(source, MHTRechargeRequestBean.DataBean.class); return rechargeRequestBean; } @@ -143,7 +145,7 @@ public class MHTHwRechargeController { LOGGER.info("serviceKey : " + serviceKey); try { rPCClient = ClientAdapterPo.getClientAdapterPo(serviceKey); - result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(), Integer.parseInt(consumerName), consumerid, orderNo, 0, 0); + result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(), consumerName, consumerid, orderNo, 0, 0); } catch (Exception e) { LOGGER.info("callback=>", e); } finally { @@ -173,7 +175,7 @@ public class MHTHwRechargeController { return "SUCCESS"; } - private static String getMySign(MHTRechargeRequestBean rechargeRequestBean,String appsecret) throws IllegalAccessException { + private static String getMySign(MHTRechargeRequestBean.DataBean rechargeRequestBean,String appsecret) throws IllegalAccessException { StringBuilder stringBuilder = new StringBuilder(); TreeMap tempMap = new TreeMap<>(new Comparator() { @Override @@ -182,8 +184,8 @@ public class MHTHwRechargeController { } }); - MHTRechargeRequestBean.DataBean data = rechargeRequestBean.getData(); - Class aClass = rechargeRequestBean.getData().getClass(); + MHTRechargeRequestBean.DataBean data = rechargeRequestBean; + Class aClass = rechargeRequestBean.getClass(); Field[] fields = aClass.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); diff --git a/src/main/java/com/jmfy/controller/MHTNetRechargeRequestBean.java b/src/main/java/com/jmfy/controller/MHTNetRechargeRequestBean.java new file mode 100644 index 0000000..0f42098 --- /dev/null +++ b/src/main/java/com/jmfy/controller/MHTNetRechargeRequestBean.java @@ -0,0 +1,128 @@ +package com.jmfy.controller; + +public class MHTNetRechargeRequestBean { + + + + /** + * + Sign=MD5(url+MD5(secretKey)) + + 如果secretKey=”9a9abfc62d437a47196744f7fe57bc4b”, + MD5后为"0d77c0a7d092a3a2db5b8a5013ae0f22" + 例如支付同步参数: + + + consumerid=11111111 + consumername=2222222 + orderNo=20171223154943944475091217940480 + orderDetail=3333333 + gameCurrency=0 + mhtOrderAmt=100 + time=20171223164800 + sign=2104de6bb884f7e972242c51ca45d703 + + + + */ + private String app_id;//应用id + + private Long ts;//13位数时间戳(单位:毫秒) + + private Long server_id;//13位数时间戳(单位:毫秒) + + private String order_id;//平台订单编号 + + private String user_id;//游戏用户唯一标识 + + private String player_id;//CP游戏角色编号 + + private String item_id;//CP游戏角色编号 + + private String currency_code;//CP游戏角色编号 + + private double currency_value;//货币值 + + private String sign; + + + public String getApp_id() { + return app_id; + } + + public void setApp_id(String app_id) { + this.app_id = app_id; + } + + public Long getTs() { + return ts; + } + + public void setTs(Long ts) { + this.ts = ts; + } + + public Long getServer_id() { + return server_id; + } + + public void setServer_id(Long server_id) { + this.server_id = server_id; + } + + public String getOrder_id() { + return order_id; + } + + public void setOrder_id(String order_id) { + this.order_id = order_id; + } + + public String getUser_id() { + return user_id; + } + + public void setUser_id(String user_id) { + this.user_id = user_id; + } + + public String getPlayer_id() { + return player_id; + } + + public void setPlayer_id(String player_id) { + this.player_id = player_id; + } + + public String getItem_id() { + return item_id; + } + + public void setItem_id(String item_id) { + this.item_id = item_id; + } + + public String getCurrency_code() { + return currency_code; + } + + public void setCurrency_code(String currency_code) { + this.currency_code = currency_code; + } + + public double getCurrency_value() { + return currency_value; + } + + public void setCurrency_value(double currency_value) { + this.currency_value = currency_value; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } +} diff --git a/src/main/java/com/jmfy/controller/MHTRechargeController.java b/src/main/java/com/jmfy/controller/MHTRechargeController.java index 517c3a9..487fa9e 100644 --- a/src/main/java/com/jmfy/controller/MHTRechargeController.java +++ b/src/main/java/com/jmfy/controller/MHTRechargeController.java @@ -150,7 +150,7 @@ public class MHTRechargeController { LOGGER.info("serviceKey : " + serviceKey); try { rPCClient = ClientAdapterPo.getClientAdapterPo(serviceKey); - result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(),Integer.parseInt(goodID),uid, orderNo,0,0); + result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(),goodID,uid, orderNo,0,0); } catch (Exception e) { LOGGER.info("callback=>",e); }finally { diff --git a/src/main/java/com/jmfy/controller/RechargeController.java b/src/main/java/com/jmfy/controller/RechargeController.java index 9d15be9..d65c01a 100644 --- a/src/main/java/com/jmfy/controller/RechargeController.java +++ b/src/main/java/com/jmfy/controller/RechargeController.java @@ -96,7 +96,7 @@ public class RechargeController { LOGGER.info("serviceKey : " + serviceKey); try { rPCClient = ClientAdapterPo.getClientAdapterPo(serviceKey); - result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(),Integer.parseInt(productID),userId, orderId,orderTime,0); + result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(),productID,userId, orderId,orderTime,0); } catch (Exception e) { LOGGER.info("callback=>",e); }finally { diff --git a/src/main/thrift/idl/buildIdl.bat b/src/main/thrift/idl/buildIdl.bat index dc86026..3e9825f 100644 --- a/src/main/thrift/idl/buildIdl.bat +++ b/src/main/thrift/idl/buildIdl.bat @@ -1,12 +1,15 @@ echo off echo "======first del java src files======" -del E:\sdkdel\delivery-server\src\main\thrift\idl\gen-java\com\jmfy\thrift\idl\*.java +del D:\jielin\delivery-server\src\main\thrift\idl\gen-java\com\jmfy\thrift\idl\*.java -del E:\sdkdel\delivery-server\src\main\java\com\jmfy\thrift\idl\*.java +del D:\jielin\delivery-server\src\main\java\com\jmfy\thrift\idl\*.java echo "======gen java src files======" +for %%i in (".\*.bat") do echo %%i +echo "======gen java src files======" + for %%i in (".\*.thrift") do thrift-0.9.2 --gen java %%i echo "=======begin to copy src files======" -copy .\gen-java\com\jmfy\thrift\idl\*.java E:\sdkdel\delivery-server\src\main\java\com\jmfy\thrift\idl /y +copy .\gen-java\com\jmfy\thrift\idl\*.java D:\jielin\delivery-server\src\main\java\com\jmfy\thrift\idl /y echo on pause \ No newline at end of file diff --git a/src/main/thrift/idl/core.thrift b/src/main/thrift/idl/core.thrift index 8da5f9a..38e8a4b 100644 --- a/src/main/thrift/idl/core.thrift +++ b/src/main/thrift/idl/core.thrift @@ -7,5 +7,5 @@ struct Result { } service RPCRequestIFace{ - Result deliveryRecharge(1:i32 uid, 2:i32 goodsId,3: string openId,4: string orderId,5: i64 orderTime, 6:i32 amount); + Result deliveryRecharge(1:i32 uid, 2:string goodsId,3: string openId,4: string orderId,5: i64 orderTime, 6:i32 amount); } \ No newline at end of file