diff --git a/src/main/java/com/jmfy/controller/MHTRechargeController.java b/src/main/java/com/jmfy/controller/MHTRechargeController.java new file mode 100644 index 0000000..7a709f4 --- /dev/null +++ b/src/main/java/com/jmfy/controller/MHTRechargeController.java @@ -0,0 +1,170 @@ +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.net.URLDecoder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * consumerId 游戏用户唯一标识 + * consumerName Cp自定义信息 + * orderNo 平台订单编号 + * orderDetail 订单详情 + * mhtOrderAmt 充值金额(分) + * time 平台支付时间 + * sign 签名 + */ +@RestController +public class MHTRechargeController { + @Resource + private CUserDao cuserDao; + private static final Logger LOGGER = LoggerFactory.getLogger(MHTRechargeController.class); + private static Gson gson = new Gson(); + + @RequestMapping(value = "/MHTcallback") + public String MHTcallback( HttpServletRequest request) throws Exception { + HashMap parameterMap = JsonUtil.getInstence().getParameterMap(request); + if(parameterMap.isEmpty()) { + LOGGER.info( "data is null"); + return "FAIL"; + } + String source = parameterMap.keySet().iterator().next(); + source = source.replaceAll(" ", "+"); + LOGGER.info(source); + MHTRechargeRequestBean rechargeRequestBean = gson.fromJson(source, MHTRechargeRequestBean.class); + + MHTRechargeRequestBean.DataBean data = rechargeRequestBean.getData(); + if(data == null){ + LOGGER.info( "data is null"); + return "FAIL"; + } + + String consumerid = data.getConsumerid(); + String consumerName = data.getConsumerName(); + String orderNo = data.getOrderNo(); + String sign = data.getSign(); + String sig = getMySign(rechargeRequestBean); + + String goodID; + if(consumerName.isEmpty()){ + LOGGER.info("callback==>roleUid={},sin derify fail,mine sign={} ",consumerid,sig); + return "FAIL"; + } + String[] split1 = consumerName.split("#"); + goodID = split1[0]; + if(null==goodID||goodID.isEmpty()){ + LOGGER.info("callback==>roleUid={},sin derify fail,mine sign={} ,consumerName={}",consumerid,sig,consumerName); + } + if (!sig.equals(sign)){ + LOGGER.info("callback==>roleUid={},sin derify fail,mine sign={} ",consumerid,sig); + return "FAIL"; + } + + CUserInfo cUserInfo = cuserDao.findUserInfo(Integer.valueOf(consumerid)); + if(cUserInfo == null){ + LOGGER.info( "该用户无此角色"+consumerid); + return "FAIL"; + } + + CPayOrder cPayOrder = cuserDao.getCpayOrderByOrderId(orderNo); + String response = "SUCCESS"; + 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(goodID),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); + response = "FAIL"; + } + if (result != null && result.getResultCode() == 1) { + LOGGER.info(" callback==>RPC result : ResultCode : " + result.getResultCode() + "; ResultMsg : " + result.getResultMsg()); + cuserDao.addCpayOrder(cPayOrder); + } else { + response = "FAIL"; + } + } + return response; + } + + + private static String getMySign( MHTRechargeRequestBean rechargeRequestBean ) throws IllegalAccessException { + StringBuilder stringBuilder = new StringBuilder(); + + 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; + } + String value = field.get(data).toString(); + if(StringUtils.isEmpty(value)){ + continue; + } + String key =field.getName(); + stringBuilder.append(key).append("=").append(value).append("&"); + } + String plain = stringBuilder.substring(0, stringBuilder.length() - 1) + MHTSDKConstans.appid; + return MD5Util.encrypByMd5(plain); + + } + + public static void main(String[] args) throws IllegalAccessException, UnsupportedEncodingException { + + } +} diff --git a/src/main/java/com/jmfy/controller/MHTRechargeRequestBean.java b/src/main/java/com/jmfy/controller/MHTRechargeRequestBean.java new file mode 100644 index 0000000..07aa8a8 --- /dev/null +++ b/src/main/java/com/jmfy/controller/MHTRechargeRequestBean.java @@ -0,0 +1,111 @@ +package com.jmfy.controller; + +public class MHTRechargeRequestBean { + + + private int state; + private DataBean data; + + public int getState() { + return state; + } + + public void setState(int state) { + this.state = state; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public static class DataBean { + /** + * + 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 consumerid;//游戏用户唯一标识 + private String consumerName;//Cp自定义信息 + private String orderNo;//平台订单编号 + private String orderDetail;//订单详情 + private int gameCurrency = 0;//获取的金币 没有用传0 + private String mhtOrderAmt;//分 + private String time;//平台支付时间 + private String sign; + + public String getConsumerid() { + return consumerid; + } + + public void setConsumerid(String consumerid) { + this.consumerid = consumerid; + } + + public String getConsumerName() { + return consumerName; + } + + public void setConsumerName(String consumerName) { + this.consumerName = consumerName; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getOrderDetail() { + return orderDetail; + } + + public void setOrderDetail(String orderDetail) { + this.orderDetail = orderDetail; + } + + public String getMhtOrderAmt() { + return mhtOrderAmt; + } + + public void setMhtOrderAmt(String mhtOrderAmt) { + this.mhtOrderAmt = mhtOrderAmt; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + } +} diff --git a/src/main/java/com/jmfy/util/MHTSDKConstans.java b/src/main/java/com/jmfy/util/MHTSDKConstans.java new file mode 100644 index 0000000..f095251 --- /dev/null +++ b/src/main/java/com/jmfy/util/MHTSDKConstans.java @@ -0,0 +1,24 @@ +package com.jmfy.util; + +public class MHTSDKConstans { + public static String appid = "e4ecefecc8034cffaa69e81b2c044f2c"; + public static String rhappid = "7bb5f604306ccd93fc19f05d3a374e84"; + public static String back = "http://kwsdk.17173g.cn/platformPay/MHT/callBack"; + + // public static String androidVerify = "http://sujie.passport.ktsdk.com/user/verifyAccount"; +// public static String iosVerify = "http://sujie.passport.ktsdk.com/userios/verifyAccount"; + public static String loginVerify = " http://kwsdk.17173g.cn/cp/checkLogin"; + public static String secretKey = "5b980134872a8afa993f8a3b35a8efbd"; + + + + public static String channelid = "MHT"; + + public static void main(String[] args) { + // boolean equals = "http://sujie.passport.ktsdk.com/user/verifyAccount".equals(androidVerify); + // System.out.println(equals); + } + +} + +