package com.ljsd.controller; import com.google.gson.Gson; import com.ljsd.channel.Mock361YXSDK; import com.ljsd.channel.MockQuickSDK; import com.ljsd.jieling.thrift.idl.RechargeResult; import com.ljsd.jieling.thrift.idl.Result; import com.ljsd.jieling.thrift.pool.ThriftClient; import com.ljsd.pojo.ResMsg; import com.ljsd.redis.RedisKey; import com.ljsd.util.BaseGlobal; import com.ljsd.util.StringUtils; import com.ljsd.util.TimeUtil; import com.ljsd.util.XmlParser; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.utils.URIBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.net.URISyntaxException; import java.util.*; public class PayCallbackController extends HttpServlet { private static final Logger LOGGER = LoggerFactory.getLogger(PayCallbackController.class); private static Gson gson = new Gson(); private final static String _COLLECTION_PAY = "pay"; private static final CloseableHttpClient httpClient = HttpClients.createDefault(); public PayCallbackController() { super(); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("application/json; charset=utf-8"); // String uid = request.getParameter("userId"); String sign = request.getParameter("sign"); String nt_data = request.getParameter("nt_data"); String md5Sign = request.getParameter("md5Sign"); LOGGER.info("PayCallbackController sign = {}, nt_data = {}, md5Sign = {}, app_id = {}", sign, nt_data, md5Sign, request.getParameter("app_id")); ResMsg resMsg = new ResMsg(); resMsg.setCode(1); DBObject payInfo = new BasicDBObject(); try (PrintWriter out = response.getWriter();){ boolean ok = false; if(!StringUtils.checkIsEmpty(md5Sign) && !StringUtils.checkIsEmpty(nt_data) && !StringUtils.checkIsEmpty(sign)){ ok = MockQuickSDK.verifyCallback(nt_data, sign, md5Sign); if (ok) { payInfo = MockQuickSDK.saveDB(nt_data); } } else if (!StringUtils.checkIsEmpty(request.getParameter("app_id"))) { 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 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 = Mock361YXSDK.verifyCallback(params, sign); if (ok) { payInfo = Mock361YXSDK.saveDB(params); } } else { resMsg.setMsg("不支持该渠道"); LOGGER.error("不支持该渠道"); out.print(gson.toJson(resMsg)); return; } if (!ok) { resMsg.setMsg("支付sign验证失败"); LOGGER.error("支付sign验证失败"); out.print(gson.toJson(resMsg)); return; } if (payInfo == null) { resMsg.setMsg("订单验证失败"); LOGGER.error("订单验证失败"); out.print(gson.toJson(resMsg)); return; } // 订单入库, 结构根据gameserver的PayVo推测的 // mongo db:x5_tk_login collect:pay // status 怀疑没有使用,发货成功后,会把handlestatus置为1 // 放在各sdk实例的saveDB中 // 通知发货 LOGGER.info("通知发货, payInfo = {}", payInfo); Result result = ThriftClient.deliveryRecharge((int) payInfo.get("uid"), (String) payInfo.get("pay_item"), (String) payInfo.get("open_id"), (String) payInfo.get("billno"), Long.parseLong((String) payInfo.get("creattime")), (int) payInfo.get("money"), (String) payInfo.get("region")); LOGGER.info("deliveryRecharge result = {}", result); if (result == null || result.resultCode != 1) { resMsg.setCode(1); resMsg.setMsg("发货失败"); return; } out.print("SUCCESS"); }catch (Exception e){ e.printStackTrace(); } } }