Jim 8 hónapja
szülő
commit
35c4cb2cc2

+ 221 - 0
src/main/java/com/ljsd/channel/Mock737YXSDK.java

@@ -0,0 +1,221 @@
+package com.ljsd.channel;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.ljsd.util.BaseGlobal;
+import com.ljsd.util.TimeUtil;
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBObject;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class Mock737YXSDK {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(Mock737YXSDK.class);
+    private static final String APP_ID="133262a8c19445a6";
+    private static final String LOGIN_KEY="6e46675843d84aed8d5eed8336d9bccb";
+    private static final String PAY_KEY="71c1759cb6b047e68def881d2f91d504";
+    private static final String VERIFY_API_URL="https://sdk.rgqoj.cn/tools/gamefactor.ashx?action=factor_login";
+    private static final CloseableHttpClient httpClient = HttpClients.createDefault();
+    private final static String _COLLECTION_PAY = "pay";
+    private static final Gson GSON = new Gson();
+    public static boolean verifyUser(String uid) {
+        try {
+            Map<String, String> params = new HashMap<>();
+            params.put("app_id",APP_ID);
+            params.put("uid",uid);
+            params.put("timestamp",String.valueOf(TimeUtil.getTimeNow()));
+            params.put("pay_key", PAY_KEY);
+
+            // 构建排序后的查询字符串
+            String sortedQuery = buildSortedQuery(params);
+            LOGGER.info("排序后的查询字符串:{}", sortedQuery);
+            String sign = md5(sortedQuery);
+
+            List<NameValuePair> formParams = new ArrayList<>();
+            formParams.add(new BasicNameValuePair("app_id", APP_ID));       // app_id 参数
+            formParams.add(new BasicNameValuePair("uid", uid));             // uid 参数
+            formParams.add(new BasicNameValuePair("timestamp",  params.get("timestamp"))); // timestamp 参数
+            formParams.add(new BasicNameValuePair("sign", sign));
+            HttpPost httpPost  = new HttpPost(VERIFY_API_URL);
+            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(formParams, StandardCharsets.UTF_8);
+            httpPost.setEntity(formEntity);
+            CloseableHttpResponse response = httpClient.execute(httpPost);
+
+            String responseStr = EntityUtils.toString(response.getEntity(), "UTF-8");
+            JsonObject jsonObject = GSON.fromJson(responseStr, JsonObject.class);
+            int status = jsonObject.get("status").getAsInt();
+            String realname = jsonObject.has("realname") ? jsonObject.get("realname").getAsString() : null;
+            String idcard = jsonObject.has("idcard") ? jsonObject.get("idcard").getAsString() : null;
+            String msg = jsonObject.has("msg") ? jsonObject.get("msg").getAsString() : null;
+            response.close();
+            if (status == 1) {
+                LOGGER.info("验证成功!真实姓名:{},身份证号:{}", realname, idcard);
+                return true;
+            } else {
+                LOGGER.error("验证失败,原因:{}", msg);
+                return false;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            LOGGER.error("737yx 验证异常:", e);
+            return false;
+        }
+
+    }
+
+    public static String md5(String input) throws NoSuchAlgorithmException {
+        MessageDigest md = MessageDigest.getInstance("MD5");
+
+        byte[] hashBytes = md.digest(input.getBytes(StandardCharsets.UTF_8));
+
+        StringBuilder hexString = new StringBuilder();
+        for (byte b : hashBytes) {
+            String hex = Integer.toHexString(0xFF & b);
+            if (hex.length() == 1) {
+                hexString.append('0'); // 补前导零(如 0x0A → "0a")
+            }
+            hexString.append(hex);
+        }
+       return hexString.toString().toUpperCase();
+    }
+
+    public static boolean verifyCallback(Map<String, String> params, String sign) throws NoSuchAlgorithmException {
+        params.put("pay_key", PAY_KEY); // 包含特殊字符
+
+        // 构建排序后的查询字符串
+        String sortedQuery = buildSortedQuery(params);
+        LOGGER.info("排序后的查询字符串:{}", sortedQuery);
+
+        String signCheck = md5(sortedQuery);
+        LOGGER.info("signCheck:{}", signCheck);
+        return signCheck.equals(sign.toLowerCase());
+    }
+
+    public static String buildSortedQuery(Map<String, String> params) {
+        // 1. 分离 pay_key 和其他参数(其他参数需非空)
+        Map<String, String> otherParams = new HashMap<>();
+        String payKeyValue = params.get("pay_key");
+
+        // 过滤其他参数(非 pay_key 且值非空)
+        for (Map.Entry<String, String> entry : params.entrySet()) {
+            String key = entry.getKey();
+            String value = entry.getValue();
+            if (!"pay_key".equals(key) && value != null && !value.trim().isEmpty()) {
+                otherParams.put(key, value);
+            }
+        }
+
+        // 2. 对其他参数按键的 ASCII 字典序排序
+        List<String> sortedOtherKeys = otherParams.keySet().stream()
+                .sorted() // 按 String 自然顺序(ASCII 字典序)排序
+                .collect(Collectors.toList());
+
+        // 3. 拼接其他参数(已排序)
+        StringBuilder otherParamsStr = new StringBuilder();
+        for (String key : sortedOtherKeys) {
+            String value = otherParams.get(key);
+            try {
+                String encodedValue = URLEncoder.encode(value, StandardCharsets.UTF_8.name());
+                otherParamsStr.append(key).append("=").append(encodedValue).append("&");
+            } catch (UnsupportedEncodingException e) {
+                // 理论上不会触发,此处处理异常
+                otherParamsStr.append(key).append("=").append(value).append("&");
+            }
+        }
+        // 移除末尾多余的 &
+        if (otherParamsStr.length() > 0) {
+            otherParamsStr.deleteCharAt(otherParamsStr.length() - 1);
+        }
+
+        // 4. 拼接 pay_key(始终在最后)
+        StringBuilder finalQuery = new StringBuilder(otherParamsStr); // 初始化为其他参数的拼接结果
+
+        // 拼接 pay_key(如果有值)
+        if (payKeyValue != null && !payKeyValue.trim().isEmpty()) {
+            try {
+                String encodedPayKey = URLEncoder.encode(payKeyValue, StandardCharsets.UTF_8.name());
+                if (finalQuery.length() > 0) {
+                    finalQuery.append("&").append("pay_key=").append(encodedPayKey);
+                } else {
+                    finalQuery.append("pay_key=").append(encodedPayKey);
+                }
+            } catch (UnsupportedEncodingException e) {
+                if (finalQuery.length() > 0) {
+                    finalQuery.append("&").append("pay_key=").append(payKeyValue);
+                } else {
+                    finalQuery.append("pay_key=").append(payKeyValue);
+                }
+            }
+        }
+
+        return finalQuery.toString();
+    }
+
+    public static DBObject saveDB(Map<String, String> params) throws Exception {
+        LOGGER.info("params = {}", params);
+
+        String orderId = params.get("cp_order_id");
+        DBObject payInfo = new BasicDBObject();
+        payInfo.put("cporderId", orderId);
+
+        List<DBObject> payInfoList = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_PAY, payInfo);
+        if (payInfoList.size() != 1) {
+            LOGGER.error("payInfoList.size() = {}", payInfoList.size());
+            return null;
+        }
+        payInfo = payInfoList.get(0);
+
+        // 比较订单金额
+        BigDecimal money = new BigDecimal(params.get("order_amount"));
+        int processedMoney = money.multiply(BigDecimal.valueOf(100))
+                .intValueExact();
+
+        int amount = (int) payInfo.get("money");
+        boolean isEqual = processedMoney == amount;
+        LOGGER.info("处理后的金额(100倍)= {}", processedMoney);
+        LOGGER.info("与目标金额对比结果= {}, 订单金额 = {}", isEqual, amount);
+        if(!isEqual) {
+            LOGGER.error("金额不一致,请检查!");
+            return null;
+        }
+
+        payInfo.put("billno", orderId);
+
+//        payInfo.put("uid", request.getParameter("role_id"));
+        payInfo.put("openId", params.get("open_id"));
+        payInfo.put("region", params.get("server_id"));
+        payInfo.put("channel", "737yx");
+        payInfo.put("gameorderId", params.get("order_id"));
+//            dbObject.put("cporderId", platform);
+//        payInfo.put("creattime",request.getParameter("pay_time"));
+        payInfo.put("callbaktime", TimeUtil.getTimeNow());
+        BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_PAY, payInfo);
+        return payInfo;
+    }
+
+    private static String generateSign(String appId, String appSecret, String userId) {
+        String raw = appId + appSecret + userId;
+        return raw.hashCode() + "";
+    }
+}

