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: 'com.google.protobuf', name: 'protobuf-java', version: '2.5.0'
|
||||
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-value>classpath:main/resources/logback.xml</param-value>-->
|
||||
<!--</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-name>rechargeController</servlet-name>
|
||||
<servlet-class>com.ljsd.controller.RechargeController</servlet-class>
|
||||
|
@ -73,21 +45,12 @@
|
|||
</servlet-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>recharge9kController</servlet-name>
|
||||
<servlet-class>com.ljsd.controller.Recharge9kController</servlet-class>
|
||||
<servlet-name>quickRechargeController</servlet-name>
|
||||
<servlet-class>com.ljsd.controller.QuickRechargeController</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>recharge9kController</servlet-name>
|
||||
<url-pattern>/callback_yy</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-name>quickRechargeController</servlet-name>
|
||||
<url-pattern>/quickCallBack</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<listener>
|
||||
|
|
Loading…
Reference in New Issue