generated from root/miduo_server
			增加quick支付
							parent
							
								
									17dffdc483
								
							
						
					
					
						commit
						fa4dd026c0
					
				|  | @ -25,4 +25,5 @@ dependencies { | ||||||
|     compile group: 'io.netty', name: 'netty-all', version: '4.0.21.Final' |     compile group: 'io.netty', name: 'netty-all', version: '4.0.21.Final' | ||||||
|     compile group: 'com.google.protobuf', name: 'protobuf-java', version: '2.5.0' |     compile group: 'com.google.protobuf', name: 'protobuf-java', version: '2.5.0' | ||||||
|     compile group: 'commons-lang', name: 'commons-lang', version: '2.5' |     compile group: 'commons-lang', name: 'commons-lang', version: '2.5' | ||||||
|  |     compile group: 'dom4j', name: 'dom4j', version: '1.6.1' | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,201 @@ | ||||||
|  | package com.ljsd.controller; | ||||||
|  | 
 | ||||||
|  | import com.google.gson.Gson; | ||||||
|  | import com.google.gson.JsonObject; | ||||||
|  | import com.ljsd.pojo.Pay; | ||||||
|  | import com.ljsd.util.BaseGlobal; | ||||||
|  | import com.ljsd.util.HttpUtil; | ||||||
|  | import com.ljsd.util.MyMD5Util; | ||||||
|  | import org.apache.commons.lang.ArrayUtils; | ||||||
|  | import org.slf4j.Logger; | ||||||
|  | import org.slf4j.LoggerFactory; | ||||||
|  | import org.xml.sax.InputSource; | ||||||
|  | 
 | ||||||
|  | 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.io.StringReader; | ||||||
|  | import java.util.*; | ||||||
|  | import java.util.regex.Matcher; | ||||||
|  | import java.util.regex.Pattern; | ||||||
|  | 
 | ||||||
|  | import org.dom4j.Document; | ||||||
|  | import org.dom4j.DocumentException; | ||||||
|  | import org.dom4j.Element; | ||||||
|  | import org.dom4j.io.SAXReader; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @author dengdan | ||||||
|  |  * @version V1.0 | ||||||
|  |  * @className RechargeController | ||||||
|  |  * @packageName com.ljsd.controller | ||||||
|  |  * @description quick 充值 | ||||||
|  |  * @date 2022-02-21 14:10 | ||||||
|  |  * copyright(c) 2020-2030 蓝鲸时代技术有限公司 | ||||||
|  |  **/ | ||||||
|  | public class QuickRechargeController extends HttpServlet { | ||||||
|  |     private static final Logger LOGGER = LoggerFactory.getLogger(QuickRechargeController.class); | ||||||
|  |     private static final String callbackkey = "12737719148739508487389450073054"; | ||||||
|  |     private static final String md5key = "ljl71x5cmvvlpuritisdbnhcphuklqc7"; | ||||||
|  |     @Override | ||||||
|  |     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { | ||||||
|  |         req.setCharacterEncoding("UTF-8"); | ||||||
|  |         resp.setCharacterEncoding("UTF-8"); | ||||||
|  |         resp.setContentType("application/json; charset=utf-8"); | ||||||
|  |         PrintWriter out = resp.getWriter(); | ||||||
|  |         HashMap<String, String> parameterMap = HttpUtil.getParameterMap(req); | ||||||
|  |         if (parameterMap.isEmpty()) { | ||||||
|  |             LOGGER.info("data is null"); | ||||||
|  |             out.print("FAILED"); | ||||||
|  |             out.flush(); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         String ntdata0 = parameterMap.get("nt_data"); | ||||||
|  |         String ntdata = decode(ntdata0,callbackkey); | ||||||
|  |         Map<String,String> map = getData(ntdata); | ||||||
|  |         LOGGER.info("MapInfo: cakey:{},is_test:{},channel:{},channel_uid:{},game_order:{},order_no:{},pay_time:{}",callbackkey,map.get("is_test"),map.get("channel"),map.get("channel_uid"), map.get("game_order"),map.get("order_no"),map.get("pay_time")); | ||||||
|  |         if (map.isEmpty()) { | ||||||
|  |             out.print("FAILED"); | ||||||
|  |             out.flush(); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         String consumerid = map.get("channel_uid"); | ||||||
|  |         String sign = parameterMap.get("sign"); | ||||||
|  |         String md5Sign = parameterMap.get("md5Sign"); | ||||||
|  |         if(!sign(ntdata0,sign,md5Sign,md5key)){ | ||||||
|  |             LOGGER.info("callback==>roleUid={},sin derify  fail ", consumerid); | ||||||
|  |             out.print("FAILED"); | ||||||
|  |             out.flush(); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         if(map.get("status").equals("1")){ | ||||||
|  |             LOGGER.info("callback==>status:FAILED "); | ||||||
|  |             out.print("FAILED"); | ||||||
|  |             out.flush(); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         String orderno = map.get("order_no"); | ||||||
|  |         String amount = map.get("amount"); | ||||||
|  |         //quick的是元 要处理一下
 | ||||||
|  |         String amountForward = String.valueOf((int)(Double.parseDouble(amount) * 100)); | ||||||
|  |         String extInfo = map.get("extras_params"); | ||||||
|  |         // 角色id_物品id_orderId
 | ||||||
|  |         String[] collback = extInfo.split("_"); | ||||||
|  |         LOGGER.info("支付透传参数,分割前:{},分割后:{},长度:{}",extInfo, ArrayUtils.toString(collback,","),collback.length); | ||||||
|  |         String uid = collback.length > 0 ? collback[0] : "0"; | ||||||
|  |         String goodsId = collback.length > 1 ? collback[1] : "0"; | ||||||
|  |         String orderId = collback.length > 2 ? collback[2] : "0"; | ||||||
|  |         String serverId = collback.length > 3 ? collback[3] : "0"; | ||||||
|  |         //init pay
 | ||||||
|  |         Gson gson = new Gson(); | ||||||
|  |         String[] split = extInfo.split("\\|"); | ||||||
|  |         JsonObject jsonObject = new JsonObject(); | ||||||
|  |         jsonObject.addProperty("orderId", orderId); | ||||||
|  |         jsonObject.addProperty("goodsId",goodsId); | ||||||
|  |         jsonObject.addProperty("uid",uid); | ||||||
|  |         // 游戏中uid
 | ||||||
|  |         Map<String, String> json = gson.fromJson(jsonObject, Map.class); | ||||||
|  |         Pay pay = new Pay(); | ||||||
|  |         pay.roleId = json.get("uid"); | ||||||
|  |         pay.serverId = serverId ; | ||||||
|  |         pay.goodsId = json.get("goodsId"); | ||||||
|  |         pay.money = amountForward; | ||||||
|  |         pay.extension = jsonObject.toString(); | ||||||
|  |         pay.sdkOrderId = orderno; | ||||||
|  |         //存入redis 存入成功就返回成功,后续在游戏服处理
 | ||||||
|  |         try { | ||||||
|  |             BaseGlobal.redisApp.hset(pay.serverId, "PAY_KEY", orderId, gson.toJson(pay), -1,false); | ||||||
|  |         } catch (Exception e) { | ||||||
|  |             e.printStackTrace(); | ||||||
|  |             out.print("FAILED"); | ||||||
|  |             out.flush(); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         LOGGER.info("玩家充值成功,存入redis----roleId={},orderId={},money={}", pay.roleId, pay.sdkOrderId,pay.money); | ||||||
|  |         out.print("SUCCESS"); | ||||||
|  |         out.flush(); | ||||||
|  |     } | ||||||
|  |     @Override | ||||||
|  |     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { | ||||||
|  |         this.doGet(req, resp); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static boolean sign(String ntdata0,String sign0,String md5Sign,String md5key){ | ||||||
|  |         String paramStr = ntdata0 + sign0 + md5key; | ||||||
|  |         String sign = MyMD5Util.encrypByMd5(paramStr); | ||||||
|  | //        LOGGER.info("加密前字符串:{}",paramStr);
 | ||||||
|  |         LOGGER.info("加密后得:{}",sign); | ||||||
|  |         if(sign.equals(md5Sign)){ | ||||||
|  |             return true; | ||||||
|  |         }else{ | ||||||
|  |             LOGGER.info("sign:{} md5Sign:{}",sign,md5Sign); | ||||||
|  |             return  false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static String decode(String src, String key) { | ||||||
|  |         if(src == null || src.isEmpty()){ | ||||||
|  |             return src; | ||||||
|  |         } | ||||||
|  |         Pattern pattern = Pattern.compile("@([^@]*)"); | ||||||
|  |         Matcher m = pattern.matcher(src); | ||||||
|  |         List<Integer> list = new ArrayList<>(); | ||||||
|  |         while (m.find()) { | ||||||
|  |             try { | ||||||
|  |                 String group = m.group(1); | ||||||
|  |                 if(group.isEmpty()) | ||||||
|  |                     continue; | ||||||
|  |                 list.add(Integer.valueOf(group)); | ||||||
|  |             } catch (Exception e) { | ||||||
|  |                 return src; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (!list.isEmpty()) { | ||||||
|  |             byte[] data = new byte[list.size()]; | ||||||
|  |             byte[] keys = key.getBytes(); | ||||||
|  |             for (int i = 0; i < data.length; i++) { | ||||||
|  |                 data[i] = (byte) (list.get(i) - (0xff & keys[i % keys.length])); | ||||||
|  |             } | ||||||
|  |             return new String(data); | ||||||
|  |         } else { | ||||||
|  |             return src; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static Map<String,String> getData(String xml){ | ||||||
|  |         //1.创建Reader对象
 | ||||||
|  |         SAXReader reader = new SAXReader(); | ||||||
|  |         StringReader sr = new StringReader(xml); | ||||||
|  |         InputSource is = new InputSource(sr); | ||||||
|  |         Map<String,String> map = new HashMap<>(); | ||||||
|  |         //2.加载xml
 | ||||||
|  |         try { | ||||||
|  |             Document document = reader.read(is); | ||||||
|  |             //3.获取根节点
 | ||||||
|  |             Element rootElement = document.getRootElement(); | ||||||
|  |             Iterator iterator = rootElement.elementIterator(); | ||||||
|  |             while (iterator.hasNext()){ | ||||||
|  |                 Element stu = (Element) iterator.next(); | ||||||
|  |                 LOGGER.info("======遍历子节点======"); | ||||||
|  |                 Iterator iterator1 = stu.elementIterator(); | ||||||
|  |                 while (iterator1.hasNext()){ | ||||||
|  |                     Element stuChild = (Element) iterator1.next(); | ||||||
|  |                     map.put(stuChild.getName(),stuChild.getStringValue()); | ||||||
|  |                     LOGGER.info("节点名:"+stuChild.getName()+"---节点值:"+stuChild.getStringValue()); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }catch (DocumentException e) { | ||||||
|  |             // TODO Auto-generated catch block
 | ||||||
|  |             e.printStackTrace(); | ||||||
|  |         } | ||||||
|  |         return map; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static void main(String[] args) throws Exception { | ||||||
|  |         String info = ""; | ||||||
|  |         String sig = MyMD5Util.encrypByMd5(info); | ||||||
|  |         System.out.println(sig); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -9,34 +9,6 @@ | ||||||
|         <!--<param-name>logbackConfigLocation</param-name>--> |         <!--<param-name>logbackConfigLocation</param-name>--> | ||||||
|         <!--<param-value>classpath:main/resources/logback.xml</param-value>--> |         <!--<param-value>classpath:main/resources/logback.xml</param-value>--> | ||||||
|     <!--</context-param>--> |     <!--</context-param>--> | ||||||
| 
 |  | ||||||
|     <servlet> |  | ||||||
|         <servlet-name>ksPostGift</servlet-name> |  | ||||||
|         <servlet-class>com.ljsd.controller.KSPostGiftController</servlet-class> |  | ||||||
|     </servlet> |  | ||||||
|     <servlet-mapping> |  | ||||||
|         <servlet-name>ksPostGift</servlet-name> |  | ||||||
|         <url-pattern>/ks/ksPostGift</url-pattern> |  | ||||||
|     </servlet-mapping> |  | ||||||
| 
 |  | ||||||
|     <servlet> |  | ||||||
|         <servlet-name>ksPayNotify</servlet-name> |  | ||||||
|         <servlet-class>com.ljsd.controller.KSPayNotifyController</servlet-class> |  | ||||||
|     </servlet> |  | ||||||
|     <servlet-mapping> |  | ||||||
|         <servlet-name>ksPayNotify</servlet-name> |  | ||||||
|         <url-pattern>/ks/ksPayNotify</url-pattern> |  | ||||||
|     </servlet-mapping> |  | ||||||
| 
 |  | ||||||
|     <servlet> |  | ||||||
|         <servlet-name>ksGetRoleList</servlet-name> |  | ||||||
|         <servlet-class>com.ljsd.controller.KSGetRoleListController</servlet-class> |  | ||||||
|     </servlet> |  | ||||||
|     <servlet-mapping> |  | ||||||
|         <servlet-name>ksGetRoleList</servlet-name> |  | ||||||
|         <url-pattern>/ks/ksGetRoleList</url-pattern> |  | ||||||
|     </servlet-mapping> |  | ||||||
| 
 |  | ||||||
|     <servlet> |     <servlet> | ||||||
|         <servlet-name>rechargeController</servlet-name> |         <servlet-name>rechargeController</servlet-name> | ||||||
|         <servlet-class>com.ljsd.controller.RechargeController</servlet-class> |         <servlet-class>com.ljsd.controller.RechargeController</servlet-class> | ||||||
|  | @ -73,21 +45,12 @@ | ||||||
|     </servlet-mapping> |     </servlet-mapping> | ||||||
| 
 | 
 | ||||||
|     <servlet> |     <servlet> | ||||||
|         <servlet-name>recharge9kController</servlet-name> |         <servlet-name>quickRechargeController</servlet-name> | ||||||
|         <servlet-class>com.ljsd.controller.Recharge9kController</servlet-class> |         <servlet-class>com.ljsd.controller.QuickRechargeController</servlet-class> | ||||||
|     </servlet> |     </servlet> | ||||||
|     <servlet-mapping> |     <servlet-mapping> | ||||||
|         <servlet-name>recharge9kController</servlet-name> |         <servlet-name>quickRechargeController</servlet-name> | ||||||
|         <url-pattern>/callback_yy</url-pattern> |         <url-pattern>/quickCallBack</url-pattern> | ||||||
|     </servlet-mapping> |  | ||||||
| 
 |  | ||||||
|     <servlet> |  | ||||||
|         <servlet-name>rebate9kController</servlet-name> |  | ||||||
|         <servlet-class>com.ljsd.controller.Rebate9kController</servlet-class> |  | ||||||
|     </servlet> |  | ||||||
|     <servlet-mapping> |  | ||||||
|         <servlet-name>rebate9kController</servlet-name> |  | ||||||
|         <url-pattern>/rebate_9K</url-pattern> |  | ||||||
|     </servlet-mapping> |     </servlet-mapping> | ||||||
| 
 | 
 | ||||||
|     <listener> |     <listener> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue