疯体ios支付

master
duhui 2023-05-09 10:32:27 +08:00
parent 7faaa5aa2b
commit bdc8db7b39
5 changed files with 317 additions and 1 deletions

View File

@ -0,0 +1,73 @@
package com.jmfy.controller;
import com.jmfy.paramBean.PaySdkEnum;
import com.jmfy.util.JsonUtil;
import com.jmfy.util.MD5Util;
import com.jmfy.util.XmlUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
*
*/
@RestController
public class FengtiIOSRechargeController {
@Resource
private PayLogic payLogic;
private static final String Md5_Key = "69059243697666791013328131742528";
private static final Logger LOGGER = LoggerFactory.getLogger(FengtiIOSRechargeController.class);
@RequestMapping(value = "/Web/fengtiIOSCallback")
public String fengtiIOSCallback(HttpServletRequest request) throws Exception {
String result = "error";
HashMap<String, String> requestMap = JsonUtil.getInstence().getParameterMap2(request);
if (requestMap.isEmpty()) {
LOGGER.info("疯体 request data is null");
return result;
}
boolean sign = verifySign(requestMap);
if (!sign) {
LOGGER.info("疯体---》sign error");
return result;
}
String ntData = requestMap.get("nt_data");
HashMap<String, String> data = (HashMap<String, String>) XmlUtil.readStringXmlOut(ntData);
String orderno = data.get("out_order_no"); // 支付订单号
double amount = Double.parseDouble(data.get("amount")) * 100; //充值金额(单位:元)(需要换算成分)
String gameExt = data.get("extras_params"); //透传参数如CP下单有值提交则会原样回传不得超过255个字符
String[] callback = gameExt.split("_");
return payLogic.initOrder(gameExt, orderno, String.valueOf(amount), new Date(), callback[0], PaySdkEnum.FENGTIIOS);
}
/**
* sign
* @param map
* @return
*/
private boolean verifySign(Map<String, String> map) {
String ntData = map.get("nt_data");
String sign = map.get("sign");
String md5Sign = map.get("md5Sign");
StringBuilder localSign = new StringBuilder();
localSign.append(ntData).append(sign).append(Md5_Key);
String mySign = MD5Util.encrypByMd5(localSign.toString());
if (mySign.equals(md5Sign)) {
return true;
}
LOGGER.error("疯体==>,sign fail, localSign={}md5Sign={}map={}", localSign, md5Sign, map);
return false;
}
}

View File

