diff --git a/src/main/java/com/jmfy/controller/ChengfengRechargeController.java b/src/main/java/com/jmfy/controller/ChengfengRechargeController.java new file mode 100644 index 0000000..8b3a723 --- /dev/null +++ b/src/main/java/com/jmfy/controller/ChengfengRechargeController.java @@ -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 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 data = (HashMap) 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 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; + } +}