diff --git a/src/main/java/com/jmfy/controller/YouGuXQRechargeController.java b/src/main/java/com/jmfy/controller/YouGuXQRechargeController.java new file mode 100644 index 0000000..f04ce36 --- /dev/null +++ b/src/main/java/com/jmfy/controller/YouGuXQRechargeController.java @@ -0,0 +1,91 @@ +package com.jmfy.controller; + +import com.jmfy.paramBean.PaySdkEnum; +import com.jmfy.util.JsonUtil; +import com.jmfy.util.MD5Util; +import org.json.JSONObject; +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 YouGuXQRechargeController { + + @Resource + private PayLogic payLogic; + + private static final String PAYKEY = "afc0f968ddbdb0d1de3e59ddb01ad892"; + + private static final Logger LOGGER = LoggerFactory.getLogger(YouGuXQRechargeController.class); + + @RequestMapping(value = "/Web/youguXQCallback") + public String youguCallback(HttpServletRequest request) throws Exception { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("errno","1"); + + HashMap parameterMap = JsonUtil.getInstence().getParameterMap2(request); + if (parameterMap.isEmpty()) { + LOGGER.info("悠谷---》youguXQCallback data is null"); + jsonObject.put("errmsg","youguXQCallback data is null"); + return jsonObject.toString(); + } + boolean sign = verifySign(parameterMap); + if (!sign) { + LOGGER.info("悠谷---》sign error"); + jsonObject.put("errmsg","sign error"); + return jsonObject.toString(); + } + + String orderno = parameterMap.get("orderno"); // 51sfsy 支付订单号(唯一 + int amount = Integer.parseInt(parameterMap.get("amount"))*100; // 充值金额(单位:元)(需要换算成分) + String gameExt = request.getParameter("extinfo"); //透传参数,如CP下单有值提交,则会原样回传,不得超过255个字符 + String[] callback = gameExt.split("_"); + String result = payLogic.initOrder(gameExt, orderno, String.valueOf(amount), new Date(), callback[0], PaySdkEnum.YOUGU); + jsonObject.put("errmsg",result); + if (result.equals("SUCCESS")){ + jsonObject.put("errno","0"); + return jsonObject.toString(); + } + return jsonObject.toString(); + } + + + /** + * 验证sign + * @param map + * @return + */ + private boolean verifySign(Map map) { + String status = map.get("status"); // 状态(1 成功,2 失败)(目前支付失败不通知) + if (status == null || status.isEmpty() || !"1".equals(status)) { + LOGGER.error("youguXQCallback orderStatus={}", status); + return false; + } + String sid = map.get("sid"); //游戏区服标识 + String uid = map.get("uid"); //51sfsy 用户 ID + String orderno = map.get("orderno"); // 51sfsy 支付订单号(唯一 + String amount = map.get("amount"); // 充值金额(单位:元) + String gameExt = map.get("extinfo"); //透传参数,如CP下单有值提交,则会原样回传,不得超过255个字符 + String nonce = map.get("nonce"); //签名时间戳(由 51sfsy 服务端获取当前时间戳,用于生成签名) + String token = map.get("token"); //签名(规则见下 + + StringBuilder sbKey = new StringBuilder(); + sbKey.append(sid).append(uid).append(orderno).append(amount).append(gameExt).append(nonce).append(PAYKEY); + String mySign = MD5Util.encrypByMd5(sbKey.toString()); + if (!mySign.equals(token)) { + LOGGER.error("youguXQCallback==>roleUid={},sin derify fail, my sign={} sign={}", gameExt, mySign, token); + return false; + } + return true; + } +}