diff --git a/src/main/java/com/jmfy/controller/MHTHwRechargeController.java b/src/main/java/com/jmfy/controller/MHTHwRechargeController.java new file mode 100644 index 0000000..4ec2249 --- /dev/null +++ b/src/main/java/com/jmfy/controller/MHTHwRechargeController.java @@ -0,0 +1,209 @@ +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.KTSDKConstans; +import com.jmfy.util.MD5Util; +import com.jmfy.util.MHTSDKConstans; +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.io.UnsupportedEncodingException; +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 MHTHwRechargeController { + @Resource + private CUserDao cuserDao; + private static final Logger LOGGER = LoggerFactory.getLogger(MHTHwRechargeController.class); + private static Gson gson = new Gson(); + + @RequestMapping(value = "/MHTHwcallback") + public String MHTcallback(HttpServletRequest request) throws Exception { + return process(request,""); + } + + @RequestMapping(value = "/MHTHwIosCallback") + public String MHTHwIosCallback(HttpServletRequest request) throws Exception { + return process(request,"6d415f7ae72649b5b9a248677b080034"); + } + + @RequestMapping(value = "/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"; + } + + MHTRechargeRequestBean rechargeRequestBean = getData(parameterMap); + + MHTRechargeRequestBean.DataBean data = rechargeRequestBean.getData(); + if (data == null) { + LOGGER.info("data is null"); + return "FAIL"; + } + + String response = "SUCCESS"; + try { + String consumerid = data.getConsumerid(); + String sign = data.getSign(); + + String sig = getMySign(rechargeRequestBean, 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 MHTRechargeRequestBean getData(HashMap parameterMap) { + String source = parameterMap.keySet().iterator().next(); + source = source.replaceAll(" ", "+"); + LOGGER.info(source); + MHTRechargeRequestBean rechargeRequestBean = gson.fromJson(source, MHTRechargeRequestBean.class); + return rechargeRequestBean; + } + + + private String insertOrder(MHTRechargeRequestBean.DataBean data) { + try { + String consumerid = data.getConsumerid(); + String consumerName = data.getConsumerName(); + String orderNo = data.getOrderNo(); + + CUserInfo cUserInfo = cuserDao.findUserInfo(Integer.valueOf(consumerid)); + if (cUserInfo == null) { + LOGGER.info("该用户无此角色" + consumerid); + 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(consumerid); + 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(), Integer.parseInt(consumerName), consumerid, 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={} ", consumerid); + 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(MHTRechargeRequestBean 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); + } + }); + + MHTRechargeRequestBean.DataBean data = rechargeRequestBean.getData(); + Class aClass = rechargeRequestBean.getData().getClass(); + Field[] fields = aClass.getDeclaredFields(); + for (Field field : fields) { + field.setAccessible(true); + if ("sign".equals(field.getName())) { + continue; + } + tempMap.put(field.getName(), field.get(data).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/MHTRechargeRequestBean.java b/src/main/java/com/jmfy/controller/MHTRechargeRequestBean.java index 07aa8a8..fb8685a 100644 --- a/src/main/java/com/jmfy/controller/MHTRechargeRequestBean.java +++ b/src/main/java/com/jmfy/controller/MHTRechargeRequestBean.java @@ -47,7 +47,6 @@ public class MHTRechargeRequestBean { private String consumerName;//Cp自定义信息 private String orderNo;//平台订单编号 private String orderDetail;//订单详情 - private int gameCurrency = 0;//获取的金币 没有用传0 private String mhtOrderAmt;//分 private String time;//平台支付时间 private String sign;