乘风游戏支付

master
duhui 2023-05-10 18:23:14 +08:00
parent 6201c2a6ce
commit 6fa6ea67a0
1 changed files with 81 additions and 0 deletions

View File

@ -0,0 +1,81 @@
package com.jmfy.controller;
import com.jmfy.paramBean.PaySdkEnum;
import com.jmfy.util.FengTiDesUtil;
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.Date;
import java.util.HashMap;
import java.util.Map;
/**
*
*/
@RestController
public class ChengfengRechargeController {
@Resource
private PayLogic payLogic;
private static final String Md5_Key = "87826953070847860565318328257005";
public static final String Callback_Key = "87826953070847860565318328257005";
private static final Logger LOGGER = LoggerFactory.getLogger(ChengfengRechargeController.class);
@RequestMapping(value = "/Web/chengfengCallback")
public String chengfengCallback(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");
String decode = FengTiDesUtil.decode(ntData, Callback_Key);
HashMap<String, String> data = (HashMap<String, String>) XmlUtil.readStringXmlOut(decode);
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 decodeNtData = FengTiDesUtil.decode(ntData, Callback_Key);
String sign = map.get("sign");
String decodeSign = FengTiDesUtil.decode(sign, Callback_Key);
String md5Sign = map.get("md5Sign");
StringBuilder localSign = new StringBuilder();
localSign.append(decodeNtData).append(decodeSign).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;
}
}