+ 9 - 5
src/main/java/com/ljsd/channel/MockQuickSDK.java

@@ -17,13 +17,11 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.MessageDigest;
 import java.text.DecimalFormat;
 import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.Pattern;
 
 
@@ -41,18 +39,24 @@ public class MockQuickSDK {
     public static boolean verifyUser(String uid, String token, String subChannel) {
     public static boolean verifyUser(String uid, String token, String subChannel) {
         try {
         try {
             Properties properties = BaseGlobal.getInstance().properties;
             Properties properties = BaseGlobal.getInstance().properties;
+            if (Objects.equals(subChannel, "0") || subChannel == null) {
+                subChannel = "1";
+            }
             String productCode = properties.getProperty("quick_sdk_product_code_"+subChannel);
             String productCode = properties.getProperty("quick_sdk_product_code_"+subChannel);
             URIBuilder uriBuilder = new URIBuilder(properties.getProperty("quick_sdk_verify_api_url"));
             URIBuilder uriBuilder = new URIBuilder(properties.getProperty("quick_sdk_verify_api_url"));
-            uriBuilder.addParameter("token", token);
+            String nToken = URLEncoder.encode(token, String.valueOf(StandardCharsets.UTF_8));
+            uriBuilder.addParameter("token", nToken);
             uriBuilder.addParameter("product_code", productCode);
             uriBuilder.addParameter("product_code", productCode);
             uriBuilder.addParameter("uid", uid);
             uriBuilder.addParameter("uid", uid);
             uriBuilder.addParameter("channel_code", ""); // 必须传渠道 ID
             uriBuilder.addParameter("channel_code", ""); // 必须传渠道 ID
+            LOGGER.info("QuickSDK 验证参数, token:{}", nToken);
 
 
             HttpGet httpGet = new HttpGet(uriBuilder.build().toString());
             HttpGet httpGet = new HttpGet(uriBuilder.build().toString());
             CloseableHttpResponse response = httpClient.execute(httpGet);
             CloseableHttpResponse response = httpClient.execute(httpGet);
 
 
             String result = EntityUtils.toString(response.getEntity());
             String result = EntityUtils.toString(response.getEntity());
             response.close();
             response.close();
+            LOGGER.info("QuickSDK 验证结果:{}", result);
             return result.equals("1");
             return result.equals("1");
         } catch (Exception e) {
         } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();

+ 154 - 0
src/main/java/com/ljsd/channel/MockXingTuSDK.java

@@ -0,0 +1,154 @@
+package com.ljsd.channel;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.ljsd.util.BaseGlobal;
+import com.ljsd.util.TimeUtil;
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBObject;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class MockXingTuSDK {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(MockXingTuSDK.class);
+    private static final String APP_ID="03487a92fc46d57ddc27e60755cb3f21";
+    private static final String SERVER_KEY="337355bb236df29a5dfeeb85eaf15d21";
+    private static final String APP_KEY="d796d0b73d205504fbc38d1c01697ed4";
+    private static final String VERIFY_API_URL="https://sdk.xingtuyouxi.com/api/game/loginverify/vToken";
+    private static final CloseableHttpClient httpClient = HttpClients.createDefault();
+    private final static String _COLLECTION_PAY = "pay";
+    private static final Gson GSON = new Gson();
+    public static boolean verifyUser(String token) {
+        try {
+            String check = APP_ID+ token+ SERVER_KEY;
+            LOGGER.info("登录验证加密前的数据:{}", check);
+            String sign = md5(check);
+
+            // 域名+/tools/gamefactor.ashx?action=factor_login
+            List<NameValuePair> formParams = new ArrayList<>();
+            formParams.add(new BasicNameValuePair("appId", APP_ID));       // app_id 参数
+            formParams.add(new BasicNameValuePair("token", token));             // uid 参数
+            formParams.add(new BasicNameValuePair("sign", sign));
+            HttpPost httpPost  = new HttpPost(VERIFY_API_URL);
+            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(formParams, StandardCharsets.UTF_8);
+            httpPost.setEntity(formEntity);
+            CloseableHttpResponse response = httpClient.execute(httpPost);
+
+            String responseStr = EntityUtils.toString(response.getEntity(), "UTF-8");
+            JsonObject jsonObject = GSON.fromJson(responseStr, JsonObject.class);
+            int status = jsonObject.get("code").getAsInt();
+            String userId = null;
+            String msg = jsonObject.has("msg") ? jsonObject.get("msg").getAsString() : null;
+            response.close();
+            if (status == 1) {
+                JsonObject dataObject = jsonObject.getAsJsonObject("data");
+                if (dataObject != null) {
+                    userId = dataObject.get("userId").getAsString();
+                    LOGGER.info("验证成功 userId: " + userId); // 输出:userId: 1
+                } else {
+                    LOGGER.error("验证成功 data 字段不存在");
+                }
+                return true;
+            } else {
+                LOGGER.error("验证失败,code={}, msg={}",status, msg);
+                return false;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            LOGGER.error("Xingtu 登录验证异常:", e);
+            return false;
+        }
+
+    }
+
+    public static String md5(String input) throws NoSuchAlgorithmException {
+        MessageDigest md = MessageDigest.getInstance("MD5");
+
+        byte[] hashBytes = md.digest(input.getBytes(StandardCharsets.UTF_8));
+
+        StringBuilder hexString = new StringBuilder();
+        for (byte b : hashBytes) {
+            String hex = Integer.toHexString(0xFF & b);
+            if (hex.length() == 1) {
+                hexString.append('0'); // 补前导零(如 0x0A → "0a")
+            }
+            hexString.append(hex);
+        }
+       return hexString.toString();
+    }
+
+    public static boolean verifyCallback(String check, String sign) throws NoSuchAlgorithmException {
+        LOGGER.info("verifyCallback check={}", check);
+
+        String signCheck = md5(check+SERVER_KEY);
+        LOGGER.info("signCheck:{}", signCheck);
+        return signCheck.equals(sign.toLowerCase());
+    }
+
+
+    public static DBObject saveDB(String cpOrderId, String orderAmount, String openId, String serverId, String orderId) throws Exception {
+
+        DBObject payInfo = new BasicDBObject();
+        payInfo.put("cporderId", cpOrderId);
+
+        List<DBObject> payInfoList = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_PAY, payInfo);
+        if (payInfoList.size() != 1) {
+            LOGGER.error("payInfoList.size() = {}", payInfoList.size());
+            return null;
+        }
+        payInfo = payInfoList.get(0);
+
+        // 比较订单金额
+        BigDecimal money = new BigDecimal(orderAmount);
+        int processedMoney = money.multiply(BigDecimal.valueOf(100))
+                .intValueExact();
+
+        int amount = (int) payInfo.get("money");
+        boolean isEqual = processedMoney == amount;
+        LOGGER.info("处理后的金额(100倍)= {}", processedMoney);
+        LOGGER.info("与目标金额对比结果= {}, 订单金额 = {}", isEqual, amount);
+        if(!isEqual) {
+            LOGGER.error("金额不一致,请检查!");
+            return null;
+        }
+
+        payInfo.put("billno", orderId);
+
+//        payInfo.put("uid", request.getParameter("role_id"));
+        payInfo.put("openId", openId);
+        payInfo.put("region", serverId);
+        payInfo.put("channel", "xingtu");
+        payInfo.put("gameorderId", orderId);
+//            dbObject.put("cporderId", platform);
+//        payInfo.put("creattime",request.getParameter("pay_time"));
+        payInfo.put("callbaktime", TimeUtil.getTimeNow());
+        BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_PAY, payInfo);
+        return payInfo;
+    }
+
+    private static String generateSign(String appId, String appSecret, String userId) {
+        String raw = appId + appSecret + userId;
+        return raw.hashCode() + "";
+    }
+}

+ 3 - 0
src/main/java/com/ljsd/controller/GetServerListController.java

@@ -55,6 +55,9 @@ public class GetServerListController extends HttpServlet {
                 response.sendError(400, "parm is wrong");
                 response.sendError(400, "parm is wrong");
                 return;
                 return;
             }
             }
+            if (sub_channel.equals("0")) {
+                sub_channel="1";
+            }
 
 
             DBObject req = new BasicDBObject();
             DBObject req = new BasicDBObject();
             req.put("channel", channel);
             req.put("channel", channel);

+ 3 - 1
src/main/java/com/ljsd/controller/GetUserV2Controller.java

@@ -44,7 +44,6 @@ public class GetUserV2Controller extends HttpServlet {
         if (version == null)  {
         if (version == null)  {
             version="未知版本号";
             version="未知版本号";
         }
         }
-        LOGGER.info("the opendId = {}, version{}",openId,version);
         String serverId = request.getParameter("serverId");
         String serverId = request.getParameter("serverId");
         if (serverId == null || serverId.isEmpty()) {
         if (serverId == null || serverId.isEmpty()) {
             response.sendError(400, "serverId is empety");
             response.sendError(400, "serverId is empety");
@@ -64,6 +63,9 @@ public class GetUserV2Controller extends HttpServlet {
 
 
         String gid = request.getParameter("gid"); //gid
         String gid = request.getParameter("gid"); //gid
         String pid = request.getParameter("pid"); //pid
         String pid = request.getParameter("pid"); //pid
+        String subChannel = request.getParameter("sub_channel");
+        LOGGER.info("the opendId = {}, version={}, serverId={}, subChannel={}, gid={}, pid={}",openId,version,serverId,
+                subChannel,gid,pid);
 
 
         /*if (StringUtils.checkIsEmpty(admin)) {
         /*if (StringUtils.checkIsEmpty(admin)) {
             response.sendError(400, "platform is empety");
             response.sendError(400, "platform is empety");

+ 6 - 0
src/main/java/com/ljsd/controller/LoginV2Controller.java

@@ -2,7 +2,9 @@ package com.ljsd.controller;
 
 
 import com.google.gson.Gson;
 import com.google.gson.Gson;
 import com.ljsd.channel.Mock361YXSDK;
 import com.ljsd.channel.Mock361YXSDK;
+import com.ljsd.channel.Mock737YXSDK;
 import com.ljsd.channel.MockQuickSDK;
 import com.ljsd.channel.MockQuickSDK;
+import com.ljsd.channel.MockXingTuSDK;
 import com.ljsd.pojo.ResMsg;
 import com.ljsd.pojo.ResMsg;
 import com.ljsd.redis.RedisKey;
 import com.ljsd.redis.RedisKey;
 import com.ljsd.util.BaseGlobal;
 import com.ljsd.util.BaseGlobal;
@@ -59,6 +61,10 @@ public class LoginV2Controller extends HttpServlet {
                 ok = MockQuickSDK.verifyUser(uid, token, subChannel);
                 ok = MockQuickSDK.verifyUser(uid, token, subChannel);
             } else if (channel.equals("361yx")) {
             } else if (channel.equals("361yx")) {
                 ok = Mock361YXSDK.verifyUser(uid);
                 ok = Mock361YXSDK.verifyUser(uid);
+            } else if (channel.equals("xingtu")) {
+                ok = MockXingTuSDK.verifyUser(token);
+            } else if (channel.equals("737yx")) {
+                ok = Mock737YXSDK.verifyUser(uid);
             } else {
             } else {
                 resMsg.setMsg("不支持该渠道");
                 resMsg.setMsg("不支持该渠道");
                 out.print(gson.toJson(resMsg));
                 out.print(gson.toJson(resMsg));

+ 28 - 8
src/main/java/com/ljsd/controller/PayCallback4Controller.java → src/main/java/com/ljsd/controller/PayCallback737Controller.java

@@ -1,11 +1,14 @@
 package com.ljsd.controller;
 package com.ljsd.controller;
 
 
 import com.google.gson.Gson;
 import com.google.gson.Gson;
+import com.ljsd.channel.Mock361YXSDK;
+import com.ljsd.channel.Mock737YXSDK;
 import com.ljsd.channel.MockQuickSDK;
 import com.ljsd.channel.MockQuickSDK;
 import com.ljsd.jieling.thrift.idl.Result;
 import com.ljsd.jieling.thrift.idl.Result;
 import com.ljsd.jieling.thrift.pool.ThriftClient;
 import com.ljsd.jieling.thrift.pool.ThriftClient;
 import com.ljsd.pojo.ResMsg;
 import com.ljsd.pojo.ResMsg;
 import com.ljsd.util.RequestLogger;
 import com.ljsd.util.RequestLogger;
+import com.ljsd.util.StringUtils;
 import com.mongodb.BasicDBObject;
 import com.mongodb.BasicDBObject;
 import com.mongodb.DBObject;
 import com.mongodb.DBObject;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -19,14 +22,16 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Map;
 
 
-public class PayCallback4Controller extends HttpServlet {
-    private static final Logger LOGGER = LoggerFactory.getLogger(PayCallback4Controller.class);
+public class PayCallback737Controller extends HttpServlet {
+    private static final Logger LOGGER = LoggerFactory.getLogger(PayCallback737Controller.class);
     private static Gson gson = new Gson();
     private static Gson gson = new Gson();
     private final static String _COLLECTION_PAY = "pay";
     private final static String _COLLECTION_PAY = "pay";
     private static final CloseableHttpClient httpClient = HttpClients.createDefault();
     private static final CloseableHttpClient httpClient = HttpClients.createDefault();
 
 
-    public PayCallback4Controller() {
+    public PayCallback737Controller() {
         super();
         super();
     }
     }
 
 
@@ -42,18 +47,33 @@ public class PayCallback4Controller extends HttpServlet {
         request.setCharacterEncoding("UTF-8");
         request.setCharacterEncoding("UTF-8");
         response.setCharacterEncoding("UTF-8");
         response.setCharacterEncoding("UTF-8");
         response.setContentType("application/json; charset=utf-8");
         response.setContentType("application/json; charset=utf-8");
-        LOGGER.info("PayCallbackController json params = {}",RequestLogger.logRequestParams(request));
+        LOGGER.info("PayCallback737Controller json params = {}",RequestLogger.logRequestParams(request));
         String sign = request.getParameter("sign");
         String sign = request.getParameter("sign");
-        String nt_data = request.getParameter("nt_data");
-        String md5Sign = request.getParameter("md5Sign");
         ResMsg resMsg = new ResMsg();
         ResMsg resMsg = new ResMsg();
         resMsg.setCode(1);
         resMsg.setCode(1);
         DBObject payInfo = new BasicDBObject();
         DBObject payInfo = new BasicDBObject();
         try (PrintWriter out = response.getWriter();){
         try (PrintWriter out = response.getWriter();){
             boolean ok = false;
             boolean ok = false;
-            ok = MockQuickSDK.verifyCallback(nt_data, sign, md5Sign, "4");
+            String appId = request.getParameter("app_id");
+            String cpOrderId = request.getParameter("cp_order_id");
+            String orderAmount = request.getParameter("order_amount");
+            String orderId = request.getParameter("order_id");
+            String roleId = request.getParameter("role_id");
+            String serverId = request.getParameter("server_id");
+            String timestamp = request.getParameter("timestamp");
+            String uid = request.getParameter("uid");
+            Map<String, String> params = new HashMap<>();
+            params.put("app_id",appId);
+            params.put("cp_order_id",cpOrderId);
+            params.put("order_amount",orderAmount);
+            params.put("order_id",  orderId);
+            params.put("role_id", roleId);
+            params.put("server_id", serverId);
+            params.put("timestamp", timestamp);
+            params.put("uid", uid);
+            ok = Mock737YXSDK.verifyCallback(params, sign);
             if (ok) {
             if (ok) {
-                payInfo = MockQuickSDK.saveDB(nt_data, "4");
+                payInfo = Mock737YXSDK.saveDB(params);
             }
             }
 
 
             if (!ok) {
             if (!ok) {

+ 19 - 14
src/main/java/com/ljsd/controller/PayCallback3Controller.java → src/main/java/com/ljsd/controller/PayCallbackXTController.java

@@ -1,15 +1,13 @@
 package com.ljsd.controller;
 package com.ljsd.controller;
 
 
 import com.google.gson.Gson;
 import com.google.gson.Gson;
-import com.ljsd.channel.MockQuickSDK;
+import com.ljsd.channel.MockXingTuSDK;
 import com.ljsd.jieling.thrift.idl.Result;
 import com.ljsd.jieling.thrift.idl.Result;
 import com.ljsd.jieling.thrift.pool.ThriftClient;
 import com.ljsd.jieling.thrift.pool.ThriftClient;
 import com.ljsd.pojo.ResMsg;
 import com.ljsd.pojo.ResMsg;
 import com.ljsd.util.RequestLogger;
 import com.ljsd.util.RequestLogger;
 import com.mongodb.BasicDBObject;
 import com.mongodb.BasicDBObject;
 import com.mongodb.DBObject;
 import com.mongodb.DBObject;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 
 
@@ -20,13 +18,11 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.PrintWriter;
 
 
-public class PayCallback3Controller extends HttpServlet {
-    private static final Logger LOGGER = LoggerFactory.getLogger(PayCallback3Controller.class);
+public class PayCallbackXTController extends HttpServlet {
+    private static final Logger LOGGER = LoggerFactory.getLogger(PayCallbackXTController.class);
     private static Gson gson = new Gson();
     private static Gson gson = new Gson();
-    private final static String _COLLECTION_PAY = "pay";
-    private static final CloseableHttpClient httpClient = HttpClients.createDefault();
 
 
-    public PayCallback3Controller() {
+    public PayCallbackXTController() {
         super();
         super();
     }
     }
 
 
@@ -42,18 +38,27 @@ public class PayCallback3Controller extends HttpServlet {
         request.setCharacterEncoding("UTF-8");
         request.setCharacterEncoding("UTF-8");
         response.setCharacterEncoding("UTF-8");
         response.setCharacterEncoding("UTF-8");
         response.setContentType("application/json; charset=utf-8");
         response.setContentType("application/json; charset=utf-8");
-        LOGGER.info("PayCallbackController json params = {}",RequestLogger.logRequestParams(request));
-        String sign = request.getParameter("sign");
-        String nt_data = request.getParameter("nt_data");
-        String md5Sign = request.getParameter("md5Sign");
+        LOGGER.info("PayCallbackXTController json params = {}",RequestLogger.logRequestParams(request));
+        String appId = request.getParameter("appId");
+        String orderNum = request.getParameter("orderNum");
+        String userId = request.getParameter("userId");
+        String money = request.getParameter("money");
+        String serverId = request.getParameter("serverId");
+        String roleId = request.getParameter("roleId");
+        String roleName = request.getParameter("roleName");
+        String extInfo = request.getParameter("extInfo");
+        String status = request.getParameter("status");
+        String couponMonetFen = request.getParameter("couponMonetFen");
+        String signCheck = request.getParameter("sign");
         ResMsg resMsg = new ResMsg();
         ResMsg resMsg = new ResMsg();
         resMsg.setCode(1);
         resMsg.setCode(1);
         DBObject payInfo = new BasicDBObject();
         DBObject payInfo = new BasicDBObject();
         try (PrintWriter out = response.getWriter();){
         try (PrintWriter out = response.getWriter();){
             boolean ok = false;
             boolean ok = false;
-            ok = MockQuickSDK.verifyCallback(nt_data, sign, md5Sign, "3");
+            String check = appId+userId+orderNum+money+serverId+roleId+roleName+extInfo+status;
+            ok = MockXingTuSDK.verifyCallback(check, signCheck);
             if (ok) {
             if (ok) {
-                payInfo = MockQuickSDK.saveDB(nt_data, "3");
+                payInfo = MockXingTuSDK.saveDB(extInfo, money, userId, serverId, orderNum);
             }
             }
 
 
             if (!ok) {
             if (!ok) {

+ 3 - 1
src/main/java/com/ljsd/jieling/thrift/pool/ThriftClient.java

@@ -75,13 +75,15 @@ public class ThriftClient {
         }
         }
 
 
         int id;
         int id;
+        int channel;
         try {
         try {
             id = Integer.parseInt(serverId.trim())%10000;
             id = Integer.parseInt(serverId.trim())%10000;
+            channel = Integer.parseInt(serverId.trim())/10000;
         } catch (NumberFormatException e) {
         } catch (NumberFormatException e) {
             throw new IllegalArgumentException("服务器ID必须为有效整数", e);
             throw new IllegalArgumentException("服务器ID必须为有效整数", e);
         }
         }
 
 
-        int port = 19000 + id;
+        int port = 19000 + channel*100 + id;
         if (port < 0 || port > 65535) {
         if (port < 0 || port > 65535) {
             throw new IllegalArgumentException("计算后的端口号超出有效范围(0-65535)");
             throw new IllegalArgumentException("计算后的端口号超出有效范围(0-65535)");
         }
         }

+ 30 - 0
src/main/webapp/WEB-INF/web.xml

@@ -163,6 +163,36 @@
         <url-pattern>/payCallback</url-pattern>
         <url-pattern>/payCallback</url-pattern>
     </servlet-mapping>
     </servlet-mapping>
 
 
+    <servlet>
+        <servlet-name>payCallbackXT</servlet-name>
+        <servlet-class>com.ljsd.controller.PayCallbackXTController</servlet-class>
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>payCallbackXT</servlet-name>
+        <url-pattern>/payCallbackXT</url-pattern>
+    </servlet-mapping>
+
+    <servlet>
+        <servlet-name>payCallback1</servlet-name>
+        <servlet-class>com.ljsd.controller.PayCallback1Controller</servlet-class>
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>payCallback1</servlet-name>
+        <url-pattern>/payCallback1</url-pattern>
+    </servlet-mapping>
+
+    <servlet>
+        <servlet-name>payCallbackH5</servlet-name>
+        <servlet-class>com.ljsd.controller.PayCallback737Controller</servlet-class>
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>payCallbackH5</servlet-name>
+        <url-pattern>/payCallbackH5</url-pattern>
+    </servlet-mapping>
+
     <servlet>
     <servlet>
         <servlet-name>getRecharge</servlet-name>
         <servlet-name>getRecharge</servlet-name>
         <servlet-class>com.ljsd.controller.GetRechargeController</servlet-class>
         <servlet-class>com.ljsd.controller.GetRechargeController</servlet-class>