From df4733091b30b0434a04dacd0e844663114d4cfe Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期三, 09 七月 2025 17:51:56 +0800 Subject: [PATCH] 修改支付宝支付和bug修改 --- cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java | 143 +-- cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/DeptController.java | 6 cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java | 146 +-- cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DeptServiceImpl.java | 35 cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java | 21 cloud-server-management/src/main/java/com/dsh/course/mapper/RoleMapper.java | 2 cloud-server-account/src/main/java/com/dsh/account/service/impl/VipPaymentServiceImpl.java | 4 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RoleServiceImpl.java | 19 cloud-server-management/src/main/resources/mapper/DeptMapper.xml | 29 cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java | 1 cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java | 149 +-- cloud-server-management/src/main/resources/mapper/RoleMapper.xml | 22 cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html | 2 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java | 134 +-- cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupServiceImpl.java | 45 + cloud-server-management/src/main/java/com/dsh/course/mapper/DeptMapper.java | 7 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/RoleController.java | 2 cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java | 137 +-- cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java | 4 cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java | 161 ++-- cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupService.java | 3 cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java | 465 +++++++------ cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java | 3 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java | 251 +++---- cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java | 149 +-- cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java | 3 cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java | 3 cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js | 14 28 files changed, 962 insertions(+), 998 deletions(-) diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java index bee4929..1470c33 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java +++ b/cloud-server-account/src/main/java/com/dsh/account/controller/PaymentCallbackController.java @@ -297,6 +297,7 @@ @PostMapping("/base/pointMer/exchangeGoodPaymentAliCallback") public void exchangeGoodPaymentAliCallback(HttpServletRequest request, HttpServletResponse response) { try { + System.err.println("积分商品支付宝回调"); Map<String, String> map = payMoneyUtil.alipayCallback(request); if (null != map) { String out_trade_no = map.get("out_trade_no"); diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java b/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java index 9664571..31be31a 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java @@ -1,5 +1,6 @@ package com.dsh.account.service; +import com.alipay.api.AlipayApiException; import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.account.dto.BindDto; import com.dsh.account.dto.SelectDto; @@ -161,7 +162,7 @@ - ResultUtil exchangeAddPaymentCallback(String code, String orderNumber); + ResultUtil exchangeAddPaymentCallback(String code, String orderNumber) throws AlipayApiException; List<StoreResponse> queryStoresOfExchange(Integer goodsType, Integer pointsMerId); diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java index 261559a..c8b72d8 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java @@ -193,9 +193,6 @@ private GameRecordClient gameRecordClient; - - - // 对数据进行分页处理的方法 private static Page<Goods> getPage(List<Goods> dataList, Pageable pageable) { int start = (int) pageable.getOffset(); @@ -947,14 +944,14 @@ List<WorldCupPayment> worldCupPayment = worldCupPaymentClinet.getWorldCupPayment(getWorldCupPayment); for (WorldCupPayment cupPayment : worldCupPayment) { ConsumeDetail consumeDetail = new ConsumeDetail(); - if(cupPayment.getPayStatus() != 3){ + if (cupPayment.getPayStatus() != 3) { consumeDetail.setConsumeName(RechargeRecordEnum.WORLD_CIP_PAYMENT.getMsg()); consumeDetail.setConsumeTime(simpleDateFormat.format(cupPayment.getCreateTime())); consumeDetail.setConsumeAmount("-" + cupPayment.getAmount()); consumeDetail.setType(2); consumeDetail.setDateTime(cupPayment.getPayTime().getTime()); details.add(consumeDetail); - }else{ + } else { consumeDetail = new ConsumeDetail(); consumeDetail.setConsumeName(RechargeRecordEnum.WORLD_CIP_PAYMENT.getMsg()); consumeDetail.setConsumeTime(simpleDateFormat.format(cupPayment.getCreateTime())); @@ -1245,7 +1242,7 @@ } TAppUser tAppUser1 = appUserMapper.selectOne(new LambdaQueryWrapper<TAppUser>() .eq(TAppUser::getPhone, dto.getInvitePhone()).eq(TAppUser::getState, 1)); - if(null == tAppUser1){ + if (null == tAppUser1) { return ResultUtil.error("邀请人还未注册账号"); } Map<String, String> geocode = null; @@ -1383,7 +1380,7 @@ userCouponPayment.setInsertTime(new Date()); //积分兑换 - if(coupon.getRedemptionMethod() == 1){ + if (coupon.getRedemptionMethod() == 1) { UserCoupon userCoupon = new UserCoupon(); userCoupon.setCouponId(exchangeType.getGoodId()); userCoupon.setUserId(userIdFormRedis); @@ -1404,13 +1401,13 @@ return ResultUtil.success(returnId); } //积分+现金 - if(coupon.getRedemptionMethod() == 2){ + if (coupon.getRedemptionMethod() == 2) { userCouponPaymentClient.addUserCouponPayment(userCouponPayment); try { - if(exchangeType.getPayType() == 1){ + if (exchangeType.getPayType() == 1) { return weChatPaymentCoupon("购买优惠券", userCouponPayment); } - if(exchangeType.getPayType() == 2){ + if (exchangeType.getPayType() == 2) { return aliPaymentCoupon("购买优惠券", userCouponPayment); } } catch (Exception e) { @@ -1418,14 +1415,14 @@ } } } - System.out.println("兑换积分商品"+exchangeType); + System.out.println("兑换积分商品" + exchangeType); try { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); PointsMerchandise merchandise = new PointsMerchandise(); - if(exchangeType.getGoodsType() != 4){ + if (exchangeType.getGoodsType() != 4) { merchandise = mcClient.selectPointsMerchandiseById(exchangeType.getGoodId()); - }else{ + } else { Coupon coupon = ucponClient.queryCouponById(exchangeType.getGoodId()); merchandise.setId(coupon.getId()); merchandise.setUserPopulation(coupon.getUserPopulation()); @@ -1516,26 +1513,26 @@ pointsMerchandise.setCode(code); pointsMerchandise.setInsertTime(new Date()); pointsMerchandise.setPayType(exchangeType.getExchangeType()); - if(null != merchandise.getIntegral()){ + if (null != merchandise.getIntegral()) { pointsMerchandise.setIntegral(merchandise.getIntegral() * goodsNums); } - if(exchangeType.getExchangeType() == 2 || exchangeType.getExchangeType() == 3){ + if (exchangeType.getExchangeType() == 2 || exchangeType.getExchangeType() == 3) { pointsMerchandise.setCash(merchandise.getCash()); pointsMerchandise.setCashPayType(exchangeType.getPayType()); } - + Double m = new BigDecimal((merchandise.getIntegral() == null ? 0 : merchandise.getIntegral())).add((merchandise.getCash() == null ? BigDecimal.ZERO : merchandise.getCash())).doubleValue(); - if((m * goodsNums) == 0) { + if ((m * goodsNums) == 0) { pointsMerchandise.setPayStatus(2); pointsMerchandise.setPaymentTime(new Date()); } returnId = mcClient.saveDetailsUserPointMercase(pointsMerchandise); - if((m * goodsNums) == 0 && pointsMerchandise.getPayStatus() == 2){ + if ((m * goodsNums) == 0 && pointsMerchandise.getPayStatus() == 2) { returnModel.setReturnId(returnId); return ResultUtil.success(returnModel); } - System.err.println("兑换方式"+exchangeType); + System.err.println("兑换方式" + exchangeType); switch (exchangeType.getExchangeType()) { // 积分 case 1: @@ -1629,11 +1626,11 @@ coursePackageOrder.setInsertTime(new Date()); coursePackageOrder.setOrderType(2); paymentClient.savePaymentCoursePackage(coursePackageOrder); - return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code,merchandise.getId()); - } else if (merchandise.getType() == 1){ - return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(goodsNums)), code,merchandise.getId()); - }else if(merchandise.getType() == 3){ - return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(goodsNums)), code,merchandise.getId()); + return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code, merchandise.getId()); + } else if (merchandise.getType() == 1) { + return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(goodsNums)), code, merchandise.getId()); + } else if (merchandise.getType() == 3) { + return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(goodsNums)), code, merchandise.getId()); } } catch (Exception e) { return ResultUtil.runErr(); @@ -1653,9 +1650,9 @@ case 1: try { if (merchandise.getType() == 2) { - return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code,merchandise.getId()); + return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(exchangeType.getStuIds().size())), code, merchandise.getId()); } else { - return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(goodsNums)), code,merchandise.getId()); + return WechatPayment(merchandise.getType(), merchandise.getCash().multiply(new BigDecimal(goodsNums)), code, merchandise.getId()); } } catch (Exception e) { return ResultUtil.runErr(); @@ -1685,6 +1682,7 @@ /** * 优惠券微信支付 + * * @param body * @param userCouponPayment * @return @@ -1697,24 +1695,25 @@ Coupon coupon = userConponClient.queryCouponById(couponId); List<Integer> couponStoreIds = userConponClient.getCouponStoreIds(couponId); System.err.println("购买优惠券"); - if (coupon!=null){ - if (!couponStoreIds.isEmpty()&&!couponStoreIds.contains(-1)){ - // 微信商户号 - String s2 = storeClient.getmerchantNumberByOperatorId(couponStoreIds.get(0)); - System.err.println("微信商户号"+s2); + if (coupon != null) { + if (!couponStoreIds.isEmpty() && !couponStoreIds.contains(-1)) { + Store store = storeClient.queryStoreById(couponStoreIds.get(0)); + // 微信商户号 + String s2 = storeClient.getmerchantNumberByOperatorId(store.getOperatorId()); + System.err.println("微信商户号" + s2); - if(!StringUtils.hasLength(s2)){ - return ResultUtil.error("运营商未配置微信商户号,获取支付失败!"); - } - ResultUtil weixinpay = payMoneyUtil.weixinpayV3(s2,"购买优惠券", - code,"/base/coupon/weChatPaymentCouponCallback1", - cash.toString()); - return weixinpay; + if (!StringUtils.hasLength(s2)) { + return ResultUtil.error("运营商未配置微信商户号,获取支付失败!"); + } + ResultUtil weixinpay = payMoneyUtil.weixinpayV3(s2, "购买优惠券", + code, "/base/coupon/weChatPaymentCouponCallback1", + cash.toString()); + return weixinpay; - }else{ + } else { // 平台发布 - ResultUtil weixinpay = payMoneyUtil.weixinpay(body, "", code, cash.toString(), - "/base/coupon/weChatPaymentCouponCallback", "APP", ""); + ResultUtil weixinpay = payMoneyUtil.weixinpay(body, "", code, cash.toString(), + "/base/coupon/weChatPaymentCouponCallback", "APP", ""); return weixinpay; } } @@ -1730,118 +1729,110 @@ * @throws Exception */ private String smid = "2088330203191220";//平台支付宝商户号 + public ResultUtil aliPaymentCoupon(String body, UserCouponPayment userCouponPayment) throws Exception { + ResultUtil alipay= ResultUtil.error(""); + String smidRes = smid;// 结算资金到商户号 String code = userCouponPayment.getCode(); Double cash = userCouponPayment.getCash(); Integer couponId = userCouponPayment.getCouponId(); Coupon coupon = userConponClient.queryCouponById(couponId); List<Integer> couponStoreIds = userConponClient.getCouponStoreIds(couponId); - if (coupon!=null){ - if (!couponStoreIds.isEmpty()&&!couponStoreIds.contains(-1)){ - // 门店 向上查询运营商 - Store store = storeClient.queryStoreById(couponStoreIds.get(0)); - if (store.getOperatorId()==null || store.getOperatorId()==0){ - // 平台 - ResultUtil alipay = payMoneyUtil.alipay(smid, body, "",String.valueOf(userCouponPayment.getId()), code, cash.toString(), - "/base/coupon/aliPaymentCouponCallback"); - return alipay; - }else{ - // 支付宝商户号 - String s2 = storeClient.getmerchantNumberAliByOperatorId(store.getOperatorId()); - System.err.println("支付宝商户号"+s2); + if (coupon != null) { + if (!couponStoreIds.isEmpty() && !couponStoreIds.contains(-1)) { + // 门店 向上查询运营商 + Store store = storeClient.queryStoreById(couponStoreIds.get(0)); + if (store.getOperatorId() == null || store.getOperatorId() == 0) { - if(!StringUtils.hasLength(s2)){ - return ResultUtil.error("运营商未配置支付宝商户号,获取支付失败!"); - } - ResultUtil alipay = payMoneyUtil.alipay(s2, body, "",String.valueOf(userCouponPayment.getId()), code, cash.toString(), - "/base/coupon/aliPaymentCouponCallback"); - return alipay; + } else { + // 支付宝商户号 + String s2 = storeClient.getmerchantNumberAliByOperatorId(store.getOperatorId()); + System.err.println("支付宝商户号" + s2); + + if (!StringUtils.hasLength(s2)) { + return ResultUtil.error("运营商未配置支付宝商户号,获取支付失败!"); } - }else { - // 平台发布 - ResultUtil alipay = payMoneyUtil.alipay(smid, body, "",String.valueOf(userCouponPayment.getId()), code, cash.toString(), - "/base/coupon/aliPaymentCouponCallback"); - return alipay; + smidRes = s2; + } } } -// ResultUtil alipay = payMoneyUtil.alipay(smid, body, "",String.valueOf(userCouponPayment.getId()), code, cash.toString(), -// "/base/coupon/aliPaymentCouponCallback"); -// if (alipay.getCode() == 200) { -// new Thread(new Runnable() { -// @Override -// public void run() { -// try { -// Thread.sleep(1000); -// -// int num = 1; -// int wait = 0; -// while (num <= 10) { -// int min = 5000; -// wait += (min * num); -// Thread.sleep(wait); -// UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code); -// if (userCouponPayment1.getStatus() == 2) { -// break; -// } -// AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code); -// if (null != alipayTradeQueryResponse) { -// /** -// * WAIT_BUYER_PAY(交易创建,等待买家付款)、 -// * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 -// * TRADE_SUCCESS(交易支付成功)、 -// * TRADE_FINISHED(交易结束,不可退款) -// */ -// String s = alipayTradeQueryResponse.getTradeStatus(); -// -// String tradeNo = alipayTradeQueryResponse.getTradeNo(); -// if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { -// //有待支付的订单,这里不处理 -// userCouponPayment1.setStatus(-1); -// userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1); -// if ("TRADE_FINISHED".equals(s)) { -// // todo 资金结算 -// -// } -// break; -// } -// if ("TRADE_SUCCESS".equals(s)) { -// userCouponPayment1.setStatus(2); -// userCouponPayment1.setPaymentTime(new Date()); -// userCouponPayment1.setOrderNumber(tradeNo); -// userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1); -// UserCoupon userCoupon = new UserCoupon(); -// userCoupon.setCouponId(userCouponPayment1.getCouponId()); -// userCoupon.setUserId(userCouponPayment1.getUserId()); -// userCoupon.setStatus(1); -// userCoupon.setInsertTime(new Date()); -// userConponClient.insertToAppuserCoupon(userCoupon); -// if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){ -// //扣积分 -// TAppUser user = appUserService.getById(userCouponPayment1.getUserId()); -// user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue()); -// appUserService.updateById(user); -// } -//// payMoneyUtil.confirm(smid,code,tradeNo,cash.toString()); -// break; -// -// } -// -// if ("WAIT_BUYER_PAY".equals(s)) { -// num++; -// } -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// }).start(); -// } - return ResultUtil.error("支付失败"); + alipay = payMoneyUtil.alipay(smidRes, body, "",String.valueOf(userCouponPayment.getId()), code, cash.toString(), + "/base/coupon/aliPaymentCouponCallback"); + if (alipay.getCode() == 200) { + String finalSmidRes = smidRes; + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(1000); + + int num = 1; + int wait = 0; + while (num <= 10) { + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + UserCouponPayment userCouponPayment1 = userCouponPaymentClient.getUserCouponPayment(code); + if (userCouponPayment1.getStatus() == 2) { + break; + } + AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(code); + if (null != alipayTradeQueryResponse) { + /** + * WAIT_BUYER_PAY(交易创建,等待买家付款)、 + * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 + * TRADE_SUCCESS(交易支付成功)、 + * TRADE_FINISHED(交易结束,不可退款) + */ + String s = alipayTradeQueryResponse.getTradeStatus(); + + String tradeNo = alipayTradeQueryResponse.getTradeNo(); + if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { + //有待支付的订单,这里不处理 + userCouponPayment1.setStatus(-1); + userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1); + + break; + } + if ("TRADE_SUCCESS".equals(s)) { + userCouponPayment1.setStatus(2); + userCouponPayment1.setPaymentTime(new Date()); + userCouponPayment1.setOrderNumber(tradeNo); + userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1); + UserCoupon userCoupon = new UserCoupon(); + userCoupon.setCouponId(userCouponPayment1.getCouponId()); + userCoupon.setUserId(userCouponPayment1.getUserId()); + userCoupon.setStatus(1); + userCoupon.setInsertTime(new Date()); + userConponClient.insertToAppuserCoupon(userCoupon); + if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){ + //扣积分 + TAppUser user = appUserService.getById(userCouponPayment1.getUserId()); + user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue()); + appUserService.updateById(user); + } + Thread.sleep(30000); + payMoneyUtil.confirm(finalSmidRes,code,tradeNo,cash.toString()); + break; + } + + if ("WAIT_BUYER_PAY".equals(s)) { + num++; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + return alipay; } /** * 支付回调 + * * @param code * @param orderNumber * @return @@ -1865,7 +1856,7 @@ userCoupon.setInsertTime(new Date()); userConponClient.insertToAppuserCoupon(userCoupon); - if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){ + if (null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()) { //扣积分 SaveUserIntegralChangesVo vo = new SaveUserIntegralChangesVo(); vo.setAppUserId(userCouponPayment1.getUserId()); @@ -1903,19 +1894,18 @@ } private ResultUtil AlipayPayment(Integer type, BigDecimal cash, String code, Integer returnId) { + ResultUtil alipay= ResultUtil.error(""); + String smidRes = smid;// 结算资金到商户号 PointsMerchandise pointsMerchandise = mcClient.selectPointsMerchandiseById(returnId); - System.err.println("查询积分商品"+pointsMerchandise); + System.err.println("查询积分商品" + pointsMerchandise); List<Integer> integers = mcsClient.queryPointMerStoreIds(pointsMerchandise.getId()); - String name = (type == 1 ? "购买实体商品" : type == 2 ? "报名运动营": type == 3 ? "购买门票" : "购买优惠券"); + String name = (type == 1 ? "购买实体商品" : type == 2 ? "报名运动营" : type == 3 ? "购买门票" : "购买优惠券"); switch (type) { case 1: if (!integers.isEmpty()) { Store store1 = storeClient.queryStoreById(integers.get(0)); if (store1.getOperatorId() == null || store1.getOperatorId() == 0) { - // 平台门票 - ResultUtil alipay = payMoneyUtil.alipay(smid, name, name, String.valueOf(returnId), code, cash.toString(), - "/base/pointMer/exchangeGoodPaymentAliCallback"); - return alipay; + } else { String s2 = storeClient.getmerchantNumberAliByOperatorId(store1.getOperatorId()); System.err.println("支付宝商户号" + s2); @@ -1923,26 +1913,15 @@ if (!StringUtils.hasLength(s2)) { return ResultUtil.error("运营商未配置支付宝商户号,获取支付失败!"); } - ResultUtil alipay = payMoneyUtil.alipay(s2, name, name, String.valueOf(returnId), code, cash.toString(), - "/base/pointMer/exchangeGoodPaymentAliCallback"); - return alipay; + smidRes = s2; } - }else{ - // 平台门票 - ResultUtil alipay = payMoneyUtil.alipay(smid, name, name, String.valueOf(returnId), code, cash.toString(), - "/base/pointMer/exchangeGoodPaymentAliCallback"); - return alipay; - } + break; case 2: // 判断课包属于平台还是运营商 CoursePackage coursePackage = cpageClient.queryCoursePackageById(pointsMerchandise.getCoursePackageId()); Store store = storeClient.queryStoreById(coursePackage.getStoreId()); if (store.getOperatorId() == null || store.getOperatorId() == 0) { - // 平台课包 - ResultUtil alipay = payMoneyUtil.alipay(smid, name, name, String.valueOf(returnId), code, cash.toString(), - "/base/pointMer/exchangeGoodPaymentAliCallback"); - return alipay; } else { String s2 = storeClient.getmerchantNumberAliByOperatorId(store.getOperatorId()); System.err.println("支付宝商户号" + s2); @@ -1950,37 +1929,104 @@ if (!StringUtils.hasLength(s2)) { return ResultUtil.error("运营商未配置支付宝商户号,获取支付失败!"); } - ResultUtil alipay = payMoneyUtil.alipay(s2, name, name, String.valueOf(returnId), code, cash.toString(), - "/base/pointMer/exchangeGoodPaymentAliCallback"); - return alipay; + smidRes = s2; } + break; case 3: if (!integers.isEmpty()) { Store store1 = storeClient.queryStoreById(integers.get(0)); if (store1.getOperatorId() == null || store1.getOperatorId() == 0) { - // 平台门票 - ResultUtil alipay = payMoneyUtil.alipay(smid, name, name, String.valueOf(returnId), code, cash.toString(), - "/base/pointMer/exchangeGoodPaymentAliCallback"); - return alipay; + } else { String s2 = storeClient.getmerchantNumberAliByOperatorId(store1.getOperatorId()); System.err.println("支付宝商户号" + s2); if (!StringUtils.hasLength(s2)) { return ResultUtil.error("运营商未配置支付宝商户号,获取支付失败!"); } - ResultUtil alipay = payMoneyUtil.alipay(s2, name, name, String.valueOf(returnId), code, cash.toString(), - "/base/pointMer/exchangeGoodPaymentAliCallback"); - return alipay; - } - }else{ - // 平台门票 - ResultUtil alipay = payMoneyUtil.alipay(smid, name, name, String.valueOf(returnId), code, cash.toString(), - "/base/pointMer/exchangeGoodPaymentAliCallback"); - return alipay; + smidRes = s2; + } } - } - return ResultUtil.error("获取支付失败!"); + break; + } + alipay = payMoneyUtil.alipay(smidRes, name, name, String.valueOf(returnId), code, cash.toString(), + "/base/pointMer/exchangeGoodPaymentAliCallback"); + if (alipay.getCode() == 200) { + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10) { + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + System.out.println("支付宝查询code:" + code); + List<UserPointsMerchandise> userPointsMerchandises = mcClient.queryUserPointMerchaseByCode(code); + System.out.println("list-----" + userPointsMerchandises); + if (userPointsMerchandises.get(0).getPayStatus() == 2) { + break; + } +// ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code); + AlipayTradeQueryResponse resultUtil = payMoneyUtil.queryALIOrder(code); + if (resultUtil.getCode().equals("10000") && userPointsMerchandises.get(0).getPayStatus() == 1) { + /** + * WAIT_BUYER_PAY(交易创建,等待买家付款)、 + * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 + * TRADE_SUCCESS(交易支付成功)、 + * TRADE_FINISHED(交易结束,不可退款) + */ +// Map<String, String> data1 = resultUtil.getData(); +// String s = data1.get("tradeStatus"); +// String tradeNo = data1.get("tradeNo"); + String tradeNo = resultUtil.getTradeNo(); + String tradeStatus = resultUtil.getTradeStatus(); + System.out.println("ssssss" + tradeStatus); + + if ("TRADE_SUCCESS".equals(tradeStatus)) { + for (UserPointsMerchandise userPointsMerchandise : userPointsMerchandises) { + userPointsMerchandise.setPayStatus(2); + userPointsMerchandise.setPaymentTime(new Date()); + userPointsMerchandise.setOrderNumber(tradeNo); + userPointsMerchandise.setCashPayType(2); + userPointsMerchandise.setInsertTime(null); + userPointsMerchandise.setUserId(null); + mcClient.updateDetailsUserPointMercase(userPointsMerchandise); + } + List<Integer> integers = mcsClient.queryPointMerStoreIds(pointsMerchandise.getId()); + Store store1 = storeClient.queryStoreById(integers.get(0)); + if (store1.getOperatorId()!=null && store1.getOperatorId() != 0){ + String s2 = storeClient.getmerchantNumberAliByOperatorId(store1.getOperatorId()); + System.err.println("查询支付宝商户号"+s2); + // todo 资金结算 支付宝推荐30s之后再进行结算 + Thread.sleep(30000); + payMoneyUtil.confirm(s2,code, tradeNo,cash.toString()); + } + break; + } + if ("TRADE_FINISHED".equals(tradeStatus)) { + + break; + } +// if("REFUND".equals(tradeStatus) || "NOTPAY".equals(tradeStatus) || "CLOSED".equals(tradeStatus) || "REVOKED".equals(tradeStatus) || "PAYERROR".equals(tradeStatus) || num == 10){ +// mcClient.deletePaymentRecord(code); +// break; +// } + + if ("WAIT_BUYER_PAY".equals(tradeStatus)) { + num++; + } + } + } + } catch (Exception e) { + mcClient.deletePaymentRecord(code); + e.printStackTrace(); + } + } + }).start(); + } + return alipay; } public void moneyOut(String outNum, String tradeNo) throws AlipayApiException { @@ -2029,7 +2075,7 @@ List<UserPointsMerchandise> userPointsMerchandises = merChandiseClient.queryUserPointMerchaseByCode(outNum); // PaymentCompetition code = paymentCompetitionService.getOne(new QueryWrapper<PaymentCompetition>().eq("code", outNum)); - if(userPointsMerchandises.size() > 0){ + if (userPointsMerchandises.size() > 0) { Integer storeId = userPointsMerchandises.get(0).getStoreId(); // Competition byId1 = competitionService.getById(code.getCompetitionId()); @@ -2075,31 +2121,31 @@ } - private ResultUtil WechatPayment(Integer type, BigDecimal cash, String code,Integer id) throws Exception { - String name = (type == 1 ? "购买实体商品" : type == 2 ? "报名运动营": type == 3 ? "购买门票" : "购买优惠券"); - System.err.println("微信支付:"+name); + private ResultUtil WechatPayment(Integer type, BigDecimal cash, String code, Integer id) throws Exception { + String name = (type == 1 ? "购买实体商品" : type == 2 ? "报名运动营" : type == 3 ? "购买门票" : "购买优惠券"); + System.err.println("微信支付:" + name); PointsMerchandise pointsMerchandise = mcClient.selectPointsMerchandiseById(id); - System.err.println("查询积分商品"+pointsMerchandise); + System.err.println("查询积分商品" + pointsMerchandise); List<Integer> integers = mcsClient.queryPointMerStoreIds(pointsMerchandise.getId()); - switch (type){ + switch (type) { case 1: - if (!integers.isEmpty()){ + if (!integers.isEmpty()) { Store store1 = storeClient.queryStoreById(integers.get(0)); - if (store1.getOperatorId() ==null || store1.getOperatorId() == 0){ + if (store1.getOperatorId() == null || store1.getOperatorId() == 0) { // 平台门票 ResultUtil weixinpay = payMoneyUtil.weixinpay(name, "", code, cash.toString(), "/base/pointMer/exchangeGoodPaymentWeChatCallback", "APP", ""); return weixinpay; - }else{ + } else { String s2 = storeClient.getmerchantNumberByOperatorId(store1.getOperatorId()); - System.err.println("微信商户号"+s2); + System.err.println("微信商户号" + s2); - if(!StringUtils.hasLength(s2)){ + if (!StringUtils.hasLength(s2)) { return ResultUtil.error("运营商未配置微信商户号,获取支付失败!"); } - ResultUtil weixinpay = payMoneyUtil.weixinpayV3(s2,name, code, + ResultUtil weixinpay = payMoneyUtil.weixinpayV3(s2, name, code, "/base/pointMer/exchangeGoodPaymentWeChatCallback1", cash.toString()); return weixinpay; @@ -2110,44 +2156,44 @@ // 判断课包属于平台还是运营商 CoursePackage coursePackage = cpageClient.queryCoursePackageById(pointsMerchandise.getCoursePackageId()); Store store = storeClient.queryStoreById(coursePackage.getStoreId()); - if (store.getOperatorId() ==null || store.getOperatorId() == 0){ + if (store.getOperatorId() == null || store.getOperatorId() == 0) { // 平台课包 ResultUtil weixinpay = payMoneyUtil.weixinpay(name, "", code, cash.toString(), "/base/pointMer/exchangeGoodPaymentWeChatCallback", "APP", ""); return weixinpay; - }else{ + } else { String s2 = storeClient.getmerchantNumberByOperatorId(store.getOperatorId()); - System.err.println("微信商户号"+s2); + System.err.println("微信商户号" + s2); - if(!StringUtils.hasLength(s2)){ + if (!StringUtils.hasLength(s2)) { return ResultUtil.error("运营商未配置微信商户号,获取支付失败!"); } - ResultUtil weixinpay = payMoneyUtil.weixinpayV3(s2,name, code, + ResultUtil weixinpay = payMoneyUtil.weixinpayV3(s2, name, code, "/base/pointMer/exchangeGoodPaymentWeChatCallback1", cash.toString()); return weixinpay; } case 3: - if (!integers.isEmpty()){ + if (!integers.isEmpty()) { Store store1 = storeClient.queryStoreById(integers.get(0)); - if (store1.getOperatorId() ==null || store1.getOperatorId() == 0){ + if (store1.getOperatorId() == null || store1.getOperatorId() == 0) { // 平台门票 ResultUtil weixinpay = payMoneyUtil.weixinpay(name, "", code, cash.toString(), "/base/pointMer/exchangeGoodPaymentWeChatCallback", "APP", ""); return weixinpay; - }else{ + } else { String s2 = storeClient.getmerchantNumberByOperatorId(store1.getOperatorId()); - System.err.println("微信商户号"+s2); + System.err.println("微信商户号" + s2); - if(!StringUtils.hasLength(s2)){ + if (!StringUtils.hasLength(s2)) { return ResultUtil.error("运营商未配置微信商户号,获取支付失败!"); } - ResultUtil weixinpay = payMoneyUtil.weixinpayV3(s2,name, code, + ResultUtil weixinpay = payMoneyUtil.weixinpayV3(s2, name, code, "/base/pointMer/exchangeGoodPaymentWeChatCallback1", cash.toString()); return weixinpay; } - }else{ + } else { // 平台门票 ResultUtil weixinpay = payMoneyUtil.weixinpay(name, "", code, cash.toString(), "/base/pointMer/exchangeGoodPaymentWeChatCallback", "APP", ""); @@ -2161,10 +2207,10 @@ @Override - public ResultUtil exchangeAddPaymentCallback(String code, String orderNumber) { - System.err.println("进入回调"+code); + public ResultUtil exchangeAddPaymentCallback(String code, String orderNumber) throws AlipayApiException { + System.err.println("进入回调" + code); UserPointsMerchandise userPointsMerchandise = mcClient.queryUserPointMerchaseByCode(code).get(0); - System.err.println("商品"+userPointsMerchandise); + System.err.println("商品" + userPointsMerchandise); if (userPointsMerchandise.getPayStatus() == 2) { return ResultUtil.success(); } @@ -2179,10 +2225,10 @@ Integer pointsMerchandiseId = userPointsMerchandise.getPointsMerchandiseId(); PointsMerchandise pointsMerchandise = mcClient.selectPointsMerchandiseById(pointsMerchandiseId); - if(pointsMerchandise.getType() == 2){ + if (pointsMerchandise.getType() == 2) { //课程 CoursePackageOrder coursePackageOrder1 = paymentClient.getCoursePackageOrderByCode(code); - if(null != coursePackageOrder1){ + if (null != coursePackageOrder1) { coursePackageOrder1.setPayStatus(2); coursePackageOrder1.setOrderNumber(orderNumber); coursePackageOrder1.setAppUserId(null); @@ -2199,6 +2245,13 @@ paymentClient.addCoursePackageOrderStudent(addCoursePackageOrderStudent); } } + List<Integer> integers = mcsClient.queryPointMerStoreIds(pointsMerchandise.getId()); + Store store1 = storeClient.queryStoreById(integers.get(0)); + if (store1.getOperatorId() != null && store1.getOperatorId() != 0) { + String s2 = storeClient.getmerchantNumberAliByOperatorId(store1.getOperatorId()); + System.err.println("支付宝商户号" + s2); + payMoneyUtil.confirm(s2, code, orderNumber, userPointsMerchandise.getCash().toString()); + } return ResultUtil.success(); } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java index 4ab5f6f..677f74b 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java @@ -476,6 +476,7 @@ ResultUtil alipay = payMoneyUtil.alipay(smid1,"课包续费", "课包续费", "", code, amount.toString(), "/base/coursePackage/alipayPaymentCallback"); if (alipay.getCode() == 200) { + String finalSmid = smid1; new Thread(new Runnable() { @Override public void run() { @@ -516,24 +517,8 @@ coursePackagePayment.setOrderNumber(tradeNo); couPayClient.updatePaymentCoursePackage(coursePackagePayment); Integer coursePackageId = coursePackagePayment.getCoursePackageId(); - // 判断这个课包是属于哪个运营商的 - CoursePackage coursePackage = coursePackageClient.queryCoursePackageById(coursePackageId); - Integer storeId = coursePackage.getStoreId(); - Store store = storeClient.queryStoreById(storeId); - String smid1= ""; - if (store.getOperatorId()==null || store.getOperatorId() == 0){ - // 平台 - smid1 = smid; - // 属于平台 不做资金冻结 不做分账处理 -// payMoneyUtil.confirm(smid1,code,tradeNo,amount.toString()); - }else{ - String smidByOperatorId = storeClient.getSMIDByOperatorId(store.getOperatorId()); - smid1 = smidByOperatorId; - payMoneyUtil.confirm1(smid1,code,tradeNo,amount.toString()); - // 分账处理 - extracted(store.getOperatorId(), amount, tradeNo); - } - + Thread.sleep(30000); + payMoneyUtil.confirm(finalSmid,code,tradeNo,amount.toString()); break; } if ("WAIT_BUYER_PAY".equals(tradeStatus)) { diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/VipPaymentServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/VipPaymentServiceImpl.java index 343d8b3..53dfda7 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/VipPaymentServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/VipPaymentServiceImpl.java @@ -160,8 +160,8 @@ // 注册会员送券 先判断是否有注册送券类型的优惠券 判断优惠券状态 审核是否通过 是否删除 是否在有效期内 是否领取数量达上限 List<Long> longs = userConponClient.queryCouponByUser(appUser.getId()); redisUtil.setStrValue("VIP_P_" + vipPayment1.getAppUserId(), JSON.toJSONString(longs), 3600); - // 如果交易结束 将当前订单金额分配到商户 -// payMoneyUtil.confirm(smid,vipPayment.getCode(),tradeNo,amount); + Thread.sleep(30000); + payMoneyUtil.confirm(smid, code, tradeNo, amount); return; } if ("WAIT_BUYER_PAY".equals(tradeStatus)) { diff --git a/cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java b/cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java index 5cd4639..733d682 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java +++ b/cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java @@ -4,10 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.alipay.api.AlipayApiException; -import com.alipay.api.AlipayClient; -import com.alipay.api.CertAlipayRequest; -import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.*; import com.alipay.api.domain.*; import com.alipay.api.request.*; import com.alipay.api.response.*; @@ -59,7 +56,21 @@ import java.util.*; import static com.dsh.account.util.akeylogin.Md5Util.byteArrayToHexString; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.AlipayConfig; +import com.alipay.api.domain.SettleDetailInfo; +import com.alipay.api.response.AlipayTradeSettleConfirmResponse; +import com.alipay.api.domain.SettleConfirmExtendParams; +import com.alipay.api.request.AlipayTradeSettleConfirmRequest; +import com.alipay.api.domain.AlipayTradeSettleConfirmModel; +import com.alipay.api.domain.SettleInfo; +import com.alipay.api.FileItem; +import java.util.Base64; +import java.util.ArrayList; +import java.util.List; /** * 第三方支付工具类 */ @@ -187,56 +198,6 @@ */ public ResultUtil alipay(String smid,String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) { -// //构造client -// CertAlipayRequest certAlipayRequest = new CertAlipayRequest (); -// //设置网关地址 -// certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do"); -// //设置应用Id -// certAlipayRequest.setAppId(aliAppid); -// //设置应用私钥 -// certAlipayRequest.setPrivateKey(appPrivateKey); -// //设置请求格式,固定值json -// certAlipayRequest.setFormat("json"); -// //设置字符集 -// certAlipayRequest.setCharset("UTF-8"); -// //设置签名类型 -// certAlipayRequest.setSignType("RSA2"); -// //设置应用公钥证书路径 -// certAlipayRequest.setCertPath(app_cert_path); -// //设置支付宝公钥证书路径 -// certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path); -// //设置支付宝根证书路径 -// certAlipayRequest.setRootCertPath(alipay_root_cert_path); -// //构造client -// AlipayClient alipayClient = null; -// try { -// alipayClient = new DefaultAlipayClient(certAlipayRequest); -// } catch (AlipayApiException e) { -// e.printStackTrace(); -// } -// //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay -// AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest (); -// //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 -// AlipayTradeAppPayModel model = new AlipayTradeAppPayModel (); -// model.setBody(body); -// model.setSubject (subject); -// model.setOutTradeNo (outTradeNo); -// model.setTimeoutExpress ("30m" ); -// model.setTotalAmount (amount); -// model.setProductCode ( "QUICK_MSECURITY_PAY" ); -// model.setPassbackParams(passbackParams);//自定义参数 -// request.setBizModel ( model ); -// request.setNotifyUrl (callbackPath + notifyUrl); -// try { -// //这里和普通的接口调用不同,使用的是sdkExecute -// AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); -// Map<String, String> map = new HashMap<>(); -// map.put("orderString", response.getBody()); -// System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。 -// return ResultUtil.success(map); -// } catch (AlipayApiException e ) { -// e.printStackTrace(); -// } //实例化客户端 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2"); @@ -264,8 +225,14 @@ subMerchant.setMerchantId(smid); model.setSubMerchant(subMerchant); + if (!smid.equals("2088330203191220")){ + ExtendParams extendParams = new ExtendParams(); + extendParams.setRoyaltyFreeze("true"); + model.setExtendParams(extendParams); + } request.setBizModel(model); request.setNotifyUrl(callbackPath + notifyUrl); + System.err.println("回调地址:"+callbackPath + notifyUrl); try { //这里和普通的接口调用不同,使用的是sdkExecute AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); @@ -314,45 +281,63 @@ return ResultUtil.success(alipay_trade_precreate_response.getString("qr_code")); } // 直付通模式 alipay.trade.settle.confirm(统一收单确认结算接口) - public ResultUtil confirm(String smid1,String code, String outTradeNo, String amount) { - AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", - aliAppid, - appPrivateKey, - "json", - "GBK", - alipay_public_key, - "RSA2"); + public ResultUtil confirm(String smid1,String code, String outTradeNo, String amount) throws AlipayApiException { + // 初始化SDK + AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); + + // 构造请求参数以调用接口 AlipayTradeSettleConfirmRequest request = new AlipayTradeSettleConfirmRequest(); - request.setBizContent("{" + - " \"out_request_no\":\""+code+"\"," + - " \"trade_no\":\""+outTradeNo+"\"," + - " \"settle_info\":{" + - " \"settle_detail_infos\":[" + - " {" + - " \"trans_in_type\":\"defaultSettle\"," + - " \"settle_entity_id\":\""+smid1+"\"," + - " \"settle_entity_type\":\"SecondMerchant\"," + - " \"amount\":"+amount+"," + - " }" + - " ]" + - " }," + - " \"extend_params\":{" + - " \"royalty_freeze\":\"false\"" + - " }" + - "}"); - AlipayTradeSettleConfirmResponse response = null; - try { - response = alipayClient.execute(request); - } catch (AlipayApiException e) { - e.printStackTrace(); - } - if(response.isSuccess()){ + AlipayTradeSettleConfirmModel model = new AlipayTradeSettleConfirmModel(); + + // 设置确认结算请求流水号 + model.setOutRequestNo(code); + + // 设置支付宝交易号 + model.setTradeNo(outTradeNo); + + // 设置描述结算信息 + SettleInfo settleInfo = new SettleInfo(); + List<SettleDetailInfo> settleDetailInfos = new ArrayList<SettleDetailInfo>(); + SettleDetailInfo settleDetailInfos0 = new SettleDetailInfo(); + settleDetailInfos0.setAmount(amount); + settleDetailInfos0.setTransIn(smid1); + settleDetailInfos0.setSettleEntityType("SecondMerchant"); + settleDetailInfos0.setSettleEntityId(smid1); + settleDetailInfos0.setTransInType("defaultSettle"); + settleDetailInfos.add(settleDetailInfos0); + settleInfo.setSettleDetailInfos(settleDetailInfos); + model.setSettleInfo(settleInfo); + request.setBizModel(model); + System.err.println("结算金额"+amount); + // 第三方代调用模式下请设置app_auth_token + // request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->"); + + AlipayTradeSettleConfirmResponse response = alipayClient.execute(request); + System.out.println("返回体"+response.getBody()); + + + if (response.isSuccess()) { System.out.println("调用成功"); - return ResultUtil.success(); } else { System.out.println("调用失败"); - return ResultUtil.error("出现问题啦"); + // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接 + // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); + // System.out.println(diagnosisUrl); } + return ResultUtil.success(response.getBody()); + } + private static AlipayConfig getAlipayConfig() { + String privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA=="; + String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB"; + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId("2021004105665036"); + alipayConfig.setPrivateKey(privateKey); + alipayConfig.setFormat("json"); + alipayConfig.setAlipayPublicKey(alipayPublicKey); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + return alipayConfig; } // 资金冻结 做分账处理 public ResultUtil confirm1(String smid,String code, String outTradeNo, String amount) { diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupService.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupService.java index 518eb82..83f799a 100644 --- a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupService.java +++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/IWorldCupService.java @@ -1,5 +1,6 @@ package com.dsh.communityWorldCup.service; +import com.alipay.api.AlipayApiException; import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.communityWorldCup.entity.WorldCup; import com.dsh.communityWorldCup.model.*; @@ -77,7 +78,7 @@ * @param outTradeNo * @return */ - ResultUtil paymentWorldCupCallback(String code, String outTradeNo); + ResultUtil paymentWorldCupCallback(String code, String outTradeNo) throws AlipayApiException; /** diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupServiceImpl.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupServiceImpl.java index d6e4137..dc89dab 100644 --- a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupServiceImpl.java +++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/service/impl/WorldCupServiceImpl.java @@ -513,7 +513,8 @@ return payment; } - private String smidVx = "2088330203191220";//平台微信商户号 + private String smid = "2088330203191220";//平台支付宝商户号 + /** * 支付逻辑 @@ -569,30 +570,29 @@ } //支付宝 if(payType == 2){ + String smidRes = smid;// 结算资金到商户号 + worldCupPayment.setAmount(new BigDecimal(num).multiply(worldCup.getCash())); worldCupPayment.setUnitPrice(worldCupPayment.getAmount().divide(new BigDecimal(num))); worldCupPaymentService.save(worldCupPayment); List<WorldCupStore> list = worldCupStoreService.lambdaQuery().eq(WorldCupStore::getWorldCupId, worldCup.getId()).list(); if (list.isEmpty()){ - return payMoneyUtil.alipay("2088330203191220", "社区世界杯报名", "世界杯报名", "", worldCupPayment.getCode(), - worldCupPayment.getAmount().toString(), "/base/worldCup/aliPayWorldCupCallback"); }else{ Integer storeId = list.get(0).getStoreId(); Store store = storeClient.queryStoreById(storeId); if (store.getOperatorId()==null||store.getOperatorId()==0){ - return payMoneyUtil.alipay("2088330203191220", "社区世界杯报名", "世界杯报名", "", worldCupPayment.getCode(), - worldCupPayment.getAmount().toString(), "/base/worldCup/aliPayWorldCupCallback"); }else{ String s2 = storeClient.getmerchantNumberAliByOperatorId(store.getOperatorId()); System.err.println("支付宝商户号"+s2); if(!StringUtils.hasLength(s2)){ return ResultUtil.error("运营商未配置支付宝商户号,获取支付失败!"); } - return payMoneyUtil.alipay(s2, "社区世界杯报名", "世界杯报名", "", worldCupPayment.getCode(), - worldCupPayment.getAmount().toString(), "/base/worldCup/aliPayWorldCupCallback"); + smidRes=s2; } } + return payMoneyUtil.alipay(smidRes, "社区世界杯报名", "世界杯报名", "", worldCupPayment.getCode(), + worldCupPayment.getAmount().toString(), "/base/worldCup/aliPayWorldCupCallback"); } //玩湃币 if(payType == 3){ @@ -756,7 +756,7 @@ * @return */ @Override - public ResultUtil paymentWorldCupCallback(String code, String outTradeNo) { + public ResultUtil paymentWorldCupCallback(String code, String outTradeNo) throws AlipayApiException { WorldCupPayment worldCupPayment = worldCupPaymentService.getOne(new QueryWrapper<WorldCupPayment>().eq("code", code)); Integer worldCupId = worldCupPayment.getWorldCupId(); worldCupPayment.setPayStatus(2); @@ -784,6 +784,35 @@ worldCupPaymentParticipant.setCreateTime(new Date()); worldCupPaymentParticipantService.save(worldCupPaymentParticipant); } + if (worldCupPayment.getPayType()==2){ + List<WorldCupStore> list = worldCupStoreService.lambdaQuery().eq(WorldCupStore::getWorldCupId, worldCupPayment.getWorldCupId()).list(); + String resSmid = smid; + if (!list.isEmpty()){ + Integer storeId = list.get(0).getStoreId(); + Store store = storeClient.queryStoreById(storeId); + if (store.getOperatorId()==null||store.getOperatorId()==0){ + }else{ + String s2 = storeClient.getmerchantNumberAliByOperatorId(store.getOperatorId()); + System.err.println("支付宝商户号"+s2); + if(!StringUtils.hasLength(s2)){ + return ResultUtil.error("运营商未配置支付宝商户号,获取支付失败!"); + } + resSmid=s2; + } + } + String finalResSmid = resSmid; + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(30000); + payMoneyUtil.confirm(finalResSmid, code, outTradeNo, worldCupPayment.getAmount().toString()); + }catch (Exception e){ + } + } + }).start(); + } + return ResultUtil.success(); } diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java index e5124c8..94b57b0 100644 --- a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java +++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java @@ -2,10 +2,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.alipay.api.AlipayApiException; -import com.alipay.api.AlipayClient; -import com.alipay.api.CertAlipayRequest; -import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.*; import com.alipay.api.domain.*; import com.alipay.api.request.*; import com.alipay.api.response.*; @@ -77,58 +74,6 @@ * 支付宝支付 */ public ResultUtil alipay(String smid,String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) { -// //构造client -// CertAlipayRequest certAlipayRequest = new CertAlipayRequest (); -// //设置网关地址 -// certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do"); -// //设置应用Id -// certAlipayRequest.setAppId(aliAppid); -// //设置应用私钥 -// certAlipayRequest.setPrivateKey(appPrivateKey); -// //设置请求格式,固定值json -// certAlipayRequest.setFormat("json"); -// //设置字符集 -// certAlipayRequest.setCharset("UTF-8"); -// //设置签名类型 -// certAlipayRequest.setSignType("RSA2"); -// //设置应用公钥证书路径 -// certAlipayRequest.setCertPath(app_cert_path); -// //设置支付宝公钥证书路径 -// certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path); -// //设置支付宝根证书路径 -// certAlipayRequest.setRootCertPath(alipay_root_cert_path); -// //构造client -// AlipayClient alipayClient = null; -// try { -// alipayClient = new DefaultAlipayClient(certAlipayRequest); -// } catch (AlipayApiException e) { -// e.printStackTrace(); -// } -// //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay -// AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest (); -// //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 -// AlipayTradeAppPayModel model = new AlipayTradeAppPayModel (); -// model.setBody(body); -// model.setSubject (subject); -// model.setOutTradeNo (outTradeNo); -// model.setTimeoutExpress ("30m" ); -// model.setTotalAmount (amount); -// model.setProductCode ( "QUICK_MSECURITY_PAY" ); -// model.setPassbackParams(passbackParams);//自定义参数 -// request.setBizModel ( model ); -// request.setNotifyUrl (callbackPath + notifyUrl); -// try { -// //这里和普通的接口调用不同,使用的是sdkExecute -// AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); -// Map<String, String> map = new HashMap<>(); -// map.put("orderString", response.getBody()); -// System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。 -// return ResultUtil.success(map); -// } catch (AlipayApiException e ) { -// e.printStackTrace(); -// } - - //实例化客户端 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2"); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay @@ -154,6 +99,11 @@ SubMerchant subMerchant = new SubMerchant(); subMerchant.setMerchantId(smid); model.setSubMerchant(subMerchant); + if (!smid.equals("2088330203191220")){ + ExtendParams extendParams = new ExtendParams(); + extendParams.setRoyaltyFreeze("true"); + model.setExtendParams(extendParams); + } request.setBizModel(model); request.setNotifyUrl(callbackPath + notifyUrl); @@ -299,53 +249,70 @@ /** * 统一确认结算接口 - * @param smid * @param code * @param outTradeNo * @param amount * @return */ - public ResultUtil confirm(String smid,String code, String outTradeNo, String amount) { - AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", - aliAppid, - appPrivateKey, - "json", - "GBK", - alipay_public_key, - "RSA2"); + public ResultUtil confirm(String smid1,String code, String outTradeNo, String amount) throws AlipayApiException { + // 初始化SDK + AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); + + // 构造请求参数以调用接口 AlipayTradeSettleConfirmRequest request = new AlipayTradeSettleConfirmRequest(); - request.setBizContent("{" + - " \"out_request_no\":\""+code+"\"," + - " \"trade_no\":\""+outTradeNo+"\"," + - " \"settle_info\":{" + - " \"settle_detail_infos\":[" + - " {" + - " \"trans_in_type\":\"defaultSettle\"," + - " \"settle_entity_id\":\""+smid+"\"," + - " \"settle_entity_type\":\"SecondMerchant\"," + - " \"amount\":"+amount+"," + - " }" + - " ]" + - " }," + - " \"extend_params\":{" + - " \"royalty_freeze\":\"false\"" + - " }" + - "}"); - AlipayTradeSettleConfirmResponse response = null; - try { - response = alipayClient.execute(request); - } catch (AlipayApiException e) { - e.printStackTrace(); - } - if(response.isSuccess()){ + AlipayTradeSettleConfirmModel model = new AlipayTradeSettleConfirmModel(); + + // 设置确认结算请求流水号 + model.setOutRequestNo(code); + + // 设置支付宝交易号 + model.setTradeNo(outTradeNo); + + // 设置描述结算信息 + SettleInfo settleInfo = new SettleInfo(); + List<SettleDetailInfo> settleDetailInfos = new ArrayList<SettleDetailInfo>(); + SettleDetailInfo settleDetailInfos0 = new SettleDetailInfo(); + settleDetailInfos0.setAmount(amount); + settleDetailInfos0.setTransIn(smid1); + settleDetailInfos0.setSettleEntityType("SecondMerchant"); + settleDetailInfos0.setSettleEntityId(smid1); + settleDetailInfos0.setTransInType("defaultSettle"); + settleDetailInfos.add(settleDetailInfos0); + settleInfo.setSettleDetailInfos(settleDetailInfos); + model.setSettleInfo(settleInfo); + request.setBizModel(model); + System.err.println("结算金额"+amount); + // 第三方代调用模式下请设置app_auth_token + // request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->"); + + AlipayTradeSettleConfirmResponse response = alipayClient.execute(request); + System.out.println("返回体"+response.getBody()); + + + if (response.isSuccess()) { System.out.println("调用成功"); - return ResultUtil.success(); } else { System.out.println("调用失败"); - return ResultUtil.error("出现问题啦"); + // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接 + // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); + // System.out.println(diagnosisUrl); } + return ResultUtil.success(response.getBody()); } + private static AlipayConfig getAlipayConfig() { + String privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA=="; + String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB"; + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId("2021004105665036"); + alipayConfig.setPrivateKey(privateKey); + alipayConfig.setFormat("json"); + alipayConfig.setAlipayPublicKey(alipayPublicKey); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + return alipayConfig; + } /** * 微信统一下单 * diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java index 88ed038..972d610 100644 --- a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java +++ b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java @@ -321,6 +321,7 @@ } if (paymentCompetitionVo.getPayType() == 2) {//支付宝 + String resSmid=smid; // 判断当前赛事属于哪个运营商 Competition byId = competitionService.getById(paymentCompetitionVo.getId()); String[] split = byId.getStoreId().split(","); @@ -412,82 +413,70 @@ * @throws Exception */ public ResultUtil aliPaymentCompetition(Integer operatorId,String smid,String code, BigDecimal money) throws Exception { + String resSmid=smid; ResultUtil alipay = payMoneyUtil.alipay (smid,"报名赛事", "", "", code, money.toString(), "/base/competition/aliPaymentCompetitionCallback"); -// if (alipay.getCode() == 200) { -// new Thread(new Runnable() { -// @Override -// public void run() { -// try { -// int num = 1; -// int wait = 0; -// while (num <= 10) { -// int min = 5000; -// wait += (min * num); -// Thread.sleep(wait); -// PaymentCompetition paymentCompetition = paymentCompetitionService.getOne(new QueryWrapper<PaymentCompetition>().eq("code", code).eq("payType", 2)); -// if (paymentCompetition.getPayStatus() == 2) { -// break; -// } -// AlipayTradeQueryResponse resultUtil = payMoneyUtil.queryALIOrder(code); -// if (resultUtil.getCode().equals("10000") && paymentCompetition.getPayStatus() == 1) { -// /** -// * WAIT_BUYER_PAY(交易创建,等待买家付款)、 -// * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 -// * TRADE_SUCCESS(交易支付成功)、 -// * TRADE_FINISHED(交易结束,不可退款) -// */ -//// Map<String, String> data1 = resultUtil.getData(); -//// String s = data1.get("tradeStatus"); -//// String tradeNo = data1.get("tradeNo"); -// String tradeNo = resultUtil.getTradeNo(); -// String s = resultUtil.getTradeStatus(); -// -// if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { -// paymentCompetition.setAppUserId(null); -// paymentCompetition.setState(3); -// userCompetitionService.remove(new QueryWrapper<UserCompetition>().eq("paymentCompetitionId", paymentCompetition.getId())); -// -// break; -// } -// if ("TRADE_SUCCESS".equals(s)) { -// paymentCompetition.setAppUserId(null); -// paymentCompetition.setPayStatus(2); -// paymentCompetition.setPayTime(new Date()); -// paymentCompetition.setPayOrderNo(tradeNo); -// paymentCompetitionService.updateById(paymentCompetition); -// -// Competition competition = cttService.getById(paymentCompetition.getCompetitionId()); -// competition.setApplicantsNumber(competition.getApplicantsNumber() + 1); -// cttService.updateById(competition); -// -// // 结算资金到商户账号 -// payMoneyUtil.confirm(smid,code,tradeNo,money.toString()); -// if (operatorId == null || operatorId == 0){ -// // 属于平台的赛事 资金不做冻结 不做分账处理 -// payMoneyUtil.confirm1(smid,code,tradeNo,money.toString()); -// }else{ -// // 资金冻结 -// payMoneyUtil.confirm(smid,code,tradeNo,money.toString()); -// // 分账处理 -// extracted(operatorId, money, tradeNo); -// } -// // 结算资金到商户账号 -// //分账 -//// moneyOut(tradeNo, tradeNo,code); -// break; -// } -// if ("WAIT_BUYER_PAY".equals(s)) { -// num++; -// } -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// }).start(); -// } + if (alipay.getCode() == 200) { + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10) { + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + PaymentCompetition paymentCompetition = paymentCompetitionService.getOne(new QueryWrapper<PaymentCompetition>().eq("code", code).eq("payType", 2)); + if (paymentCompetition.getPayStatus() == 2) { + break; + } + AlipayTradeQueryResponse resultUtil = payMoneyUtil.queryALIOrder(code); + if (resultUtil.getCode().equals("10000") && paymentCompetition.getPayStatus() == 1) { + /** + * WAIT_BUYER_PAY(交易创建,等待买家付款)、 + * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 + * TRADE_SUCCESS(交易支付成功)、 + * TRADE_FINISHED(交易结束,不可退款) + */ +// Map<String, String> data1 = resultUtil.getData(); +// String s = data1.get("tradeStatus"); +// String tradeNo = data1.get("tradeNo"); + String tradeNo = resultUtil.getTradeNo(); + String s = resultUtil.getTradeStatus(); + + if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { + paymentCompetition.setAppUserId(null); + paymentCompetition.setState(3); + userCompetitionService.remove(new QueryWrapper<UserCompetition>().eq("paymentCompetitionId", paymentCompetition.getId())); + + break; + } + if ("TRADE_SUCCESS".equals(s)) { + paymentCompetition.setAppUserId(null); + paymentCompetition.setPayStatus(2); + paymentCompetition.setPayTime(new Date()); + paymentCompetition.setPayOrderNo(tradeNo); + paymentCompetitionService.updateById(paymentCompetition); + Competition competition = cttService.getById(paymentCompetition.getCompetitionId()); + competition.setApplicantsNumber(competition.getApplicantsNumber() + 1); + cttService.updateById(competition); + // 结算资金到商户账号 + Thread.sleep(30000); + payMoneyUtil.confirm(resSmid,code,tradeNo,money.toString()); + break; + } + if ("WAIT_BUYER_PAY".equals(s)) { + num++; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } return alipay; } private void extracted(Integer operatorId, BigDecimal money, String tradeNo) throws Exception { diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java b/cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java index 7cf9fc2..1937266 100644 --- a/cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java +++ b/cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java @@ -3,10 +3,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.alipay.api.AlipayApiException; -import com.alipay.api.AlipayClient; -import com.alipay.api.CertAlipayRequest; -import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.*; import com.alipay.api.domain.*; import com.alipay.api.request.*; import com.alipay.api.response.*; @@ -77,58 +74,6 @@ * 支付宝支付 */ public ResultUtil alipay(String smid,String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) { -// //构造client -// CertAlipayRequest certAlipayRequest = new CertAlipayRequest (); -// //设置网关地址 -// certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do"); -// //设置应用Id -// certAlipayRequest.setAppId(aliAppid); -// //设置应用私钥 -// certAlipayRequest.setPrivateKey(appPrivateKey); -// //设置请求格式,固定值json -// certAlipayRequest.setFormat("json"); -// //设置字符集 -// certAlipayRequest.setCharset("UTF-8"); -// //设置签名类型 -// certAlipayRequest.setSignType("RSA2"); -// //设置应用公钥证书路径 -// certAlipayRequest.setCertPath(app_cert_path); -// //设置支付宝公钥证书路径 -// certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path); -// //设置支付宝根证书路径 -// certAlipayRequest.setRootCertPath(alipay_root_cert_path); -// //构造client -// AlipayClient alipayClient = null; -// try { -// alipayClient = new DefaultAlipayClient(certAlipayRequest); -// } catch (AlipayApiException e) { -// e.printStackTrace(); -// } -// //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay -// AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest (); -// //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 -// AlipayTradeAppPayModel model = new AlipayTradeAppPayModel (); -// model.setBody(body); -// model.setSubject (subject); -// model.setOutTradeNo (outTradeNo); -// model.setTimeoutExpress ("30m" ); -// model.setTotalAmount (amount); -// model.setProductCode ( "QUICK_MSECURITY_PAY" ); -// model.setPassbackParams(passbackParams);//自定义参数 -// request.setBizModel ( model ); -// request.setNotifyUrl (callbackPath + notifyUrl); -// try { -// //这里和普通的接口调用不同,使用的是sdkExecute -// AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); -// Map<String, String> map = new HashMap<>(); -// map.put("orderString", response.getBody()); -// System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。 -// return ResultUtil.success(map); -// } catch (AlipayApiException e ) { -// e.printStackTrace(); -// } - - //实例化客户端 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2"); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay @@ -154,7 +99,11 @@ SubMerchant subMerchant = new SubMerchant(); subMerchant.setMerchantId(smid); model.setSubMerchant(subMerchant); - + if (!smid.equals("2088330203191220")){ + ExtendParams extendParams = new ExtendParams(); + extendParams.setRoyaltyFreeze("true"); + model.setExtendParams(extendParams); + } request.setBizModel(model); request.setNotifyUrl(callbackPath + notifyUrl); @@ -306,45 +255,63 @@ * @param amount * @return */ - public ResultUtil confirm(String smid,String code, String outTradeNo, String amount) { - AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", - aliAppid, - appPrivateKey, - "json", - "GBK", - alipay_public_key, - "RSA2"); + public ResultUtil confirm(String smid1,String code, String outTradeNo, String amount) throws AlipayApiException { + // 初始化SDK + AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); + + // 构造请求参数以调用接口 AlipayTradeSettleConfirmRequest request = new AlipayTradeSettleConfirmRequest(); - request.setBizContent("{" + - " \"out_request_no\":\""+code+"\"," + - " \"trade_no\":\""+outTradeNo+"\"," + - " \"settle_info\":{" + - " \"settle_detail_infos\":[" + - " {" + - " \"trans_in_type\":\"defaultSettle\"," + - " \"settle_entity_id\":\""+smid+"\"," + - " \"settle_entity_type\":\"SecondMerchant\"," + - " \"amount\":"+amount+"," + - " }" + - " ]" + - " }," + - " \"extend_params\":{" + - " \"royalty_freeze\":\"true\"" + - " }" + - "}"); - AlipayTradeSettleConfirmResponse response = null; - try { - response = alipayClient.execute(request); - } catch (AlipayApiException e) { - e.printStackTrace(); - } - if(response.isSuccess()){ + AlipayTradeSettleConfirmModel model = new AlipayTradeSettleConfirmModel(); + + // 设置确认结算请求流水号 + model.setOutRequestNo(code); + + // 设置支付宝交易号 + model.setTradeNo(outTradeNo); + + // 设置描述结算信息 + SettleInfo settleInfo = new SettleInfo(); + List<SettleDetailInfo> settleDetailInfos = new ArrayList<SettleDetailInfo>(); + SettleDetailInfo settleDetailInfos0 = new SettleDetailInfo(); + settleDetailInfos0.setAmount(amount); + settleDetailInfos0.setTransIn(smid1); + settleDetailInfos0.setSettleEntityType("SecondMerchant"); + settleDetailInfos0.setSettleEntityId(smid1); + settleDetailInfos0.setTransInType("defaultSettle"); + settleDetailInfos.add(settleDetailInfos0); + settleInfo.setSettleDetailInfos(settleDetailInfos); + model.setSettleInfo(settleInfo); + request.setBizModel(model); + System.err.println("结算金额"+amount); + // 第三方代调用模式下请设置app_auth_token + // request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->"); + + AlipayTradeSettleConfirmResponse response = alipayClient.execute(request); + System.out.println("返回体"+response.getBody()); + + + if (response.isSuccess()) { System.out.println("调用成功"); - return ResultUtil.success(); } else { System.out.println("调用失败"); - return ResultUtil.error("出现问题啦"); + // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接 + // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); + // System.out.println(diagnosisUrl); } + return ResultUtil.success(response.getBody()); + } + private static AlipayConfig getAlipayConfig() { + String privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA=="; + String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB"; + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId("2021004105665036"); + alipayConfig.setPrivateKey(privateKey); + alipayConfig.setFormat("json"); + alipayConfig.setAlipayPublicKey(alipayPublicKey); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + return alipayConfig; } // 属于平台的运营商 因为无需分账不冻结资金 public ResultUtil confirm1(String smid,String code, String outTradeNo, String amount) { diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java index 40cbbff..b6210d4 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java @@ -131,11 +131,6 @@ private StudentHonorClient studentHonorClient; - - - - - @Override public List<CoursePackagePaymentVO> listAll(CoursePackagePaymentQuery query) { return cpConfigMapper.listAll(query); @@ -168,20 +163,20 @@ String cityCode = studentQeryDto.getCityCode(); //获取用户数据 List<Integer> appUserIds = null; - if(ToolUtil.isNotEmpty(cityCode)){ + if (ToolUtil.isNotEmpty(cityCode)) { List<AppUser> appUsers = appuClient.queryAppUserByCityCode(cityCode); - if(appUsers.size() > 0){ + if (appUsers.size() > 0) { appUserIds = appUsers.stream().map(AppUser::getId).collect(Collectors.toList()); } } QueryWrapper<CoursePackageStudent> status = new QueryWrapper<CoursePackageStudent>().eq("payStatus", 2).eq("status", 1); - if(null != appUserIds){ + if (null != appUserIds) { status.in("appUserId", appUserIds); } - List<Map<String, Object>> maps = this.baseMapper.getStudentTotal(appUserIds, studentQeryDto.getStart(), studentQeryDto.getEnd(),studentQeryDto.getCoursePackageIds()); + List<Map<String, Object>> maps = this.baseMapper.getStudentTotal(appUserIds, studentQeryDto.getStart(), studentQeryDto.getEnd(), studentQeryDto.getCoursePackageIds()); List<Map<String, Object>> list = new ArrayList<>(); for (Map<String, Object> objectMap : maps) { - if(null == objectMap.get("studentId")){ + if (null == objectMap.get("studentId")) { continue; } Integer studentId = Integer.valueOf(objectMap.get("studentId").toString()); @@ -190,12 +185,12 @@ Integer number = Integer.valueOf(objectMap.get("number").toString()); Map<String, Object> map = new HashMap<>(); Student student = studentClient.queryStudentById(studentId); - if(null == student){ + if (null == student) { continue; } map.put("studentName", student.getName()); AppUser appUser = appuClient.queryAppUser(appUserId); - if(null == appUser){ + if (null == appUser) { continue; } map.put("province", appUser.getProvince()); @@ -210,7 +205,7 @@ .eq("coursePackageId", coursePackageId).eq("payStatus", 2).eq("state", 1) .gt("cashPayment", 0).last(" and studentIds like '%" + studentId + "%' order by insertTime desc limit 0, 1")); Double cashPayment = 0D; - if(null != coursePackageOrder && coursePackageOrder.getClassHours() > 0){ + if (null != coursePackageOrder && coursePackageOrder.getClassHours() > 0) { cashPayment = coursePackageOrder.getCashPayment().divide(new BigDecimal(coursePackageOrder.getClassHours()), new MathContext(2, RoundingMode.HALF_EVEN)).doubleValue(); } map.put("cashPayment", cashPayment * number); @@ -246,7 +241,7 @@ for (CoursePackageOrder coursePackageOrder : list) { p = p.add(coursePackageOrder.getCashPayment()); } - if(list.size() > 0){ + if (list.size() > 0) { cashPayment = p.divide(new BigDecimal(list.size()), new MathContext(2, RoundingMode.HALF_EVEN)).doubleValue(); } map.put("cashPayment", cashPayment * number); @@ -532,14 +527,12 @@ private ALiSendSms aLiSendSms; - - @Override public CourseDetailsResponse queryRegisteredCourseDetails(Long coursePayId, Integer appUserId, String lon, String lat) { AppUser appUser = appuClient.queryAppUser(appUserId); CourseDetailsResponse response = new CourseDetailsResponse(); CoursePackageOrder coursePackageOrder = coursePackageOrderService.getById(coursePayId); - if (coursePackageOrder==null){ + if (coursePackageOrder == null) { // student = coursePackageStudentService.getById(coursePayId); CoursePackageOrderStudent student = coursePackageOrderStudentService.getById(coursePayId); @@ -599,7 +592,7 @@ response.setIntroduceDrawing(coursePackage.getIntroduceDrawing()); Integer payType = coursePackageOrder.getPayType(); - if(null == payType){ + if (null == payType) { CoursePackagePaymentConfig config = coursePackagePaymentConfigService.list(new QueryWrapper<CoursePackagePaymentConfig>().eq("coursePackageId", coursePackage.getId()).orderByAsc("classHours")).get(0); if (ToolUtil.isNotEmpty(config.getCashPayment()) && config.getCashPayment() > 0 && ToolUtil.isNotEmpty(config.getPlayPaiCoin()) && config.getPlayPaiCoin() > 0) { payType = 3; @@ -640,7 +633,7 @@ response.setVipAmount(discountMember); break; case 2: - if (playPaiCoin!=null) { + if (playPaiCoin != null) { response.setWpGold(playPaiCoin); } break; @@ -799,10 +792,10 @@ @Override public ResultUtil ContinuationOrpaymentCourse(Integer userId, ClasspaymentRequest request) { - System.err.println("请求参数"+request); + System.err.println("请求参数" + request); AppUser appUser = appuClient.queryAppUser(userId); CoursePackageOrder coursePackageOrder = coursePackageOrderService.getById(request.getCoursePayId()); - System.err.println("上次支付记录"+coursePackageOrder); + System.err.println("上次支付记录" + coursePackageOrder); String code = ""; BigDecimal money = BigDecimal.valueOf(request.getCash()); Integer wpGold = request.getPlayPaiCoin(); @@ -818,13 +811,13 @@ CoursePackagePaymentConfig paymentConfig = cpConfigMapper.selectOne(new QueryWrapper<CoursePackagePaymentConfig>() .eq("coursePackageId", request.getLessonId()) .eq("classHours", request.getCourseHoursNum())); - System.err.println("价格配置"+paymentConfig); + System.err.println("价格配置" + paymentConfig); TCoursePackageDiscount coursePackageDiscount = tcpdMapper.selectOne(new QueryWrapper<TCoursePackageDiscount>() .eq("coursePackageId", request.getLessonId()) .eq("type", 2) .eq("auditStatus", 1) .eq("coursePackagePaymentConfigId", paymentConfig.getCoursePackageId())); - System.err.println("折扣"+coursePackageDiscount); + System.err.println("折扣" + coursePackageDiscount); if (ToolUtil.isNotEmpty(coursePackageDiscount)) { String content = coursePackageDiscount.getContent(); JSONObject jsonObject = JSON.parseObject(content); @@ -853,7 +846,7 @@ newPayment.setPayType(request.getPayType()); newPayment.setState(1); newPayment.setInsertTime(new Date()); - if (request.getCash()!=null && request.getCash()!=0){ + if (request.getCash() != null && request.getCash() != 0) { newPayment.setCashPayment(BigDecimal.valueOf(request.getCash())); } newPayment.setPlayPaiCoin(request.getPlayPaiCoin()); @@ -867,9 +860,9 @@ case 1: if (request.getUseConpon() == 1) { Integer coupon1 = client.queryUserCouponById(request.getConponId()); - System.err.println("优惠券id"+coupon1); + System.err.println("优惠券id" + coupon1); Coupon coupon = client.queryCouponById(coupon1); - System.err.println("优惠券信息"+coupon); + System.err.println("优惠券信息" + coupon); // if (coupon.getType() == 1) { // Map<String, Object> couponRules = client.getCouponRules(coupon.getId()); // Double conditionalAmount = (Double) couponRules.get("conditionalAmount"); @@ -886,7 +879,7 @@ // } } try { - return WeChatPayment(code, money,request.getLessonId()); + return WeChatPayment(code, money, request.getLessonId()); } catch (Exception e) { return ResultUtil.runErr(); } @@ -920,32 +913,33 @@ return ResultUtil.success(); } - public ResultUtil WeChatPayment(String code, BigDecimal request,Integer coursePackageId) throws Exception { - System.err.println("code-------------"+code); - System.err.println("request---------------"+request); - System.err.println("coursePackageId-------------"+coursePackageId); + public ResultUtil WeChatPayment(String code, BigDecimal request, Integer coursePackageId) throws Exception { + System.err.println("code-------------" + code); + System.err.println("request---------------" + request); + System.err.println("coursePackageId-------------" + coursePackageId); TCoursePackage byId = coursePackageService.getById(coursePackageId); - System.err.println("课包"+coursePackageId); + System.err.println("课包" + coursePackageId); Integer storeId = byId.getStoreId(); Store store = storeClient.queryStoreById(storeId); - System.err.println("门店查询"+store); - if (store.getOperatorId()==null || store.getOperatorId()==0){ - ResultUtil weixinpay = payMoneyUtil.weixinpay("课包续费", "", code, request.toString(), - "/base/coursePackage/wechatRegisteredCoursesCallback", "APP", ""); + System.err.println("门店查询" + store); + if (store.getOperatorId() == null || store.getOperatorId() == 0) { + ResultUtil weixinpay = payMoneyUtil.weixinpay("课包续费", "", code, request.toString(), + "/base/coursePackage/wechatRegisteredCoursesCallback", "APP", ""); return weixinpay; - }else{ + } else { String s = storeClient.getmerchantNumberByOperatorId(store.getOperatorId()); - System.err.println("微信商户号"+s); - if(!StringUtils.hasLength(s)){ + System.err.println("微信商户号" + s); + if (!StringUtils.hasLength(s)) { return ResultUtil.error("运营商未配置微信商户号,获取支付失败!"); } - return payMoneyUtil.weixinpayV3(s,"课包续费",code, - "/base/coursePackage/wechatRegisteredCoursesCallback1",request.toString(),""); + return payMoneyUtil.weixinpayV3(s, "课包续费", code, + "/base/coursePackage/wechatRegisteredCoursesCallback1", request.toString(), ""); } } + private String smid = "2088330203191220";//平台支付宝商户号 -// public static void main(String[] args) { + // public static void main(String[] args) { // BigDecimal bigDecimal = new BigDecimal("100"); // // @@ -968,88 +962,74 @@ Integer coursePackageId = coursePackagePayment.getCoursePackageId(); TCoursePackage byId = coursePackageService.getById(coursePackageId); Store store = storeClient.queryStoreById(byId.getStoreId()); - String smid1=""; - if (store.getOperatorId() == null ){ + String smid1 = ""; + if (store.getOperatorId() == null) { smid1 = smid; - }else if (store.getOperatorId() == 0){ + } else if (store.getOperatorId() == 0) { smid1 = smid; - }else{ + } else { smid1 = storeClient.getmerchantNumberAliByOperatorId(store.getOperatorId()); } - if (!StringUtils.hasLength(smid1)){ + if (!StringUtils.hasLength(smid1)) { return ResultUtil.error("运营商未配置支付宝商户号,获取支付失败!"); } - ResultUtil alipay = payMoneyUtil.alipay(smid1,"课包购买", "课包购买", "", code, request.toString(), + ResultUtil alipay = payMoneyUtil.alipay(smid1, "课包购买", "课包购买", "", code, request.toString(), "/base/coursePackage/alipayRegisteredCoursesCallback"); -// if (alipay.getCode() == 200) { -// String finalCode = code; -// new Thread(new Runnable() { -// @Override -// public void run() { -// try { -// Thread.sleep(1000); -// int num = 1; -// int wait = 0; -// while (num <= 10) { -// int min = 5000; -// wait += (min * num); -// Thread.sleep(wait); -// CoursePackageOrder coursePackageOrder1 = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>() -// .eq("code", finalCode).eq("state", 1)); -// if (coursePackageOrder1.getPayStatus() == 2) { -// break; -// } -// AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(finalCode); -// if (null != alipayTradeQueryResponse) { -// /** -// * WAIT_BUYER_PAY(交易创建,等待买家付款)、 -// * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 -// * TRADE_SUCCESS(交易支付成功)、 -// * TRADE_FINISHED(交易结束,不可退款) -// */ -// String s = alipayTradeQueryResponse.getTradeStatus(); -// -// String tradeNo = alipayTradeQueryResponse.getTradeNo(); -// if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { -// //有待支付的订单,这里不处理 -//// coursePackageOrder1.setState(3); -//// coursePackageOrderService.updateById(coursePackageOrder1); -// break; -// } -// if ("TRADE_SUCCESS".equals(s)) { -// coursePackagePayment.setPayStatus(2); -// coursePackagePayment.setOrderNumber(tradeNo); -// baseMapper1.updateById(coursePackagePayment); -// // 判断这个课包属于哪个门店 属于哪个运营商 根据运营商 id 获取对应的商户号 -// Integer coursePackageId = coursePackagePayment.getCoursePackageId(); -// TCoursePackage byId = coursePackageService.getById(coursePackageId); -// Store store = storeClient.queryStoreById(byId.getStoreId()); -// if (store.getOperatorId() == null ){ -// // 说明是平台的门店 无需冻结资金 不走分账 -// payMoneyUtil.confirm1(smid,code,tradeNo,request.toString()); -// }else if (store.getOperatorId() == 0){ -// // 说明是平台的门店 -// payMoneyUtil.confirm1(smid,code,tradeNo,request.toString()); -// // 发起分账 -// extracted(store, coursePackageOrder1, tradeNo); -// }else{ -// payMoneyUtil.confirm(storeClient.getSMIDByOperatorId(store.getOperatorId()),code,tradeNo,request.toString()); -// // 发起分账 -// extracted(store, coursePackageOrder1, tradeNo); -// } -// break; -// } -// if ("WAIT_BUYER_PAY".equals(s)) { -// num++; -// } -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// }).start(); -// } + if (alipay.getCode() == 200) { + String finalCode = code; + String finalSmid = smid1; + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(1000); + int num = 1; + int wait = 0; + while (num <= 10) { + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + CoursePackageOrder coursePackageOrder1 = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>() + .eq("code", finalCode).eq("state", 1)); + if (coursePackageOrder1.getPayStatus() == 2) { + break; + } + AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(finalCode); + if (null != alipayTradeQueryResponse) { + /** + * WAIT_BUYER_PAY(交易创建,等待买家付款)、 + * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 + * TRADE_SUCCESS(交易支付成功)、 + * TRADE_FINISHED(交易结束,不可退款) + */ + String s = alipayTradeQueryResponse.getTradeStatus(); + + String tradeNo = alipayTradeQueryResponse.getTradeNo(); + if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { + //有待支付的订单,这里不处理 +// coursePackageOrder1.setState(3); +// coursePackageOrderService.updateById(coursePackageOrder1); + break; + } + if ("TRADE_SUCCESS".equals(s)) { + coursePackagePayment.setPayStatus(2); + coursePackagePayment.setOrderNumber(tradeNo); + baseMapper1.updateById(coursePackagePayment); + Thread.sleep(30000); + payMoneyUtil.confirm(finalSmid, code, tradeNo, request.toString()); + break; + } + if ("WAIT_BUYER_PAY".equals(s)) { + num++; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } return alipay; } @@ -1104,10 +1084,10 @@ System.err.println("进入玩湃支付"); CoursePackageOrder packagePayment = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>() .eq("code", code)); - System.err.println("支付"+packagePayment); - System.err.println("用户信息"+appUser); - System.err.println("code"+code); - System.err.println("wpGold"+wpGold); + System.err.println("支付" + packagePayment); + System.err.println("用户信息" + appUser); + System.err.println("code" + code); + System.err.println("wpGold" + wpGold); if (appUser.getPlayPaiCoins() < wpGold) { return ResultUtil.error("玩湃币不足!"); } @@ -1119,9 +1099,9 @@ System.err.println("修改"); boolean b = coursePackageOrderService.updateById(packagePayment); - }catch (Exception e){ - System.err.println("报错"+e.getCause()); - System.err.println("报错"+e.getMessage()); + } catch (Exception e) { + System.err.println("报错" + e.getCause()); + System.err.println("报错" + e.getMessage()); e.printStackTrace(); } appUser.setPlayPaiCoins(ToolUtil.isNotEmpty(appUser.getPlayPaiCoins()) ? appUser.getPlayPaiCoins() - wpGold : wpGold); @@ -1222,8 +1202,7 @@ } else if (start.after(new Date())) { //待上课 recordVo.setStatus(1); - } - else { + } else { CancelledClasses cancelledClasses = cacMapper.selectOne(new QueryWrapper<CancelledClasses>() .eq("coursePackageSchedulingId", byId.getId()).last("limit 1")); if (ToolUtil.isNotEmpty(cancelledClasses)) { @@ -1336,22 +1315,22 @@ List<Map<String, Object>> list = new ArrayList<>(); - if (coursePackage.getType()==1){ - list = this.baseMapper.queryRegistrationRecord(page, coursePackageId, userIds, studentIds); - }else { + if (coursePackage.getType() == 1) { + list = this.baseMapper.queryRegistrationRecord(page, coursePackageId, userIds, studentIds); + } else { list = this.baseMapper.queryRegistrationRecord1(page, coursePackageId, userIds, studentIds); } - list.addAll(this.baseMapper.queryRegistrationRecord3(coursePackageId,userIds,studentIds)); + list.addAll(this.baseMapper.queryRegistrationRecord3(coursePackageId, userIds, studentIds)); for (Map<String, Object> map : list) { Long id = Long.valueOf(map.get("id").toString()); Integer appUserId = Integer.valueOf(map.get("appUserId").toString()); Integer studentId = 0; - if (coursePackage.getType()==1) { + if (coursePackage.getType() == 1) { studentId = Integer.valueOf(map.get("studentId").toString()); - }else { + } else { studentId = Integer.valueOf(map.get("studentIds").toString().split(",")[0]); } @@ -1363,7 +1342,7 @@ Integer integer = cpsMapper.selectCount(new QueryWrapper<CoursePackageStudent>().eq("appUserId", appUserId) .eq("studentId", studentId).eq("coursePackagePaymentId", id).eq("signInOrNot", 2)); - int count = coursePackageStudentService.count(new QueryWrapper<CoursePackageStudent>().eq("coursePackageId", coursePackageId).eq("studentId", studentId).eq("signInOrNot",2)); + int count = coursePackageStudentService.count(new QueryWrapper<CoursePackageStudent>().eq("coursePackageId", coursePackageId).eq("studentId", studentId).eq("signInOrNot", 2)); map.put("absencesNumber", count); @@ -1559,12 +1538,12 @@ //需要购买使用的课时数 Integer num = req.getNum(); //需要删除多余的排课记录 - if(num.compareTo(laveClassHours1) > 0){ + if (num.compareTo(laveClassHours1) > 0) { //课时数差额 int number1 = num - laveClassHours1; double o = number1 % coursePackage.getNeedNum(); int l = 0; - if(0 != o){ + if (0 != o) { l = 1; } int n = Double.valueOf(number1 / coursePackage.getNeedNum()).intValue() + l; @@ -1620,7 +1599,7 @@ coursePackageOrderStudent.setLaveClassHours(coursePackageOrderStudent.getLaveClassHours() - req.getNum()); coursePackageOrderStudentService.updateById(coursePackageOrderStudent); Integer laveClassHours = coursePackageOrderStudent.getLaveClassHours(); - if(3 >= laveClassHours){ + if (3 >= laveClassHours) { AppUser appUser = appuClient.queryAppUser(coursePackageOrderStudent.getAppUserId()); //发送短信提醒 aLiSendSms.sendSms(appUser.getPhone(), "SMS_463646317", ""); diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java index b3bb319..9df4c59 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java @@ -1031,85 +1031,63 @@ ResultUtil alipay = payMoneyUtil.alipay(smid1,"报名运动营", "报名运动营", coursePackagePaymentConfig.getId().toString(), code, paymentPrice.toString(), "/base/course/aliPaymentCourseCallback"); -// if (alipay.getCode() == 200) { -// String finalCode = code; -// new Thread(new Runnable() { -// @Override -// public void run() { -// try { -// Thread.sleep(1000); -// int num = 1; -// int wait = 0; -// while (num <= 10) { -// int min = 5000; -// wait += (min * num); -// Thread.sleep(wait); -// CoursePackageOrder coursePackageOrder1 = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>() -// .eq("code", finalCode).eq("state", 1)); -// if (coursePackageOrder1.getPayStatus() == 2) { -// break; -// } -// AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(finalCode); -// if (null != alipayTradeQueryResponse) { -// /** -// * WAIT_BUYER_PAY(交易创建,等待买家付款)、 -// * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 -// * TRADE_SUCCESS(交易支付成功)、 -// * TRADE_FINISHED(交易结束,不可退款) -// */ -// String s = alipayTradeQueryResponse.getTradeStatus(); -// -// String tradeNo = alipayTradeQueryResponse.getTradeNo(); -// if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { -// //有待支付的订单,这里不处理 -//// coursePackageOrder1.setState(3); -//// coursePackageOrderService.updateById(coursePackageOrder1); -// break; -// } -// if ("TRADE_SUCCESS".equals(s)) { -// coursePackageOrder1.setPayStatus(2); -// coursePackageOrder1.setOrderNumber(tradeNo); -// coursePackageOrder1.setAppUserId(null); + if (alipay.getCode() == 200) { + String finalCode = code; + String finalSmid = smid1; + String finalCode1 = code; + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(1000); + int num = 1; + int wait = 0; + while (num <= 10) { + int min = 5000; + wait += (min * num); + Thread.sleep(wait); + CoursePackageOrder coursePackageOrder1 = coursePackageOrderService.getOne(new QueryWrapper<CoursePackageOrder>() + .eq("code", finalCode).eq("state", 1)); + if (coursePackageOrder1.getPayStatus() == 2) { + break; + } + AlipayTradeQueryResponse alipayTradeQueryResponse = payMoneyUtil.queryALIOrder(finalCode); + if (null != alipayTradeQueryResponse) { + /** + * WAIT_BUYER_PAY(交易创建,等待买家付款)、 + * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 + * TRADE_SUCCESS(交易支付成功)、 + * TRADE_FINISHED(交易结束,不可退款) + */ + String s = alipayTradeQueryResponse.getTradeStatus(); + + String tradeNo = alipayTradeQueryResponse.getTradeNo(); + if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { + //有待支付的订单,这里不处理 +// coursePackageOrder1.setState(3); // coursePackageOrderService.updateById(coursePackageOrder1); -// addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig); -// moneyOut(tradeNo,tradeNo,finalCode); -// // 根据课程id 查询这个课程属于哪个门店 属于哪个运营商 -// Integer id = paymentCourseVo.getId(); -// TCoursePackage byId = coursePackageService.getById(id); -// Integer storeId = byId.getStoreId(); -// Store store = storeClient.queryStoreById(storeId); -// Integer operatorId = store.getOperatorId(); -// if (operatorId==null){ -// String smid ="2088330203191220"; -// // 说明是平台的 不走分账 -//// payMoneyUtil.confirm(smid,finalCode,tradeNo,paymentPrice.toString()); -// payMoneyUtil.confirm1(smid,finalCode,tradeNo,paymentPrice.toString()); -// break; -// }else if (operatorId==0){ -// String smid ="2088330203191220"; -// // 说明是平台的 -// payMoneyUtil.confirm1(smid,finalCode,tradeNo,paymentPrice.toString()); -// break; -// }else{ -// // 当前课程不属于门店 查询这个课程属于哪个门店 属于哪个运营商 -// String smidByOperatorId = storeClient.getSMIDByOperatorId(operatorId); -// payMoneyUtil.confirm(smidByOperatorId,finalCode,tradeNo,paymentPrice.toString()); -// // 分账处理 -// extracted(store, coursePackageOrder1, tradeNo); -// break; -// } -// } -// if ("WAIT_BUYER_PAY".equals(s)) { -// num++; -// } -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// }).start(); -// } + break; + } + if ("TRADE_SUCCESS".equals(s)) { + coursePackageOrder1.setPayStatus(2); + coursePackageOrder1.setOrderNumber(tradeNo); + coursePackageOrder1.setAppUserId(null); + coursePackageOrderService.updateById(coursePackageOrder1); + addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig); + Thread.sleep(30000); + payMoneyUtil.confirm(finalSmid, finalCode1, tradeNo, paymentPrice.toString()); + } + if ("WAIT_BUYER_PAY".equals(s)) { + num++; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } return alipay; } diff --git a/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java b/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java index 1450e74..870c561 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java +++ b/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java @@ -3,10 +3,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.alipay.api.AlipayApiException; -import com.alipay.api.AlipayClient; -import com.alipay.api.CertAlipayRequest; -import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.*; import com.alipay.api.domain.*; import com.alipay.api.request.*; import com.alipay.api.response.*; @@ -76,45 +73,63 @@ private String certPath = "/usr/playpai/cert/weixin/apiclient_cert.p12";//微信证书 - public ResultUtil confirm(String smid,String code, String outTradeNo, String amount) { - AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", - aliAppid, - appPrivateKey, - "json", - "GBK", - alipay_public_key, - "RSA2"); + public ResultUtil confirm(String smid1,String code, String outTradeNo, String amount) throws AlipayApiException { + // 初始化SDK + AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); + + // 构造请求参数以调用接口 AlipayTradeSettleConfirmRequest request = new AlipayTradeSettleConfirmRequest(); - request.setBizContent("{" + - " \"out_request_no\":\""+code+"\"," + - " \"trade_no\":\""+outTradeNo+"\"," + - " \"settle_info\":{" + - " \"settle_detail_infos\":[" + - " {" + - " \"trans_in_type\":\"defaultSettle\"," + - " \"settle_entity_id\":\""+smid+"\"," + - " \"settle_entity_type\":\"SecondMerchant\"," + - " \"amount\":"+amount+"," + - " }" + - " ]" + - " }," + - " \"extend_params\":{" + - " \"royalty_freeze\":\"true\"" + - " }" + - "}"); - AlipayTradeSettleConfirmResponse response = null; - try { - response = alipayClient.execute(request); - } catch (AlipayApiException e) { - e.printStackTrace(); - } - if(response.isSuccess()){ + AlipayTradeSettleConfirmModel model = new AlipayTradeSettleConfirmModel(); + + // 设置确认结算请求流水号 + model.setOutRequestNo(code); + + // 设置支付宝交易号 + model.setTradeNo(outTradeNo); + + // 设置描述结算信息 + SettleInfo settleInfo = new SettleInfo(); + List<SettleDetailInfo> settleDetailInfos = new ArrayList<SettleDetailInfo>(); + SettleDetailInfo settleDetailInfos0 = new SettleDetailInfo(); + settleDetailInfos0.setAmount(amount); + settleDetailInfos0.setTransIn(smid1); + settleDetailInfos0.setSettleEntityType("SecondMerchant"); + settleDetailInfos0.setSettleEntityId(smid1); + settleDetailInfos0.setTransInType("defaultSettle"); + settleDetailInfos.add(settleDetailInfos0); + settleInfo.setSettleDetailInfos(settleDetailInfos); + model.setSettleInfo(settleInfo); + request.setBizModel(model); + System.err.println("结算金额"+amount); + // 第三方代调用模式下请设置app_auth_token + // request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->"); + + AlipayTradeSettleConfirmResponse response = alipayClient.execute(request); + System.out.println("返回体"+response.getBody()); + + + if (response.isSuccess()) { System.out.println("调用成功"); - return ResultUtil.success(); } else { System.out.println("调用失败"); - return ResultUtil.error("出现问题啦"); + // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接 + // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); + // System.out.println(diagnosisUrl); } + return ResultUtil.success(response.getBody()); + } + private static AlipayConfig getAlipayConfig() { + String privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA=="; + String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB"; + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId("2021004105665036"); + alipayConfig.setPrivateKey(privateKey); + alipayConfig.setFormat("json"); + alipayConfig.setAlipayPublicKey(alipayPublicKey); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + return alipayConfig; } // 属于平台的运营商 因为无需分账不冻结资金 public ResultUtil confirm1(String smid,String code, String outTradeNo, String amount) { @@ -161,56 +176,6 @@ * 支付宝支付 */ public ResultUtil alipay(String smid,String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) { -// //构造client -// CertAlipayRequest certAlipayRequest = new CertAlipayRequest (); -// //设置网关地址 -// certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do"); -// //设置应用Id -// certAlipayRequest.setAppId(aliAppid); -// //设置应用私钥 -// certAlipayRequest.setPrivateKey(appPrivateKey); -// //设置请求格式,固定值json -// certAlipayRequest.setFormat("json"); -// //设置字符集 -// certAlipayRequest.setCharset("UTF-8"); -// //设置签名类型 -// certAlipayRequest.setSignType("RSA2"); -// //设置应用公钥证书路径 -// certAlipayRequest.setCertPath(app_cert_path); -// //设置支付宝公钥证书路径 -// certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path); -// //设置支付宝根证书路径 -// certAlipayRequest.setRootCertPath(alipay_root_cert_path); -// //构造client -// AlipayClient alipayClient = null; -// try { -// alipayClient = new DefaultAlipayClient(certAlipayRequest); -// } catch (AlipayApiException e) { -// e.printStackTrace(); -// } -// //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay -// AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest (); -// //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 -// AlipayTradeAppPayModel model = new AlipayTradeAppPayModel (); -// model.setBody(body); -// model.setSubject (subject); -// model.setOutTradeNo (outTradeNo); -// model.setTimeoutExpress ("30m" ); -// model.setTotalAmount (amount); -// model.setProductCode ( "QUICK_MSECURITY_PAY" ); -// model.setPassbackParams(passbackParams);//自定义参数 -// request.setBizModel ( model ); -// request.setNotifyUrl (callbackPath + notifyUrl); -// try { -// //这里和普通的接口调用不同,使用的是sdkExecute -// AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); -// Map<String, String> map = new HashMap<>(); -// map.put("orderString", response.getBody()); -// System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。 -// return ResultUtil.success(map); -// } catch (AlipayApiException e ) { -// e.printStackTrace(); -// } //实例化客户端 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2"); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay @@ -236,6 +201,11 @@ SubMerchant subMerchant = new SubMerchant(); subMerchant.setMerchantId(smid); model.setSubMerchant(subMerchant); + if (!smid.equals("2088330203191220")){ + ExtendParams extendParams = new ExtendParams(); + extendParams.setRoyaltyFreeze("true"); + model.setExtendParams(extendParams); + } request.setBizModel(model); request.setNotifyUrl(callbackPath + notifyUrl); try { diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/DeptMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/DeptMapper.java index d969d44..83c1eb3 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/mapper/DeptMapper.java +++ b/cloud-server-management/src/main/java/com/dsh/course/mapper/DeptMapper.java @@ -22,9 +22,12 @@ /** * 获取ztree的节点列表 */ - List<ZTreeNode> tree(@Param("type") Integer type, @Param("id") Integer id); + List<ZTreeNode> tree(@Param("type") Integer type, @Param("id") Integer id,@Param("storeIds") List<Integer> storeIds); - List<Map<String, Object>> list(@Param("condition") String condition, @Param("objectType") Integer objectType, @Param("objectId") Integer objectId); + List<Map<String, Object>> list(@Param("condition") String condition, + @Param("objectType") Integer objectType, + @Param("objectId") Integer objectId, + @Param("storeIds") List<Integer> storeIds); /** * 获取所有部门列表 diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/RoleMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/RoleMapper.java index 368fbfa..fdf1b3e 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/mapper/RoleMapper.java +++ b/cloud-server-management/src/main/java/com/dsh/course/mapper/RoleMapper.java @@ -41,7 +41,7 @@ * @return * @date 2017年2月18日 上午10:32:04 */ - List<ZTreeNode> roleTreeList(@Param("type") Integer type, @Param("id") Integer id); + List<ZTreeNode> roleTreeList(@Param("type") Integer type, @Param("id") Integer id, @Param("storeIds") List<Integer> storeIds); /** * 获取角色列表树 diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java index 0bdd233..81c0d59 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java @@ -303,7 +303,8 @@ game.setOperationId(0); } System.out.println("============"+game); - + TStore tStore = storeService.getById(store); + game.setOperationId(tStore.getOperatorId()); // 判断是新增还是修改 修改不会重新生成sutuId if (game.getId()==null) { HashMap<String, String> map5 = new HashMap<>(); diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/DeptController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/DeptController.java index d02cd3f..8885e58 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/DeptController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/DeptController.java @@ -113,12 +113,6 @@ @ResponseBody public Object list(String condition) { List<Map<String, Object>> list = this.deptService.list(condition); - if (UserExt.getUser().getObjectType()==2){ - List<Map<String, Object>> filteredRoles = list.stream() - .collect(Collectors.toList()); - return filteredRoles; - } - return super.warpObject(new DeptWarpper(list)); } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/RoleController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/RoleController.java index fd5851e..a175b59 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/RoleController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/RoleController.java @@ -84,7 +84,7 @@ model.addAttribute("pName", ConstantFactory.me().getSingleRoleName(role.getPid())); model.addAttribute("deptName", ConstantFactory.me().getDeptName(role.getDeptid())); LogObjectHolder.me().set(role); - model.addAttribute("language",UserExt.getLanguage()); + model.addAttribute("language",1); return PREFIX + "/role_edit.html"; } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DeptServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DeptServiceImpl.java index 1ad113f..accf34e 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DeptServiceImpl.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DeptServiceImpl.java @@ -1,7 +1,10 @@ package com.dsh.guns.modular.system.service.impl; +import java.sql.Array; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import javax.annotation.Resource; @@ -10,6 +13,9 @@ import com.dsh.course.mapper.DeptMapper; import com.dsh.course.model.node.ZTreeNode; import com.dsh.guns.config.UserExt; +import com.dsh.guns.modular.system.model.TStore; +import com.dsh.guns.modular.system.service.IStoreService; +import io.swagger.models.auth.In; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,6 +28,8 @@ @Resource private DeptMapper deptMapper; + @Resource + private IStoreService storeService; @Override public void deleteDept(Integer deptId) { @@ -39,14 +47,35 @@ @Override public List<ZTreeNode> tree() { - - return this.baseMapper.tree(UserExt.getUser().getObjectType(),UserExt.getUser().getObjectId()); + Integer objectType = UserExt.getUser().getObjectType(); + Integer objectId = UserExt.getUser().getObjectId(); + List<Integer> storeIds = new ArrayList<>(); + if (objectType==2){ + // 查询运营商下的门店ids + List<Integer> collect = storeService.lambdaQuery().eq(TStore::getOperatorId, objectId).list() + .stream().map(TStore::getId).collect(Collectors.toList()); + if (collect.isEmpty()){ + storeIds.add(-1); + } + storeIds.addAll(collect); + } + return this.baseMapper.tree(UserExt.getUser().getObjectType(),UserExt.getUser().getObjectId(),storeIds); } @Override public List<Map<String, Object>> list(String condition) { Integer objectType = UserExt.getUser().getObjectType(); Integer objectId = UserExt.getUser().getObjectId(); - return this.baseMapper.list(condition,objectType,objectId); + List<Integer> storeIds = new ArrayList<>(); + if (objectType==2){ + // 查询运营商下的门店ids + List<Integer> collect = storeService.lambdaQuery().eq(TStore::getOperatorId, objectId).list() + .stream().map(TStore::getId).collect(Collectors.toList()); + if (collect.isEmpty()){ + storeIds.add(-1); + } + storeIds.addAll(collect); + } + return this.baseMapper.list(condition,objectType,objectId,storeIds); } } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RoleServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RoleServiceImpl.java index c0383cd..08db44e 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RoleServiceImpl.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RoleServiceImpl.java @@ -1,7 +1,9 @@ package com.dsh.guns.modular.system.service.impl; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import javax.annotation.Resource; @@ -11,6 +13,8 @@ import com.dsh.course.model.node.ZTreeNode; import com.dsh.guns.config.UserExt; import com.dsh.guns.modular.system.controller.util.Convert; +import com.dsh.guns.modular.system.model.TStore; +import com.dsh.guns.modular.system.service.IStoreService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -64,10 +68,21 @@ public int deleteRolesById(Integer roleId) { return this.baseMapper.deleteRolesById(roleId); } - + @Resource + private IStoreService storeService; @Override public List<ZTreeNode> roleTreeList(Integer type,Integer id) { - return this.baseMapper.roleTreeList(type,id); + List<Integer> storeIds = new ArrayList<>(); + if (type==2){ + // 查询运营商下的门店ids + List<Integer> collect = storeService.lambdaQuery().eq(TStore::getOperatorId, id).list() + .stream().map(TStore::getId).collect(Collectors.toList()); + if (collect.isEmpty()){ + storeIds.add(-1); + } + storeIds.addAll(collect); + } + return this.baseMapper.roleTreeList(type,id,storeIds); } @Override diff --git a/cloud-server-management/src/main/resources/mapper/DeptMapper.xml b/cloud-server-management/src/main/resources/mapper/DeptMapper.xml index 88658e1..0927bb1 100644 --- a/cloud-server-management/src/main/resources/mapper/DeptMapper.xml +++ b/cloud-server-management/src/main/resources/mapper/DeptMapper.xml @@ -24,7 +24,20 @@ 'false' END ) as isOpen from sys_dept where 1=1 - and objectType =#{type} and objectId =#{id} + <if test="type == 3"> + and objectType = 3 and objectId =#{id} + </if> + <if test="type == 2"> + and (objectType = 2 and objectId =#{id} + or + <if test="storeIds != null and storeIds.size()>0"> + objectId IN + <foreach collection="storeIds" separator="," item="id" open="(" close=")"> + #{id} + </foreach> + </if> + ) + </if> </select> <select id="list" resultType="java.util.Map"> select * from sys_dept where 1=1 @@ -34,9 +47,19 @@ <if test="objectType == 3"> and objectType = 3 and objectId =#{objectId} </if> - <if test="objectType == 1"> - and objectType = 1 + <if test="objectType == 2"> + and (objectType = 2 and objectId =#{objectId} + or + <if test="storeIds != null and storeIds.size()>0"> + objectId IN + <foreach collection="storeIds" separator="," item="id" open="(" close=")"> + #{id} + </foreach> + </if> + ) </if> + + order by num ASC </select> diff --git a/cloud-server-management/src/main/resources/mapper/RoleMapper.xml b/cloud-server-management/src/main/resources/mapper/RoleMapper.xml index 36432b2..5981a86 100644 --- a/cloud-server-management/src/main/resources/mapper/RoleMapper.xml +++ b/cloud-server-management/src/main/resources/mapper/RoleMapper.xml @@ -42,6 +42,17 @@ <if test="type==3"> and objType =3 and objId =#{id} </if> + <if test="type == 2"> + and (objType = 2 and objId =#{id} + or + <if test="storeIds != null and storeIds.size()>0"> + objId IN + <foreach collection="storeIds" separator="," item="id" open="(" close=")"> + #{id} + </foreach> + </if> + ) + </if> </select> <select id="roleTreeListByRoleId" resultType="com.dsh.course.model.node.ZTreeNode"> @@ -80,6 +91,17 @@ <if test="type==3"> and objType =3 and objId =#{id} </if> + <if test="type == 2"> + and (objType = 2 and objId =#{id} + or + <if test="storeIds != null and storeIds.size()>0"> + objId IN + <foreach collection="storeIds" separator="," item="id" open="(" close=")"> + #{id} + </foreach> + </if> + ) + </if> ) r1 ON r.ID = r1.ID ORDER BY pId, diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html index a25a0b4..74fa8f6 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tSite/TSite_add.html @@ -204,7 +204,7 @@ @if(objectType==1){ <div class="form-group" style=" margin-left: 17%;" > - <label class="col-sm-1 control-label">场地说明222:</label> + <label class="col-sm-1 control-label">场地说明:</label> <div class="col-sm-5"> <textarea type="text/plain" id="editor" style="height: 300px;width: 800px;"></textarea> </div> diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js index dedc89f..b728895 100644 --- a/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js +++ b/cloud-server-management/src/main/webapp/static/modular/system/tSite/tSite_info.js @@ -345,18 +345,16 @@ var objectType =$("#objectType").val() data.halfName= halfName; + var introduce=""; if (objectType==1){ introduce = TSiteInfo.editor.getContent(); - } - - console.log(introduce) - if(introduce==""){ - Feng.info("请输入公告内容") - return; + console.log(introduce) + if(introduce==""){ + Feng.info("请输入场地说明") + return; + } } data.introduce= introduce; - - var goodImgs = TSiteInfo.goodsPicArray; if(goodImgs.length==0){ diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java index 0562ff8..83c0f5a 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java +++ b/cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java @@ -271,6 +271,7 @@ ResultUtil alipay = payMoneyUtil.alipay(smid1,"游戏支付", "游戏支付", params, code, config.getCash().toString(), "/base/game/aliPaymentGameCallback"); if (alipay.getCode() == 200) { + String finalSmid = smid1; new Thread(new Runnable() { @Override public void run() { @@ -314,7 +315,8 @@ } gameRecordService.updateBatchById(list); Integer integer = startGame(uid, gameType, gameId, spaceId, sutuId); - + Thread.sleep(30000); + payMoneyUtil.confirm(finalSmid, code, one.getOrderNo(), config.getCash().toString()); break; } if ("WAIT_BUYER_PAY".equals(s)) { diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java index 91d6eb5..95a170c 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java +++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java @@ -520,6 +520,7 @@ ResultUtil alipay = payMoneyUtil.alipay(smid1,"预约场地", "预约场地", id.toString(), code, paymentPrice.toString(), "/base/site/aliPaymentSiteCallback"); System.out.println("预约场地----" + alipay.getCode()); if (alipay.getCode() == 200) { + String finalSmid = smid1; new Thread(new Runnable() { @Override public void run() { @@ -556,6 +557,8 @@ siteBooking.setPayOrderNo(tradeNo); siteBookingService.updateById(siteBooking); System.err.println("======完成支付"); + Thread.sleep(30000); + payMoneyUtil.confirm(finalSmid, code, tradeNo, paymentPrice.toString()); break; } if ("WAIT_BUYER_PAY".equals(s)) { diff --git a/cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java b/cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java index 8fecbe2..003468a 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java +++ b/cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java @@ -3,10 +3,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.alipay.api.AlipayApiException; -import com.alipay.api.AlipayClient; -import com.alipay.api.CertAlipayRequest; -import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.*; import com.alipay.api.domain.*; import com.alipay.api.msg.AlipayMsgClient; import com.alipay.api.msg.MsgHandler; @@ -76,46 +73,63 @@ private String certPath = "/usr/playpai/cert/weixin/apiclient_cert.p12";//微信证书 - public ResultUtil confirm(String smid, String code, String outTradeNo, String amount) { + public ResultUtil confirm(String smid1,String code, String outTradeNo, String amount) throws AlipayApiException { + // 初始化SDK + AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); - AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", - aliAppid, - appPrivateKey, - "json", - "GBK", - alipay_public_key, - "RSA2"); + // 构造请求参数以调用接口 AlipayTradeSettleConfirmRequest request = new AlipayTradeSettleConfirmRequest(); - request.setBizContent("{" + - " \"out_request_no\":\"" + code + "\"," + - " \"trade_no\":\"" + outTradeNo + "\"," + - " \"settle_info\":{" + - " \"settle_detail_infos\":[" + - " {" + - " \"trans_in_type\":\"defaultSettle\"," + - " \"settle_entity_id\":\"" + smid + "\"," + - " \"settle_entity_type\":\"SecondMerchant\"," + - " \"amount\":" + amount + "," + - " }" + - " ]" + - " }," + - " \"extend_params\":{" + - " \"royalty_freeze\":\"true\"" + - " }" + - "}"); - AlipayTradeSettleConfirmResponse response = null; - try { - response = alipayClient.execute(request); - } catch (AlipayApiException e) { - e.printStackTrace(); - } + AlipayTradeSettleConfirmModel model = new AlipayTradeSettleConfirmModel(); + + // 设置确认结算请求流水号 + model.setOutRequestNo(code); + + // 设置支付宝交易号 + model.setTradeNo(outTradeNo); + + // 设置描述结算信息 + SettleInfo settleInfo = new SettleInfo(); + List<SettleDetailInfo> settleDetailInfos = new ArrayList<SettleDetailInfo>(); + SettleDetailInfo settleDetailInfos0 = new SettleDetailInfo(); + settleDetailInfos0.setAmount(amount); + settleDetailInfos0.setTransIn(smid1); + settleDetailInfos0.setSettleEntityType("SecondMerchant"); + settleDetailInfos0.setSettleEntityId(smid1); + settleDetailInfos0.setTransInType("defaultSettle"); + settleDetailInfos.add(settleDetailInfos0); + settleInfo.setSettleDetailInfos(settleDetailInfos); + model.setSettleInfo(settleInfo); + request.setBizModel(model); + System.err.println("结算金额"+amount); + // 第三方代调用模式下请设置app_auth_token + // request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->"); + + AlipayTradeSettleConfirmResponse response = alipayClient.execute(request); + System.out.println("返回体"+response.getBody()); + + if (response.isSuccess()) { System.out.println("调用成功"); - return ResultUtil.success(); } else { System.out.println("调用失败"); - return ResultUtil.error("出现问题啦"); + // sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接 + // String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response); + // System.out.println(diagnosisUrl); } + return ResultUtil.success(response.getBody()); + } + private static AlipayConfig getAlipayConfig() { + String privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA=="; + String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB"; + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId("2021004105665036"); + alipayConfig.setPrivateKey(privateKey); + alipayConfig.setFormat("json"); + alipayConfig.setAlipayPublicKey(alipayPublicKey); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + return alipayConfig; } // 属于平台的运营商 因为无需分账不冻结资金 @@ -164,56 +178,6 @@ * 支付宝支付 */ public ResultUtil alipay(String smid, String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) { -//// //构造client -// CertAlipayRequest certAlipayRequest = new CertAlipayRequest (); -// //设置网关地址 -// certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do"); -// //设置应用Id -// certAlipayRequest.setAppId(aliAppid); -// //设置应用私钥 -// certAlipayRequest.setPrivateKey(appPrivateKey); -// //设置请求格式,固定值json -// certAlipayRequest.setFormat("json"); -// //设置字符集 -// certAlipayRequest.setCharset("UTF-8"); -// //设置签名类型 -// certAlipayRequest.setSignType("RSA2"); -// //设置应用公钥证书路径 -// certAlipayRequest.setCertPath(app_cert_path); -// //设置支付宝公钥证书路径 -// certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path); -// //设置支付宝根证书路径 -// certAlipayRequest.setRootCertPath(alipay_root_cert_path); -// //构造client -// AlipayClient alipayClient = null; -// try { -// alipayClient = new DefaultAlipayClient(certAlipayRequest); -// } catch (AlipayApiException e) { -// e.printStackTrace(); -// } -// //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay -// AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest (); -// //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 -// AlipayTradeAppPayModel model = new AlipayTradeAppPayModel (); -// model.setBody(body); -// model.setSubject (subject); -// model.setOutTradeNo (outTradeNo); -// model.setTimeoutExpress ("30m" ); -// model.setTotalAmount (amount); -// model.setProductCode ( "QUICK_MSECURITY_PAY" ); -// model.setPassbackParams(passbackParams);//自定义参数 -// request.setBizModel ( model ); -// request.setNotifyUrl (callbackPath + notifyUrl); -// try { -// //这里和普通的接口调用不同,使用的是sdkExecute -// AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); -// Map<String, String> map = new HashMap<>(); -// map.put("orderString", response.getBody()); -// System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。 -// return ResultUtil.success(map); -// } catch (AlipayApiException e ) { -// e.printStackTrace(); -// } //实例化客户端 @@ -241,6 +205,11 @@ SubMerchant subMerchant = new SubMerchant(); subMerchant.setMerchantId(smid); model.setSubMerchant(subMerchant); + if (!smid.equals("2088330203191220")){ + ExtendParams extendParams = new ExtendParams(); + extendParams.setRoyaltyFreeze("true"); + model.setExtendParams(extendParams); + } request.setBizModel(model); request.setNotifyUrl(callbackPath + notifyUrl); -- Gitblit v1.7.1