From 9a6ce5f7180a4e8c9e8dfd4ea5232052d9220b3a Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期四, 25 五月 2023 16:57:19 +0800 Subject: [PATCH] 修改司机端支付 --- driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverServiceImpl.java | 217 +++++++++++++++++++++++++++++------------- driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverController.java | 34 ++++++ driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDriverService.java | 2 driver/guns-admin/src/main/resources/application.yml | 8 driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PayMoneyUtil.java | 16 +- 5 files changed, 195 insertions(+), 82 deletions(-) diff --git a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverController.java b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverController.java index c1e7500..90ca640 100644 --- a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverController.java +++ b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverController.java @@ -651,18 +651,22 @@ @ApiOperation(value = "账户余额充值", tags = {"司机端-个人中心"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "充值金额", name = "amount", required = true, dataType = "double"), + @ApiImplicitParam(value = "支付方式(1=微信,2=支付宝)", name = "type", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) - public ResponseWarpper balanceRecharge(Double amount){ + public ResponseWarpper balanceRecharge(Integer type, Double amount){ if(null == amount){ return ResponseWarpper.success(ResultUtil.paranErr("amount")); + } + if(null == type){ + return ResponseWarpper.success(ResultUtil.paranErr("type")); } try { Integer uid = driverService.getUserByRequest(); if(null == uid){ return ResponseWarpper.tokenErr(); } - ResultUtil resultUtil = driverService.balanceRecharge(uid, amount); + ResultUtil resultUtil = driverService.balanceRecharge(uid, type, amount); return ResponseWarpper.success(resultUtil); }catch (Exception e){ e.printStackTrace(); @@ -698,6 +702,32 @@ } + /** + * 账户余额充值支付回调 + * @param request + * @param response + */ + @ResponseBody + @PostMapping("/base/driver/balanceRechargeCallbackAli") + public void balanceRechargeCallbackAli(HttpServletRequest request, HttpServletResponse response){ + try { + Map<String, String> map = payMoneyUtil.alipayCallback(request); + if(null != map){ + String out_trade_no = map.get("out_trade_no"); + String transaction_id = map.get("trade_no"); + String orderId = out_trade_no.substring(17); + driverService.balanceRechargeCallback(out_trade_no, transaction_id); + response.setContentType("text/html;charset=UTF-8"); + PrintWriter out; + out = response.getWriter(); + out.println("success"); // 请不要修改或删除 + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + @ResponseBody @PostMapping("/api/driver/queryPerformanceSummary") // @ServiceLog(name = "获取业绩排行", url = "/api/driver/queryPerformanceSummary") diff --git a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDriverService.java b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDriverService.java index fe82d90..ed7f305 100644 --- a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDriverService.java +++ b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/IDriverService.java @@ -129,7 +129,7 @@ * @return * @throws Exception */ - ResultUtil balanceRecharge(Integer uid, Double amount) throws Exception; + ResultUtil balanceRecharge(Integer uid, Integer type, Double amount) throws Exception; /** diff --git a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverServiceImpl.java b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverServiceImpl.java index 8779229..b004e9e 100644 --- a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverServiceImpl.java +++ b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverServiceImpl.java @@ -502,7 +502,7 @@ @Override public PromotionWarpper queryPromotionQRCode(Integer uid) throws Exception { PromotionWarpper promotionWarpper = new PromotionWarpper(); - promotionWarpper.setUrl("http://121.37.15.157/share/driverShare/index.html?inviterId=" + uid); + promotionWarpper.setUrl("http://139.9.238.199/share/driverShare/index.html?inviterId=" + uid); int user = appUserService.selectCount(new EntityWrapper<AppUser>().eq("inviterType", 2).eq("inviterId", uid).eq("status", 1)); int driver = this.selectCount(new EntityWrapper<Driver>().eq("inviterType", 2).eq("inviterId", uid).eq("approvalStatus", 2).eq("status", 1)); promotionWarpper.setTotal(user + driver); @@ -679,7 +679,7 @@ @Override - public ResultUtil balanceRecharge(Integer uid, Double amount) throws Exception { + public ResultUtil balanceRecharge(Integer uid, Integer type, Double amount) throws Exception { Driver driver = this.selectById(uid); //调起微信 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); @@ -695,82 +695,163 @@ rechargeRecord.setAgentId(driver.getAgentId()); rechargeRecordService.insert(rechargeRecord); - - ResultUtil weixinpay = payMoneyUtil.weixinpay("余额充值", "", out_trade_no, amount.toString(), "/base/driver/balanceRechargeCallback", "APP"); - new Thread(new Runnable() { - @Override - public void run() { - try { - int num = 1; - int wait = 0; - while (num <= 10){ - int min = 5000; - wait += (min * num); - RechargeRecord rechargeRecord1 = rechargeRecordService.selectOne(new EntityWrapper<RechargeRecord>().eq("code", out_trade_no)); - if(rechargeRecord1.getPayStatus() != 1){ - return; - } - - /** - * SUCCESS--支付成功 - * REFUND--转入退款 - * NOTPAY--未支付 - * CLOSED--已关闭 - * REVOKED--已撤销(刷卡支付) - * USERPAYING--用户支付中 - * PAYERROR--支付失败(其他原因,如银行返回失败) - * ACCEPT--已接收,等待扣款 - */ - ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(out_trade_no, ""); - if(resultUtil.getCode() == 200){ - Map<String, String> map = resultUtil.getData(); - String trade_type = map.get("trade_type"); - String trade_state = map.get("trade_state"); - String transaction_id = map.get("transaction_id"); - if("REFUND".equals(trade_state) || "NOTPAY".equals(trade_state) || "CLOSED".equals(trade_state) || "REVOKED".equals(trade_state) || "PAYERROR".equals(trade_state)){ - rechargeRecordService.deleteById(rechargeRecord1.getId()); + if(type == 1){ + ResultUtil weixinpay = payMoneyUtil.weixinpay("余额充值", "", out_trade_no, amount.toString(), "/base/driver/balanceRechargeCallback", "APP"); + if(weixinpay.getCode() != 200){ + return weixinpay; + } + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10){ + int min = 5000; + wait += (min * num); + RechargeRecord rechargeRecord1 = rechargeRecordService.selectOne(new EntityWrapper<RechargeRecord>().eq("code", out_trade_no)); + if(rechargeRecord1.getPayStatus() != 1){ return; } - if("SUCCESS".equals(trade_state)){ - Driver driver1 = DriverServiceImpl.this.selectById(uid); - AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); - accountChangeDetail.setUserType(2); - accountChangeDetail.setUserId(uid); - accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); - accountChangeDetail.setChangeType(3); - accountChangeDetail.setType(1); - accountChangeDetail.setCreateTime(new Date()); - accountChangeDetail.setExplain("余额充值"); - accountChangeDetail.setOldData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission()); - driver1.setBalance(driver1.getBalance() + amount); - accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission()); - DriverServiceImpl.this.updateById(driver1); - accountChangeDetailService.saveData(accountChangeDetail); - rechargeRecord1.setPayTime(new Date()); - rechargeRecord1.setPayStatus(2); - rechargeRecord1.setOrderNumber(transaction_id); - rechargeRecordService.updateById(rechargeRecord1); - return; - } - if("USERPAYING".equals(trade_state) || "ACCEPT".equals(trade_state)){ + /** + * SUCCESS--支付成功 + * REFUND--转入退款 + * NOTPAY--未支付 + * CLOSED--已关闭 + * REVOKED--已撤销(刷卡支付) + * USERPAYING--用户支付中 + * PAYERROR--支付失败(其他原因,如银行返回失败) + * ACCEPT--已接收,等待扣款 + */ + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryWXOrder(out_trade_no, ""); + if(resultUtil.getCode() == 200){ + Map<String, String> map = resultUtil.getData(); + String trade_type = map.get("trade_type"); + String trade_state = map.get("trade_state"); + String transaction_id = map.get("transaction_id"); + if("REFUND".equals(trade_state) || "NOTPAY".equals(trade_state) || "CLOSED".equals(trade_state) || "REVOKED".equals(trade_state) || "PAYERROR".equals(trade_state)){ + rechargeRecordService.deleteById(rechargeRecord1.getId()); + return; + } + if("SUCCESS".equals(trade_state)){ + Driver driver1 = DriverServiceImpl.this.selectById(uid); + AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); + accountChangeDetail.setUserType(2); + accountChangeDetail.setUserId(uid); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setChangeType(3); + accountChangeDetail.setType(1); + accountChangeDetail.setCreateTime(new Date()); + accountChangeDetail.setExplain("余额充值"); + accountChangeDetail.setOldData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission()); + driver1.setBalance(driver1.getBalance() + amount); + accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission()); + DriverServiceImpl.this.updateById(driver1); + accountChangeDetailService.saveData(accountChangeDetail); + + rechargeRecord1.setPayTime(new Date()); + rechargeRecord1.setPayStatus(2); + rechargeRecord1.setOrderNumber(transaction_id); + rechargeRecordService.updateById(rechargeRecord1); + return; + } + if("USERPAYING".equals(trade_state) || "ACCEPT".equals(trade_state)){ + Thread.sleep(wait); + num++; + } + }else{ Thread.sleep(wait); num++; } - }else{ - Thread.sleep(wait); - num++; + if(10 == num){ + rechargeRecordService.deleteById(rechargeRecord1.getId()); + } } - if(10 == num){ - rechargeRecordService.deleteById(rechargeRecord1.getId()); - } + }catch (Exception e){ + e.printStackTrace(); } - }catch (Exception e){ - e.printStackTrace(); } + }).start(); + return weixinpay; + } + if(type == 2){ + ResultUtil<String> alipay = payMoneyUtil.alipay("余额充值", "余额充值", out_trade_no, amount.toString(), "/base/driver/balanceRechargeCallbackAli"); + if(alipay.getCode() != 200){ + return alipay; } - }).start(); - return weixinpay; + new Thread(new Runnable() { + @Override + public void run() { + try { + int num = 1; + int wait = 0; + while (num <= 10){ + int min = 5000; + wait += (min * num); + RechargeRecord rechargeRecord1 = rechargeRecordService.selectOne(new EntityWrapper<RechargeRecord>().eq("code", out_trade_no)); + if(rechargeRecord1.getPayStatus() != 1){ + return; + } + + /** + * 交易状态: + * WAIT_BUYER_PAY(交易创建,等待买家付款)、 + * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 + * TRADE_SUCCESS(交易支付成功)、 + * TRADE_FINISHED(交易结束,不可退款) + */ + ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(out_trade_no); + if(resultUtil.getCode() == 200){ + Map<String, String> map = resultUtil.getData(); + String tradeStatus = map.get("tradeStatus"); + String tradeNo = map.get("tradeNo"); + if("TRADE_CLOSED".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus)){ + rechargeRecordService.deleteById(rechargeRecord1.getId()); + return; + } + if("TRADE_SUCCESS".equals(tradeStatus)){ + Driver driver1 = DriverServiceImpl.this.selectById(uid); + AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); + accountChangeDetail.setUserType(2); + accountChangeDetail.setUserId(uid); + accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); + accountChangeDetail.setChangeType(3); + accountChangeDetail.setType(1); + accountChangeDetail.setCreateTime(new Date()); + accountChangeDetail.setExplain("余额充值"); + accountChangeDetail.setOldData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission()); + driver1.setBalance(driver1.getBalance() + amount); + accountChangeDetail.setNewData(driver1.getBalance() + driver1.getBackgroundBalance() + driver1.getCouponBalance() + driver1.getCommission()); + DriverServiceImpl.this.updateById(driver1); + accountChangeDetailService.saveData(accountChangeDetail); + + rechargeRecord1.setPayTime(new Date()); + rechargeRecord1.setPayStatus(2); + rechargeRecord1.setOrderNumber(tradeNo); + rechargeRecordService.updateById(rechargeRecord1); + return; + } + if("WAIT_BUYER_PAY".equals(tradeStatus)){ + Thread.sleep(wait); + num++; + } + }else{ + Thread.sleep(wait); + num++; + } + if(10 == num){ + rechargeRecordService.deleteById(rechargeRecord1.getId()); + } + } + }catch (Exception e){ + e.printStackTrace(); + } + } + }).start(); + return alipay; + } + return ResultUtil.success(); } diff --git a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PayMoneyUtil.java b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PayMoneyUtil.java index 3b818a9..5eeefc7 100644 --- a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PayMoneyUtil.java +++ b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PayMoneyUtil.java @@ -87,7 +87,7 @@ /** * 支付宝支付 */ - public ResultUtil alipay(String body, String subject, String outTradeNo, String amount, String notifyUrl){ + public ResultUtil<String> alipay(String body, String subject, String outTradeNo, String amount, String notifyUrl){ //实例化客户端 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipayPublicKey, "RSA2"); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay @@ -105,10 +105,8 @@ 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); + System.out.println(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。 + return ResultUtil.success(response.getBody()); } catch (AlipayApiException e) { e.printStackTrace(); } @@ -199,7 +197,7 @@ * @return * @throws Exception */ - public ResultUtil queryALIOrder(String out_trade_no) throws Exception{ + public ResultUtil<Map<String, String>> queryALIOrder(String out_trade_no) throws Exception{ AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",aliAppid, appPrivateKey,"json","UTF-8", alipay_public_key,"RSA2"); AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); request.setBizContent("{" + @@ -208,7 +206,11 @@ AlipayTradeQueryResponse response = alipayClient.execute(request); if(response.isSuccess()){ String tradeStatus = response.getTradeStatus();//交易状态:WAIT_BUYER_PAY(交易创建,等待买家付款)、TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、TRADE_SUCCESS(交易支付成功)、TRADE_FINISHED(交易结束,不可退款) - return ResultUtil.success(tradeStatus); + String tradeNo = response.getTradeNo(); + Map<String, String> map = new HashMap<>(); + map.put("tradeStatus", tradeStatus); + map.put("tradeNo", tradeNo); + return ResultUtil.success(map); } else { return ResultUtil.error(response.getMsg()); } diff --git a/driver/guns-admin/src/main/resources/application.yml b/driver/guns-admin/src/main/resources/application.yml index dd26d12..d2cf298 100644 --- a/driver/guns-admin/src/main/resources/application.yml +++ b/driver/guns-admin/src/main/resources/application.yml @@ -88,10 +88,10 @@ --- alipay: - appid: 111 #应用程序唯一标识 - appPrivateKey: 111 #开发者应用私钥 - alipayPublicKey: 111 #应用公钥 - alipay_public_key: 111 #支付宝公钥 + appid: 2021003194663664 #应用程序唯一标识 + appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCK0Y+UltYRXULYxSfcayIxWw86/xqm93q7ymLpp1+XfrhZdgT81AbY1/FNPmR+TNV56W6Lt3D4AoInpby1eN+frfULyyFxDW8BcahsYm75mpaiJFzdogSUs0BecHK6AxgWrskPRa0hCy7RW6CsXx3n2N0mzfj5fibvcU9GrYz8AxE9GfB5OVAqNSBa7u/win1YttqZVSaa1Wn49omUwIG66efAymTRUwo2G8PGhWAzMSAoj7LufCQtAxsXXI6cmcDYSY7qK09dT7H7+kIXjqHqFjzHdV7xr9uBqUjewdQabYraXfECzXHjigaTHrXWmq9Et7QA5al2NT1OXg4Uz2cjAgMBAAECggEAG13k6G40FYhFPWbgzNtyCjjhb8gLAQ+Y6pyjk1yjw8H/peNWaGGEWAt6TrgWJ7AOBdK3MGQhqUMVVaue4EfMDjbFMGYDWb5EPAykH3noVtzbBWwVwrvGG2qbLgMNGw6xGQesK46Y6wLBYBSoQFMgGizurE++3bC5DEtSTaS5PpUuwReUMj8exjklQhK1rzNFybezSP0qES781Jf+pgdChFTrYFvMbj5T05QkUk94Cbo5gT0wdWja1CSsvb7I6gb9+QF4/YmGp8DAWitJFNXYuvuq8RcgIod4JY3QDq4vwcy9Wk2Fm4vJd2c7yIgvVMiwPHTOCwXEw1gkvKO1dONvgQKBgQD71pXKYqM506/UtPtF5HOaoXJuRYIMuX0+OdHVFNizqmJeKykaIjhxWx83Zf1r+43fPpTSNDoJIQzlzfe0dRtilCWM3E05QIiAZOCJPCxdMLQjpAk7vReurQBcjLgIFQj5bV/76NvfU78jwiyiLr3HW0LXkr99MIdQ8s4j7tZqqwKBgQCNHNca9MHRHrmx03IpxYgfzarh7l3mFDTck8YCDVdjUENh2fdFGHYExACr87clBBNq2f73L1++N5AbjzqONcMBN/Ix8etRh6DUzT17WeYzRWwgLV4p/R9VoLUtEEovQEVbjMveaaYFQzdnp8/XKdgND473YY0Nf5koBcwbwFj1aQKBgFXEz18OGOko30liGfHDzFttgLttkM0knzMCHiSj5OnLrZTEvkrYPMDed9M2OQj9s2PEvIqanuldCDd73lDnUVxReDhxDxvgjpyrvoz+oV1bqP46b6qYy+gBo43hnwuhnlzUk0wIEloM+5wCFZFmudubiThCElVgobU//FTgksXhAoGAZGVneSs4FfNZRHZem++I2K+360RvE/m+XkzYrK8XRHZfamfsMAGmPd/BZpVf8PsEYZo1d2ICKVBYu/LcQz9mvSAztWsb9Aad26kmG/Oq/0FeG0qL2y3WtFJBdI1JanK8pdT3WwcpckcPTTUsfzWrHCe8nK6P71GgAsSVIg1ofTkCgYEA7B04BBRZ3HKnSnXBWMEhW5Tk2H2mLn3Dp4vj+rsNzDBiyJMGjmmWCxyfhR9E5TKTSSiYL36aC4Ee5RXOG2bIGFhWNSX8e97X2LwPzm1L2HPML/V6nOdhm9RBqASlBayajNQWQ7xiUViATn1v/XZeY0HKOUCLsfD5GhoRIXMgAz0= #开发者应用私钥 + alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAitGPlJbWEV1C2MUn3GsiMVsPOv8apvd6u8pi6adfl364WXYE/NQG2NfxTT5kfkzVeelui7dw+AKCJ6W8tXjfn631C8shcQ1vAXGobGJu+ZqWoiRc3aIElLNAXnByugMYFq7JD0WtIQsu0VugrF8d59jdJs34+X4m73FPRq2M/AMRPRnweTlQKjUgWu7v8Ip9WLbamVUmmtVp+PaJlMCBuunnwMpk0VMKNhvDxoVgMzEgKI+y7nwkLQMbF1yOnJnA2EmO6itPXU+x+/pCF46h6hY8x3Ve8a/bgalI3sHUGm2K2l3xAs1x44oGkx611pqvRLe0AOWpdjU9Tl4OFM9nIwIDAQAB #应用公钥 + alipay_public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAglHWHEp1X1ZmwlGGEsBS7T4/5CmC3BI1L4nloVUa205TqhUrrHBPmxfjwH11iX3IXL654dmbArtFWAdzMEp54i9qWBnSYcUvj/HUwPwZyQLxiB3aTsS6ZZnis60XWiouFq4Z1ChPiyCLhpL3eRTaEtVJl0+N/GFy38y04GRslyufPO8CBz3M8twXuYFHWcYgI4txmLXgDdP1bPBnAZrqQW+GvuoJNrUMEaNhtIrQUrbvZYzNDWZDLO17pUjseHI+Kyq5zjBh5ocLLCJcbdPSigYzzamxMgt10jEjqIbmK8ytXt6gVR7/1gYBnX1FrvHY7j9uWYWllfi4Kd5Mg+nEqwIDAQAB #支付宝公钥 --- -- Gitblit v1.7.1