diff --git a/src/main/java/com/jmfy/controller/RechargeController.java b/src/main/java/com/jmfy/controller/RechargeController.java index c80c3bd..e660583 100644 --- a/src/main/java/com/jmfy/controller/RechargeController.java +++ b/src/main/java/com/jmfy/controller/RechargeController.java @@ -1,5 +1,9 @@ package com.jmfy.controller; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.reflect.TypeToken; import com.jmfy.dto.*; import com.jmfy.thrift.idl.RPCRequestIFace; import com.jmfy.thrift.idl.Result; @@ -8,41 +12,47 @@ import com.jmfy.thrift.pool.ServiceKey; import com.jmfy.util.JsonUtil; import com.jmfy.util.KTSDKConstans; 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.RequestBody; 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.Date; -import java.util.HashMap; +import java.util.*; + @RestController public class RechargeController { @Resource private CUserDao cuserDao; private static final Logger LOGGER = LoggerFactory.getLogger(RechargeController.class); + @RequestMapping(value = "/callback") - public String callback(HttpServletRequest request) throws Exception { - HashMap parameterMap = JsonUtil.getInstence().getParameterMap(request); - String orderId = parameterMap.get("orderId"); - String userId = parameterMap.get("userId"); - String productID = parameterMap.get("productID"); - int amount = Integer.parseInt(parameterMap.get("amount")); - String orderTime = parameterMap.get("orderTime"); - String sign = parameterMap.get("sign"); - String roleUid = parameterMap.get("roleUid"); - String sig = MD5Util.encrypByMd5(orderId+userId+productID+amount+orderTime+roleUid+ KTSDKConstans.appkey); + public String callback(@RequestBody RechargeRequestBean rechargeRequestBean) throws Exception { + RechargeRequestBean.DataBean data = rechargeRequestBean.getData(); + if(data == null){ + ResultVo resultVo = new ResultVo(8, "data is null"); + return JsonUtil.getInstence().getGson().toJson(resultVo); + } + String orderId =data.getOrder_id(); + String userId = data.getUid(); + String productID = data.getProductID(); + int orderTime =data.getOrderTime(); + String serverID = data.getServerID(); + String sign = data.getSign(); + String sig = getMySign(rechargeRequestBean); if (!sig.equals(sign)){ - LOGGER.info("callback==>roleUid={},sin derify fail ",roleUid); + LOGGER.info("callback==>roleUid={},sin derify fail ",userId); ResultVo resultVo = new ResultVo(9, "sign fail"); return JsonUtil.getInstence().getGson().toJson(resultVo); } - CUserInfo cUserInfo = cuserDao.findUserInfo(Integer.parseInt(roleUid)); + CUserInfo cUserInfo = cuserDao.findUserByOpenIdAndUidInfo(userId,serverID); if(cUserInfo == null || !userId.equals(cUserInfo.getOpenId()) ){ ResultVo resultVo = new ResultVo(10, "该用户无此角色"); return JsonUtil.getInstence().getGson().toJson(resultVo); @@ -61,7 +71,6 @@ public class RechargeController { cPayOrder.setServerId(cUserInfo.getServerid()); cPayOrder.setDelivery_time(date); cPayOrder.setUserId(userId); - cPayOrder.setAmount(amount); Result result = null; String userAddress = cuserDao.findUserAddress(cUserInfo.getId()); if (userAddress != null) { @@ -75,7 +84,7 @@ public class RechargeController { LOGGER.info("serviceKey : " + serviceKey); try { rPCClient = ClientAdapterPo.getClientAdapterPo(serviceKey); - result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(),Integer.parseInt(productID),userId, orderId,Long.parseLong(orderTime),amount); + result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(),Integer.parseInt(productID),userId, orderId,orderTime,0); } catch (Exception e) { LOGGER.info("callback=>",e); }finally { @@ -99,27 +108,45 @@ public class RechargeController { return JsonUtil.getInstence().getGson().toJson(resultVo); } - public static void main(String[] args) { - String orderId = "-1610530820"; - String userId ="123151331.sujie"; - String productID = "2"; - int amount = 30; - String orderTime = "1562142276"; - String roleUid ="20000056"; - String sig = MD5Util.encrypByMd5(orderId+userId+productID+userId+amount+orderTime+roleUid+ KTSDKConstans.appkey); - System.out.println(sig); - System.out.println(sig); - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("orderId=").append(orderId).append("&"); - stringBuilder.append("userId=").append(userId).append("&"); - stringBuilder.append("productID=").append(productID).append("&"); - stringBuilder.append("amount=").append(amount).append("&"); - stringBuilder.append("orderTime=").append(orderTime).append("&"); - stringBuilder.append("roleUid=").append(roleUid).append("&"); - stringBuilder.append("sign=").append(sig); + private static String getMySign( RechargeRequestBean rechargeRequestBean ) throws IllegalAccessException { + StringBuilder stringBuilder = new StringBuilder(); + TreeMap tempMap = new TreeMap<>(new Comparator() { + @Override + public int compare(String o1, String o2) { + return o1.compareTo(o2); + } + }); + RechargeRequestBean.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) + KTSDKConstans.appsecret; + System.out.println(plain); + return MD5Util.encrypByMd5(plain); - System.out.println(stringBuilder); + } + + public static void main(String[] args) throws IllegalAccessException { + Gson gson = new Gson(); + String s = "{\"state\":1,\"data\":{\"order_id\":\"20190903150413100505555232904\",\"uid\":\"df63a9b82ebc6d886590fb23caa01f1b\",\"pchannel\":\"sy37\",\"appid\":\"129213\",\"serverID\":\"10153\",\"currency\":\"RMB\",\"ext\":\"MTQwMzgzODM2OC5zeTM3XzFfMV8yMDAwMDU5OV8xMDA4MV%2FmmIbku5HkuYvlt4U%3D\",\"productID\":\"1\",\"orderTime\":1567582220,\"pchannelOrderID\":\"B8894B116191F181226A47A27F643D2B\",\"sign\":\"724b49ed94634297a1d9c4f0c0112d8d\"}}"; + RechargeRequestBean rechargeRequestBean = gson.fromJson(s, RechargeRequestBean.class); + String mySign = getMySign(rechargeRequestBean); + System.out.println(mySign); } diff --git a/src/main/java/com/jmfy/controller/RechargeRequestBean.java b/src/main/java/com/jmfy/controller/RechargeRequestBean.java new file mode 100644 index 0000000..0d8cd3b --- /dev/null +++ b/src/main/java/com/jmfy/controller/RechargeRequestBean.java @@ -0,0 +1,145 @@ +package com.jmfy.controller; + +public class RechargeRequestBean { + + + /** + * state : 1 + * data : {"order_id":"20190903150413100505555232904","uid":"1403838368.sy37","pchannel":"sy37","appid":"129213","serverID":"10081","currency":"RMB","ext":"MTQwMzgzODM2OC5zeTM3XzFfMV8yMDAwMDU5OV8xMDA4MV%2FmmIbku5HkuYvlt4U%3D","productID":"1","orderTime":1567575907,"pchannelOrderID":"B8894B116191F181226A47A27F643D2B","sign":"6f0dacbc9dc8c291d22b47df7018d5db"} + */ + + 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 { + /** + * order_id : 20190903150413100505555232904 + * uid : 1403838368.sy37 + * pchannel : sy37 + * appid : 129213 + * serverID : 10081 + * currency : RMB + * ext : MTQwMzgzODM2OC5zeTM3XzFfMV8yMDAwMDU5OV8xMDA4MV%2FmmIbku5HkuYvlt4U%3D + * productID : 1 + * orderTime : 1567575907 + * pchannelOrderID : B8894B116191F181226A47A27F643D2B + * sign : 6f0dacbc9dc8c291d22b47df7018d5db + */ + + private String order_id; + private String uid; + private String pchannel; + private String appid; + private String serverID; + private String currency; + private String ext; + private String productID; + private int orderTime; + private String pchannelOrderID; + private String sign; + + public String getOrder_id() { + return order_id; + } + + public void setOrder_id(String order_id) { + this.order_id = order_id; + } + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } + + public String getPchannel() { + return pchannel; + } + + public void setPchannel(String pchannel) { + this.pchannel = pchannel; + } + + public String getAppid() { + return appid; + } + + public void setAppid(String appid) { + this.appid = appid; + } + + public String getServerID() { + return serverID; + } + + public void setServerID(String serverID) { + this.serverID = serverID; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public String getExt() { + return ext; + } + + public void setExt(String ext) { + this.ext = ext; + } + + public String getProductID() { + return productID; + } + + public void setProductID(String productID) { + this.productID = productID; + } + + public int getOrderTime() { + return orderTime; + } + + public void setOrderTime(int orderTime) { + this.orderTime = orderTime; + } + + public String getPchannelOrderID() { + return pchannelOrderID; + } + + public void setPchannelOrderID(String pchannelOrderID) { + this.pchannelOrderID = pchannelOrderID; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + } +} diff --git a/src/main/java/com/jmfy/dto/CUserDao.java b/src/main/java/com/jmfy/dto/CUserDao.java index 3e722c1..d0ebd84 100644 --- a/src/main/java/com/jmfy/dto/CUserDao.java +++ b/src/main/java/com/jmfy/dto/CUserDao.java @@ -3,6 +3,7 @@ package com.jmfy.dto; public interface CUserDao { CUserInfo findUserInfo(int uid) throws Exception; + CUserInfo findUserByOpenIdAndUidInfo(String openId,String serverId) throws Exception; String findUserAddress(int uid); diff --git a/src/main/java/com/jmfy/dto/impl/CUserDaoImpl.java b/src/main/java/com/jmfy/dto/impl/CUserDaoImpl.java index 45e0b0f..88be4a5 100644 --- a/src/main/java/com/jmfy/dto/impl/CUserDaoImpl.java +++ b/src/main/java/com/jmfy/dto/impl/CUserDaoImpl.java @@ -6,7 +6,9 @@ import com.jmfy.dto.CUserInfo; import com.jmfy.redisProperties.RedisUserKey; import com.jmfy.util.Connect; import com.jmfy.util.RedisUtil; +import com.mongodb.BasicDBObject; import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.BasicQuery; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Component; @@ -26,12 +28,17 @@ public class CUserDaoImpl implements CUserDao { @Override public CUserInfo findUserInfo(int uid) throws Exception { - Query query = new Query(); - Criteria cr = new Criteria(); MongoTemplate mongoTemplate = connect.getMongoTemplete("jl_core"); return mongoTemplate.findById(uid, CUserInfo.class); } + @Override + public CUserInfo findUserByOpenIdAndUidInfo(String openId, String serverId) throws Exception { + MongoTemplate mongoTemplate = connect.getMongoTemplete("jl_core"); + BasicQuery basicQuery = new BasicQuery(new BasicDBObject("openId", openId).append("serverId", serverId)); + return mongoTemplate.findOne(basicQuery,CUserInfo.class); + } + @Override public String findUserAddress(int uid) { return RedisUtil.getInstence().getObject(RedisUserKey.USER_LOGIN_URL, Integer.toString(uid), String.class, -1); diff --git a/src/main/java/com/jmfy/util/MyStringRedisTemplate.java b/src/main/java/com/jmfy/util/MyStringRedisTemplate.java index 6e7cdb1..4630ed3 100644 --- a/src/main/java/com/jmfy/util/MyStringRedisTemplate.java +++ b/src/main/java/com/jmfy/util/MyStringRedisTemplate.java @@ -79,7 +79,7 @@ public class MyStringRedisTemplate { } //设置密码 connectionFactory.setPassword(redisProperties.getPassword()); - // connectionFactory.setDatabase(redisProperties.getDatabase()); + connectionFactory.setDatabase(redisProperties.getDatabase()); //初始化connectionFactory connectionFactory.afterPropertiesSet(); diff --git a/src/main/java/com/jmfy/util/StringUtils.java b/src/main/java/com/jmfy/util/StringUtils.java new file mode 100644 index 0000000..ec0dc28 --- /dev/null +++ b/src/main/java/com/jmfy/util/StringUtils.java @@ -0,0 +1,11 @@ +package com.jmfy.util; + +public class StringUtils { + + public static boolean checkIsEmpty(String source){ + if(source == null || "".equals(source)){ + return true; + } + return false; + } +}