增加quick支付

main
DESKTOP-C3M45P4\dengdan 2024-11-29 22:33:03 +08:00
parent 17dffdc483
commit fa4dd026c0
3 changed files with 206 additions and 41 deletions

View File

@ -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'
}

View File

@ -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);
}
}

View File

@ -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>