From 61bbd595ee2bc3c67b40878894dcc07174c6eea6 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 24 九月 2024 10:15:30 +0800 Subject: [PATCH] 玩湃微信商户分账 --- cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 106 insertions(+), 9 deletions(-) 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 4a0b2a2..f842961 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 @@ -871,7 +871,7 @@ } } try { - return WeChatPayment(code, money); + return WeChatPayment(code, money,request.getLessonId()); } catch (Exception e) { return ResultUtil.runErr(); } @@ -902,9 +902,18 @@ return ResultUtil.success(); } - - public ResultUtil WeChatPayment(String code, BigDecimal request) throws Exception { - ResultUtil weixinpay = payMoneyUtil.weixinpay("课包续费", "", code, request.toString(), + public ResultUtil WeChatPayment(String code, BigDecimal request,Integer coursePackageId) throws Exception { + TCoursePackage byId = coursePackageService.getById(coursePackageId); + Integer storeId = byId.getStoreId(); + Store store = storeClient.queryStoreById(storeId); + // 是否分账 0否1是 + int isFenZhang= 1; + String merchantNumber = ""; + if (store.getOperatorId()==null || store.getOperatorId()==0){ + // 平台 + isFenZhang = 0; + } + ResultUtil weixinpay = payMoneyUtil.weixinpay("课包续费"+"-"+isFenZhang, "", code, request.toString(), "/base/coursePackage/wechatRegisteredCoursesCallback", "APP", ""); if (weixinpay.getCode() == 200) { String finalCode = code; @@ -955,6 +964,27 @@ .eq("classHours", coursePackageOrder1.getClassHours()) ); coursePackageService.addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig); + if (store.getOperatorId()!=null && store.getOperatorId()!=0){ + // 休眠两分钟后再调用分账接口 避免提示订单正在处理中 + Thread.sleep(120000); + // 根据运营商id获取对应运营商分账比例 返回格式: 微信分账比例,支付宝分账比例 + String proportionByOperatorId = storeClient.getProportionByOperatorId(store.getOperatorId()); + String[] split = proportionByOperatorId.split(","); + String s1 = split[0]; + if (!s1.equals("未设置")){ + BigDecimal bigDecimal = new BigDecimal(s1); + // 分账比例 + BigDecimal bigDecimal1 = bigDecimal.divide(new BigDecimal(100)).setScale(2); + // 微信商户号 + String s2 = storeClient.getmerchantNumberByOperatorId(store.getOperatorId()); + String nonce_str = UUIDUtil.getRandomCode(16); + + ResultUtil fenzhang = payMoneyUtil.fenzhang(transaction_id, request.multiply(bigDecimal1), s2,nonce_str); + if (!fenzhang.getCode().equals(500)){ + System.err.println("分账失败 原因是:"+fenzhang.getMsg()); + } + } + } break; } if ("USERPAYING".equals(s) || "NOTPAY".equals(s)) { @@ -972,7 +1002,23 @@ } private String smid = "2088330203191220";//平台支付宝商户号 + public static void main(String[] args) { + BigDecimal bigDecimal = new BigDecimal("100"); + + + String s = "1"; + double v = Double.parseDouble(s); + double v1 = v * 0.01; + + BigDecimal bigDecimal1 = new BigDecimal(String.valueOf(v1)); + BigDecimal multiply = bigDecimal1.multiply(bigDecimal); + System.err.println(v); + System.err.println(v1); + System.err.println(multiply); + } public ResultUtil AlipayPayment(String code, BigDecimal request) { + // 二级商户商户号 + String smidUser; TCoursePackagePaymentMapper baseMapper1 = this.baseMapper; TCoursePackagePayment coursePackagePayment = baseMapper1.getCoursePackagePaymentByCode(code); // 判断这个课包属于哪个门店 属于哪个运营商 根据运营商 id 获取对应的商户号 @@ -1033,13 +1079,17 @@ TCoursePackage byId = coursePackageService.getById(coursePackageId); Store store = storeClient.queryStoreById(byId.getStoreId()); if (store.getOperatorId() == null ){ - // 说明是平台的门店 - payMoneyUtil.confirm(smid,code,tradeNo,request.toString()); + // 说明是平台的门店 无需冻结资金 不走分账 + payMoneyUtil.confirm1(smid,code,tradeNo,request.toString()); }else if (store.getOperatorId() == 0){ - payMoneyUtil.confirm(smid,code,tradeNo,request.toString()); + // 说明是平台的门店 + payMoneyUtil.confirm1(smid,code,tradeNo,request.toString()); + // 发起分账 + extracted(store, coursePackageOrder1, tradeNo); }else{ - String smid = storeClient.getSMIDByOperatorId(store.getOperatorId()); - payMoneyUtil.confirm(smid,code,tradeNo,request.toString()); + payMoneyUtil.confirm(storeClient.getSMIDByOperatorId(store.getOperatorId()),code,tradeNo,request.toString()); + // 发起分账 + extracted(store, coursePackageOrder1, tradeNo); } break; } @@ -1057,6 +1107,53 @@ return alipay; } + private void extracted(Store store, CoursePackageOrder coursePackageOrder1, String tradeNo) throws Exception { + // 分账 + AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", + "2021004105665036", + "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==", + "json", "GBK", + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB", + "RSA2"); + AlipayTradeOrderSettleRequest request = new AlipayTradeOrderSettleRequest(); + String randomCode = UUIDUtil.getRandomCode(16); + String proportionByOperatorId = storeClient.getProportionByOperatorId(store.getOperatorId()); + // 支付宝分账比例 + String s1 = proportionByOperatorId.split(",")[1]; + double i = Double.parseDouble(s1); + double v = i * 0.01; + BigDecimal bigDecimal1 = new BigDecimal(String.valueOf(v)); + BigDecimal cashPayment = coursePackageOrder1.getCashPayment(); + // 分账金额 + BigDecimal bigDecimal2 = cashPayment.multiply(bigDecimal1).setScale(2, RoundingMode.DOWN); + request.setBizContent("{" + + " \"out_request_no\":\"" + randomCode + "\"," + + " \"trade_no\":\"" + tradeNo + "\"," + + " \"royalty_parameters\":[" + + " {" + + " \"royalty_type\":\"transfer\"," + + " \"trans_out\":\"" + storeClient.getSMIDByOperatorId(store.getOperatorId()) + "\"," + + " \"trans_out_type\":\"userId\"," + + " \"trans_in_type\":\"userId\"," + + " \"trans_in\":\"" + smid + "\"," + + " \"amount\":" + bigDecimal2 + "," + + " \"desc\":\"平台服务费\"," + + " \"royalty_scene\":\"平台服务费\"," + + " }" + + " ]," + + " \"extend_params\":{" + + " \"royalty_finish\":\"true\"" + + " }," + + " \"royalty_mode\":\"async\"" + + "}"); + AlipayTradeOrderSettleResponse response = alipayClient.execute(request); + if (response.isSuccess()) { + System.out.println("调用成功"); + } else { + System.out.println("调用失败"); + } + } + public ResultUtil PlaypaiGoldPayment(AppUser appUser, String code, Integer wpGold) { TCoursePackagePayment packagePayment = this.baseMapper.selectOne(new QueryWrapper<TCoursePackagePayment>() .eq("code", code)); -- Gitblit v1.7.1