PayCallbackController.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package com.ljsd.controller;
  2. import com.google.gson.Gson;
  3. import com.ljsd.channel.Mock361YXSDK;
  4. import com.ljsd.channel.MockQuickSDK;
  5. import com.ljsd.jieling.thrift.idl.RechargeResult;
  6. import com.ljsd.jieling.thrift.idl.Result;
  7. import com.ljsd.jieling.thrift.pool.ThriftClient;
  8. import com.ljsd.pojo.ResMsg;
  9. import com.ljsd.redis.RedisKey;
  10. import com.ljsd.util.BaseGlobal;
  11. import com.ljsd.util.StringUtils;
  12. import com.ljsd.util.TimeUtil;
  13. import com.ljsd.util.XmlParser;
  14. import com.mongodb.BasicDBObject;
  15. import com.mongodb.DBObject;
  16. import org.apache.http.client.methods.CloseableHttpResponse;
  17. import org.apache.http.client.methods.HttpGet;
  18. import org.apache.http.client.utils.URIBuilder;
  19. import org.apache.http.impl.client.CloseableHttpClient;
  20. import org.apache.http.impl.client.HttpClients;
  21. import org.apache.http.util.EntityUtils;
  22. import org.slf4j.Logger;
  23. import org.slf4j.LoggerFactory;
  24. import javax.servlet.ServletException;
  25. import javax.servlet.http.HttpServlet;
  26. import javax.servlet.http.HttpServletRequest;
  27. import javax.servlet.http.HttpServletResponse;
  28. import java.io.IOException;
  29. import java.io.PrintWriter;
  30. import java.net.URISyntaxException;
  31. import java.util.*;
  32. public class PayCallbackController extends HttpServlet {
  33. private static final Logger LOGGER = LoggerFactory.getLogger(PayCallbackController.class);
  34. private static Gson gson = new Gson();
  35. private final static String _COLLECTION_PAY = "pay";
  36. private static final CloseableHttpClient httpClient = HttpClients.createDefault();
  37. public PayCallbackController() {
  38. super();
  39. }
  40. public void destroy() {
  41. super.destroy();
  42. }
  43. public void doGet(HttpServletRequest request, HttpServletResponse response)
  44. throws ServletException, IOException {
  45. this.doPost(request, response);
  46. }
  47. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  48. request.setCharacterEncoding("UTF-8");
  49. response.setCharacterEncoding("UTF-8");
  50. response.setContentType("application/json; charset=utf-8");
  51. // String uid = request.getParameter("userId");
  52. String sign = request.getParameter("sign");
  53. String nt_data = request.getParameter("nt_data");
  54. String md5Sign = request.getParameter("md5Sign");
  55. LOGGER.info("PayCallbackController sign = {}, nt_data = {}, md5Sign = {}, app_id = {}", sign, nt_data,
  56. md5Sign, request.getParameter("app_id"));
  57. ResMsg resMsg = new ResMsg();
  58. resMsg.setCode(1);
  59. DBObject payInfo = new BasicDBObject();
  60. try (PrintWriter out = response.getWriter();){
  61. boolean ok = false;
  62. if(!StringUtils.checkIsEmpty(md5Sign) && !StringUtils.checkIsEmpty(nt_data) && !StringUtils.checkIsEmpty(sign)){
  63. ok = MockQuickSDK.verifyCallback(nt_data, sign, md5Sign);
  64. if (ok) {
  65. payInfo = MockQuickSDK.saveDB(nt_data);
  66. }
  67. } else if (!StringUtils.checkIsEmpty(request.getParameter("app_id"))) {
  68. String appId = request.getParameter("app_id");
  69. String cpOrderId = request.getParameter("cp_order_id");
  70. String orderAmount = request.getParameter("order_amount");
  71. String orderId = request.getParameter("order_id");
  72. String roleId = request.getParameter("role_id");
  73. String serverId = request.getParameter("server_id");
  74. String timestamp = request.getParameter("timestamp");
  75. String uid = request.getParameter("uid");
  76. Map<String, String> params = new HashMap<>();
  77. params.put("app_id",appId);
  78. params.put("cp_order_id",cpOrderId);
  79. params.put("order_amount",orderAmount);
  80. params.put("order_id", orderId);
  81. params.put("role_id", roleId);
  82. params.put("server_id", serverId);
  83. params.put("timestamp", timestamp);
  84. params.put("uid", uid);
  85. ok = Mock361YXSDK.verifyCallback(params, sign);
  86. if (ok) {
  87. payInfo = Mock361YXSDK.saveDB(params);
  88. }
  89. } else {
  90. resMsg.setMsg("不支持该渠道");
  91. LOGGER.error("不支持该渠道");
  92. out.print(gson.toJson(resMsg));
  93. return;
  94. }
  95. if (!ok) {
  96. resMsg.setMsg("支付sign验证失败");
  97. LOGGER.error("支付sign验证失败");
  98. out.print(gson.toJson(resMsg));
  99. return;
  100. }
  101. if (payInfo == null) {
  102. resMsg.setMsg("订单验证失败");
  103. LOGGER.error("订单验证失败");
  104. out.print(gson.toJson(resMsg));
  105. return;
  106. }
  107. // 订单入库, 结构根据gameserver的PayVo推测的
  108. // mongo db:x5_tk_login collect:pay
  109. // status 怀疑没有使用,发货成功后,会把handlestatus置为1
  110. // 放在各sdk实例的saveDB中
  111. // 通知发货
  112. LOGGER.info("通知发货, payInfo = {}", payInfo);
  113. Result result = ThriftClient.deliveryRecharge((int) payInfo.get("uid"), (String) payInfo.get("pay_item"),
  114. (String) payInfo.get("open_id"), (String) payInfo.get("billno"), Long.parseLong((String) payInfo.get("creattime")),
  115. (int) payInfo.get("money"), (String) payInfo.get("region"));
  116. LOGGER.info("deliveryRecharge result = {}", result);
  117. if (result == null || result.resultCode != 1) {
  118. resMsg.setCode(1);
  119. resMsg.setMsg("发货失败");
  120. return;
  121. }
  122. out.print("SUCCESS");
  123. }catch (Exception e){
  124. e.printStackTrace();
  125. }
  126. }
  127. }