MockQuickSDK.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package com.ljsd.channel;
  2. import com.ljsd.redis.RedisUtil;
  3. import com.ljsd.util.BaseGlobal;
  4. import com.ljsd.util.TimeUtil;
  5. import com.ljsd.util.XmlParser;
  6. import com.mongodb.BasicDBObject;
  7. import com.mongodb.DBObject;
  8. import org.apache.http.client.methods.CloseableHttpResponse;
  9. import org.apache.http.client.methods.HttpGet;
  10. import org.apache.http.client.utils.URIBuilder;
  11. import org.apache.http.impl.client.CloseableHttpClient;
  12. import org.apache.http.impl.client.HttpClients;
  13. import org.apache.http.util.EntityUtils;
  14. import org.slf4j.Logger;
  15. import org.slf4j.LoggerFactory;
  16. import java.nio.charset.StandardCharsets;
  17. import java.security.MessageDigest;
  18. import java.util.List;
  19. import java.util.Map;
  20. import java.util.Properties;
  21. import static javax.management.Query.eq;
  22. public class MockQuickSDK {
  23. private static final Logger LOGGER = LoggerFactory.getLogger(MockQuickSDK.class);
  24. private static final String QUICK_SDK_PRODUCT_CODE="74323196251398220690098816635773";
  25. private static final String QUICK_SDK_PRODUCT_KEY="20562534";
  26. private static final String QUICK_SDK_CALLBACK_KEY="05803023623721638274057263988239";
  27. private static final String QUICK_SDK_VERIFY_API_URL="https://checkuser.gamedachen.com/v2/checkUserInfo";
  28. private static final CloseableHttpClient httpClient = HttpClients.createDefault();
  29. private final static String _COLLECTION_PAY = "pay";
  30. public static boolean verifyUser(String uid, String token) {
  31. try {
  32. URIBuilder uriBuilder = new URIBuilder(QUICK_SDK_VERIFY_API_URL);
  33. uriBuilder.addParameter("token", token);
  34. uriBuilder.addParameter("product_code", QUICK_SDK_PRODUCT_CODE);
  35. uriBuilder.addParameter("uid", uid);
  36. uriBuilder.addParameter("channel_code", ""); // 必须传渠道 ID
  37. HttpGet httpGet = new HttpGet(uriBuilder.build().toString());
  38. CloseableHttpResponse response = httpClient.execute(httpGet);
  39. String result = EntityUtils.toString(response.getEntity());
  40. response.close();
  41. return result.equals("1");
  42. } catch (Exception e) {
  43. e.printStackTrace();
  44. LOGGER.error("QuickSDK 验证异常:", e);
  45. return false;
  46. }
  47. }
  48. public static boolean verifyCallback(String nt_data, String sign, String md5Sign) {
  49. if (nt_data == null || sign == null || md5Sign == null) {
  50. LOGGER.error("参数不可为空,nt_data={}, sign={}, md5Sign={}", nt_data, sign, md5Sign);
  51. return false;
  52. }
  53. String rawString = nt_data + sign + QUICK_SDK_CALLBACK_KEY;
  54. try {
  55. MessageDigest md = MessageDigest.getInstance("MD5");
  56. byte[] hashBytes = md.digest(rawString.getBytes(StandardCharsets.UTF_8));
  57. StringBuilder hexString = new StringBuilder();
  58. for (byte b : hashBytes) {
  59. String hex = Integer.toHexString(0xFF & b);
  60. if (hex.length() == 1) {
  61. hexString.append('0'); // 补前导零(如 0x0A → "0a")
  62. }
  63. hexString.append(hex);
  64. }
  65. boolean success = hexString.toString().equals(md5Sign);
  66. if (success) {
  67. }
  68. return hexString.toString().equals(md5Sign);
  69. } catch (Exception e) {
  70. e.printStackTrace();
  71. LOGGER.error("MD5 算法不可用:", e);
  72. return false;
  73. }
  74. }
  75. public static DBObject saveDB(String nt_data) throws Exception {
  76. Map<String, String> fields = XmlParser.parseNtData(nt_data);
  77. String param = fields.get("extras_params");
  78. LOGGER.info("param = {}", param);
  79. String orderId = fields.get("game_order");
  80. DBObject payInfo = new BasicDBObject();
  81. payInfo.put("cporderId", orderId);
  82. List<DBObject> payInfoList = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_PAY, payInfo);
  83. if (payInfoList.size() != 1) {
  84. return null;
  85. }
  86. payInfo = new BasicDBObject();
  87. payInfo.put("billno", fields.get("order_no"));
  88. payInfo.put("uid", fields.get("channel_uid"));
  89. // payInfo.put("openId", uid);
  90. // dbObject.put("region", serverId);
  91. payInfo.put("channel", "quick");
  92. // payInfo.put("gameorderId", fields.get("game_order"));
  93. // dbObject.put("cporderId", platform);
  94. payInfo.put("creattime", fields.get("pay_time"));
  95. payInfo.put("callbaktime", TimeUtil.getTimeNow());
  96. BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_PAY, payInfo);
  97. return payInfo;
  98. }
  99. private static String generateSign(String appId, String appSecret, String userId) {
  100. String raw = appId + appSecret + userId;
  101. return raw.hashCode() + "";
  102. }
  103. }