@ -19,6 +19,7 @@ import java.util.*;
* ios * ios
*/ */
@RestController @RestController
@Deprecated
public class OhayooRechargeController { public class OhayooRechargeController {
@Resource @Resource
private PayLogic payLogic; private PayLogic payLogic;

View File

@ -19,7 +19,8 @@ public enum PaySdkEnum {
HANFAN(9,"HAOFAN"), HANFAN(9,"HAOFAN"),
FENGTIIOS(10,"FENGTIIOS"), FENGTIIOS(10,"FENGTIIOS"),
ANJIU(11, "ANJIU"), ANJIU(11, "ANJIU"),
YOUGU(12,"YOUGU") YOUGU(12,"YOUGU"),
FENGTI(13,"FENGTI"),
; ;
private int id; private int id;

View File

@ -0,0 +1,65 @@
package com.jmfy.util;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FengTiDesUtil {
private final static Pattern pattern = Pattern.compile("\\d+");
private final static String charset="utf-8";
public static String encode(String src,String key) {
try {
byte[] data = src.getBytes(charset);
byte[] keys = key.getBytes();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.length; i++) {
int n = (0xff & data[i]) + (0xff & keys[i % keys.length]);
sb.append("@" + n);
}
return sb.toString();
}catch (UnsupportedEncodingException e){
e.printStackTrace();
}
return src;
}
public static String decode(String src,String key) {
if(src == null || src.length() == 0){
return src;
}
Matcher m = pattern.matcher(src);
List<Integer> list = new ArrayList<Integer>();
while (m.find()) {
try {
String group = m.group();
list.add(Integer.valueOf(group));
} catch (Exception e) {
e.printStackTrace();
return src;
}
}
if (list.size() > 0) {
try {
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, charset);
} catch (UnsupportedEncodingException e){
e.printStackTrace();
}
return src;
} else {
return src;
}
}
}

View File

@ -0,0 +1,176 @@
package com.jmfy.util;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class XmlUtil {
public void readStringXml(String xml) {
Document doc = null;
try {
// 读取并解析XML文档
// SAXReader就是一个管道用一个流的方式把xml文件读出来
//
// SAXReader reader = new SAXReader(); //User.hbm.xml表示你要解析的xml文档
// Document document = reader.read(new File("User.hbm.xml"));
// 下面的是通过解析xml字符串的
doc = DocumentHelper.parseText(xml); // 将字符串转为XML
Element rootElt = doc.getRootElement(); // 获取根节点
System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称
Iterator iter = rootElt.elementIterator("head"); // 获取根节点下的子节点head
// 遍历head节点
while (iter.hasNext()) {
Element recordEle = (Element) iter.next();
String title = recordEle.elementTextTrim("title"); // 拿到head节点下的子节点title值
System.out.println("title:" + title);
Iterator iters = recordEle.elementIterator("script"); // 获取子节点head下的子节点script
// 遍历Header节点下的Response节点
while (iters.hasNext()) {
Element itemEle = (Element) iters.next();
String username = itemEle.elementTextTrim("username"); // 拿到head下的子节点script下的字节点username的值
String password = itemEle.elementTextTrim("password");
System.out.println("username:" + username);
System.out.println("password:" + password);
}
}
Iterator iterss = rootElt.elementIterator("body"); ///获取根节点下的子节点body
// 遍历body节点
while (iterss.hasNext()) {
Element recordEless = (Element) iterss.next();
String result = recordEless.elementTextTrim("result"); // 拿到body节点下的子节点result值
System.out.println("result:" + result);
Iterator itersElIterator = recordEless.elementIterator("form"); // 获取子节点body下的子节点form
// 遍历Header节点下的Response节点
while (itersElIterator.hasNext()) {
Element itemEle = (Element) itersElIterator.next();
String banlce = itemEle.elementTextTrim("banlce"); // 拿到body下的子节点form下的字节点banlce的值
String subID = itemEle.elementTextTrim("subID");
System.out.println("banlce:" + banlce);
System.out.println("subID:" + subID);
}
}
} catch (DocumentException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @description xmlmap
* @param xml
* @return Map
*/
public static Map readStringXmlOut(String xml) {
Map map = new HashMap();
Document doc = null;
try {
// 将字符串转为XML
doc = DocumentHelper.parseText(xml);
// 获取根节点
Element rootElt = doc.getRootElement();
// 拿到根节点的名称
System.out.println("根节点:" + rootElt.getName());
// 获取根节点下的子节点head
Iterator iter = rootElt.elementIterator("head");
// 遍历head节点
while (iter.hasNext()) {
Element recordEle = (Element) iter.next();
// 拿到head节点下的子节点title值
String title = recordEle.elementTextTrim("title");
System.out.println("title:" + title);
map.put("title", title);
// 获取子节点head下的子节点script
Iterator iters = recordEle.elementIterator("script");
// 遍历Header节点下的Response节点
while (iters.hasNext()) {
Element itemEle = (Element) iters.next();
// 拿到head下的子节点script下的字节点username的值
String username = itemEle.elementTextTrim("username");
String password = itemEle.elementTextTrim("password");
System.out.println("username:" + username);
System.out.println("password:" + password);
map.put("username", username);
map.put("password", password);
}
}
//获取根节点下的子节点body
Iterator iterss = rootElt.elementIterator("body");
// 遍历body节点
while (iterss.hasNext()) {
Element recordEless = (Element) iterss.next();
// 拿到body节点下的子节点result值
String result = recordEless.elementTextTrim("result");
System.out.println("result:" + result);
// 获取子节点body下的子节点form
Iterator itersElIterator = recordEless.elementIterator("form");
// 遍历Header节点下的Response节点
while (itersElIterator.hasNext()) {
Element itemEle = (Element) itersElIterator.next();
// 拿到body下的子节点form下的字节点banlce的值
String banlce = itemEle.elementTextTrim("banlce");
String subID = itemEle.elementTextTrim("subID");
System.out.println("banlce:" + banlce);
System.out.println("subID:" + subID);
map.put("result", result);
map.put("banlce", banlce);
map.put("subID", subID);
}
}
} catch (DocumentException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
public static void main(String[] args) {
// 下面是需要解析的xml字符串例子
String xmlString = "<html>" + "<head>" + "<title>dom4j解析一个例子</title>"
+ "<script>" + "<username>yangrong</username>"
+ "<password>123456</password>" + "</script>" + "</head>"
+ "<body>" + "<result>0</result>" + "<form>"
+ "<banlce>1000</banlce>" + "<subID>36242519880716</subID>"
+ "</form>" + "</body>" + "</html>";
/*
* Test2 test = new Test2(); test.readStringXml(xmlString);
*/
Map map = readStringXmlOut(xmlString);
Iterator iters = map.keySet().iterator();
while (iters.hasNext()) {
String key = iters.next().toString(); // 拿到键
String val = map.get(key).toString(); // 拿到值
System.out.println(key + "=" + val);
}
}
}