add parm check

master
wangyuan 2019-09-04 15:48:03 +08:00
parent 40f3b6067d
commit d2a22d0a3a
6 changed files with 230 additions and 39 deletions

View File

@ -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<String, String> 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);
private static String getMySign( RechargeRequestBean rechargeRequestBean ) throws IllegalAccessException {
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);
TreeMap<String, String> tempMap = new TreeMap<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
RechargeRequestBean.DataBean data = rechargeRequestBean.getData();
Class<? extends RechargeRequestBean.DataBean> 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<String,String> 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);
}

View File

@ -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;
}
}
}

View File

@ -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);

View File

@ -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);

View File

@ -79,7 +79,7 @@ public class MyStringRedisTemplate {
}
//设置密码
connectionFactory.setPassword(redisProperties.getPassword());
// connectionFactory.setDatabase(redisProperties.getDatabase());
connectionFactory.setDatabase(redisProperties.getDatabase());
//初始化connectionFactory
connectionFactory.afterPropertiesSet();

View File

@ -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;
}
}