From 2ee0ee262e5638506471aa547dc4679857f3a479 Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 7 Apr 2022 14:27:27 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=88=B1=E7=8E=A9=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AiWanRechargeController.java | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/main/java/com/jmfy/controller/AiWanRechargeController.java diff --git a/src/main/java/com/jmfy/controller/AiWanRechargeController.java b/src/main/java/com/jmfy/controller/AiWanRechargeController.java new file mode 100644 index 0000000..0eaaeb3 --- /dev/null +++ b/src/main/java/com/jmfy/controller/AiWanRechargeController.java @@ -0,0 +1,102 @@ +package com.jmfy.controller; + +import com.jmfy.paramBean.PaySdkEnum; +import com.jmfy.util.DuoyouUtils; +import com.jmfy.util.JsonUtil; +import org.apache.commons.codec.digest.DigestUtils; +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.*; + +/** + * 爱玩游戏支付 + * @author hj + */ +@RestController +public class AiWanRechargeController { + + @Resource + private PayLogic payLogic; + + private static final String APP_ID = "lbqitk9b39vk9ee5"; + private static final String PAY_KEY = "qLFjFcmylTdgzzScwTmVGQkgLTvLRBQS"; + + private static final Logger LOGGER = LoggerFactory.getLogger(AiWanRechargeController.class); + + @RequestMapping(value = "/Web/aiwanCallback") + public String aiwanCallback(HttpServletRequest request) throws Exception { + HashMap parameterMap = JsonUtil.getInstence().getParameterMap2(request); + if (parameterMap.isEmpty()) { + LOGGER.info("aiwanGameCallback data is null"); + return "FAIL"; + } + + String do1 = request.getParameter("do"); //操作方法:suc 发货通知 + String site_uid = request.getParameter("site_uid"); //平台uid(爱玩SDK客户端返回account参数值) + String order_no = request.getParameter("order_no"); //游戏厂商订单号 + String app_id = request.getParameter("app_id"); //应用ID + String channel = request.getParameter("channel"); //渠道ID,431 微信App支付,265 支付宝App支付 + String amount = request.getParameter("amount"); //下单金额(原币),1单位是元 + String amount_unit = request.getParameter("amount_unit"); //货币单位 CNY + String amount_rate = request.getParameter("amount_rate"); //兑换美金的汇率值 + String amount_usd = request.getParameter("amount_usd"); //美金值 + String amount_change = request.getParameter("amount_change"); //下单金额,付款金额是有变动。1有变动,0无变动 + String ext = request.getParameter("ext"); //透传参数 + String out_trade_no = request.getParameter("out_trade_no"); //游戏方订单号 + String item_id = request.getParameter("item_id"); //商品ID + String create_time = request.getParameter("create_time"); //创建时间,10位Unix时间戳(秒) + String pay_time = request.getParameter("pay_time"); //付款时间,10位Unix时间戳(秒) + String time = request.getParameter("time"); //请求时间,10位Unix时间戳(秒) + String sign = request.getParameter("sign"); //签名 + + + LOGGER.info("aiwan======》{}", parameterMap); + + SortedMap map = new TreeMap<>(); + map.put("do",do1); + map.put("site_uid",site_uid); + map.put("order_no",order_no); + map.put("app_id",app_id); + map.put("channel",channel); + map.put("amount",amount); + map.put("amount_unit",amount_unit); + map.put("amount_rate",amount_rate); + map.put("amount_usd",amount_usd); + map.put("amount_change",amount_change); + map.put("ext",ext); + map.put("out_trade_no",out_trade_no); + map.put("item_id",item_id); + map.put("create_time",create_time); + map.put("pay_time",pay_time); + map.put("time",time); + + boolean valid = verifySign(map, sign); + if (!valid) { + LOGGER.info("callback==>extra={},sin verify fail", ext); + return "FAIL"; + } + + int rmb = Integer.parseInt(amount) * 100; + return payLogic.initOrder(ext,out_trade_no,String.valueOf(rmb),new Date(),site_uid, PaySdkEnum.DUOYOU); + } + + private static boolean verifySign(Map map, String sign){ + if (map == null || map.isEmpty()) { + return false; + } + StringBuilder builder = new StringBuilder(); + for (Map.Entry entry : map.entrySet()) { + builder.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); + } + String substring = builder.substring(0, builder.length() - 1); + LOGGER.info("AiWan参数拼装sign(未加密):" + substring + PAY_KEY); + String md5Hex = DigestUtils.md5Hex(substring + PAY_KEY); + LOGGER.info("AiWan参数拼装sign(加密后):" + md5Hex); + return md5Hex.equals(sign); + } +} From 5824d7e188b20367d3efde505aeb31bbf7f4908c Mon Sep 17 00:00:00 2001 From: duhui Date: Thu, 7 Apr 2022 18:24:06 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E7=88=B1=E7=8E=A9=E6=94=AF=E4=BB=98,?= =?UTF-8?q?=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jmfy/controller/AiWanRechargeController.java | 2 +- src/main/java/com/jmfy/controller/PayLogic.java | 8 ++++++-- src/main/java/com/jmfy/paramBean/PaySdkEnum.java | 1 + src/main/thrift/idl/core.thrift | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/jmfy/controller/AiWanRechargeController.java b/src/main/java/com/jmfy/controller/AiWanRechargeController.java index 0eaaeb3..cfee44a 100644 --- a/src/main/java/com/jmfy/controller/AiWanRechargeController.java +++ b/src/main/java/com/jmfy/controller/AiWanRechargeController.java @@ -82,7 +82,7 @@ public class AiWanRechargeController { } int rmb = Integer.parseInt(amount) * 100; - return payLogic.initOrder(ext,out_trade_no,String.valueOf(rmb),new Date(),site_uid, PaySdkEnum.DUOYOU); + return payLogic.initOrder(ext,out_trade_no,String.valueOf(rmb),new Date(),site_uid, PaySdkEnum.AIWAN); } private static boolean verifySign(Map map, String sign){ diff --git a/src/main/java/com/jmfy/controller/PayLogic.java b/src/main/java/com/jmfy/controller/PayLogic.java index aad93e2..96afe53 100644 --- a/src/main/java/com/jmfy/controller/PayLogic.java +++ b/src/main/java/com/jmfy/controller/PayLogic.java @@ -36,6 +36,10 @@ public class PayLogic { private PayLogic() { } + public String initOrder(String collBackInfo, String orderId, String amount, Date time, String openId, PaySdkEnum sdk){ + return initOrder(collBackInfo,orderId,amount,time,openId,sdk,""); + } + /** * * @param collBackInfo 回调参数 @@ -46,7 +50,7 @@ public class PayLogic { * @param sdk sdk,支付渠道标识 * @return */ - public String initOrder(String collBackInfo, String orderId, String amount, Date time, String openId, PaySdkEnum sdk){ + public String initOrder(String collBackInfo, String orderId, String amount, Date time, String openId, PaySdkEnum sdk, String ext){ try { // 角色id_物品id_ccId_平台 String[] collback = collBackInfo.split("_"); @@ -95,7 +99,7 @@ public class PayLogic { LOGGER.info("serviceKey : " + serviceKey); try { rPCClient = ClientAdapterPo.getClientAdapterPo(serviceKey); - result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(), goodsId, openId, orderId, 0, (int)Double.parseDouble(amount)); + result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(), goodsId, openId, orderId, 0, (int)Double.parseDouble(amount), ext); } catch (Exception e) { LOGGER.info("callback=>", e); } finally { diff --git a/src/main/java/com/jmfy/paramBean/PaySdkEnum.java b/src/main/java/com/jmfy/paramBean/PaySdkEnum.java index 2feeb16..f3c97d2 100644 --- a/src/main/java/com/jmfy/paramBean/PaySdkEnum.java +++ b/src/main/java/com/jmfy/paramBean/PaySdkEnum.java @@ -15,6 +15,7 @@ public enum PaySdkEnum { YX(5,"YX"), DY(6,"DY"), DUOYOU(7,"DUOYOU"), + AIWAN(8,"AIWAN"), ; private int id; diff --git a/src/main/thrift/idl/core.thrift b/src/main/thrift/idl/core.thrift index 38e8a4b..ae32965 100644 --- a/src/main/thrift/idl/core.thrift +++ b/src/main/thrift/idl/core.thrift @@ -7,5 +7,5 @@ struct Result { } service RPCRequestIFace{ - Result deliveryRecharge(1:i32 uid, 2:string goodsId,3: string openId,4: string orderId,5: i64 orderTime, 6:i32 amount); + Result deliveryRecharge(1:i32 uid, 2:string goodsId,3: string openId,4: string orderId,5: i64 orderTime, 6:i32 amount, 7:string ext); } \ No newline at end of file From 71b8c9e2103a522f2b3d1cc8e130725149f635e9 Mon Sep 17 00:00:00 2001 From: duhui Date: Fri, 8 Apr 2022 10:59:11 +0800 Subject: [PATCH 3/3] =?UTF-8?q?rpc=E6=97=A0=E7=94=A8=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/jmfy/controller/PayLogic.java | 2 +- src/main/thrift/idl/core.thrift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/jmfy/controller/PayLogic.java b/src/main/java/com/jmfy/controller/PayLogic.java index 96afe53..fdbfab6 100644 --- a/src/main/java/com/jmfy/controller/PayLogic.java +++ b/src/main/java/com/jmfy/controller/PayLogic.java @@ -99,7 +99,7 @@ public class PayLogic { LOGGER.info("serviceKey : " + serviceKey); try { rPCClient = ClientAdapterPo.getClientAdapterPo(serviceKey); - result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(), goodsId, openId, orderId, 0, (int)Double.parseDouble(amount), ext); + result = rPCClient.getClient().deliveryRecharge(cUserInfo.getId(), goodsId, openId, orderId, 0, (int)Double.parseDouble(amount)); } catch (Exception e) { LOGGER.info("callback=>", e); } finally { diff --git a/src/main/thrift/idl/core.thrift b/src/main/thrift/idl/core.thrift index ae32965..38e8a4b 100644 --- a/src/main/thrift/idl/core.thrift +++ b/src/main/thrift/idl/core.thrift @@ -7,5 +7,5 @@ struct Result { } service RPCRequestIFace{ - Result deliveryRecharge(1:i32 uid, 2:string goodsId,3: string openId,4: string orderId,5: i64 orderTime, 6:i32 amount, 7:string ext); + Result deliveryRecharge(1:i32 uid, 2:string goodsId,3: string openId,4: string orderId,5: i64 orderTime, 6:i32 amount); } \ No newline at end of file