super_save_driving.sql
Diff too large user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java
@@ -22,10 +22,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; @@ -314,25 +311,16 @@ @ResponseBody @PostMapping("/base/appUser/rechargeBalanceCallback") // @ServiceLog(name = "余额充值回调", url = "/base/appUser/rechargeBalanceCallback") public void rechargeBalanceCallback(HttpServletRequest request, HttpServletResponse response){ public void rechargeBalanceCallback(@RequestBody InterfaceResponse interfaceResponse, HttpServletResponse response){ try { String code = request.getParameter("code"); String version = request.getParameter("version"); String msg = request.getParameter("msg"); String date = request.getParameter("date"); String result = request.getParameter("result"); String sign = request.getParameter("sign"); InterfaceResponse interfaceResponse = new InterfaceResponse(); interfaceResponse.setCode(code); interfaceResponse.setVersion(version); interfaceResponse.setMsg(msg); interfaceResponse.setDate(date); interfaceResponse.setResult(result); interfaceResponse.setSign(sign); // 验签 boolean verify = RSASignature.validate(interfaceResponse.content(), interfaceResponse.getSign()); if (verify) {//验签成功业务处理逻辑 JSONObject jsonObject = JSON.parseObject(result); if(!"0000".equals(interfaceResponse.getCode())){ System.err.println("充值回调异常:" + interfaceResponse.getMsg()); return; } JSONObject jsonObject = JSON.parseObject(interfaceResponse.getResult()); String merOrderId = jsonObject.getString("merOrderId"); String orderId = jsonObject.getString("parameter1"); appUserService.rechargeBalanceCallback(orderId, merOrderId); user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java
@@ -454,7 +454,7 @@ receive.setSplitList(splitList); TrhRequest<Receive> request1 = new TrhRequest(); InterfaceResponse execute = request1.execute(receive, Receive.SERVICE_CODE); if(!"0000".equals(execute.getResult())){ if(!"0000".equals(execute.getCode())){ System.err.println("确认收货" + execute.getMsg()); } JSONObject jsonObject = JSON.parseObject(execute.getResult()); user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/RechargeRecordMapper.xml
@@ -15,5 +15,6 @@ <result column="orderNumber" property="orderNumber" /> <result column="createTime" property="createTime" /> <result column="agentId" property="agentId" /> <result column="surplusDividedAmount" property="surplusDividedAmount"/> </resultMap> </mapper> user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/RechargeRecord.java
@@ -76,4 +76,9 @@ */ @TableField("agentId") private Integer agentId; /** * 剩余待分账金额 */ @TableField("surplusDividedAmount") private Double surplusDividedAmount; } user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java
@@ -16,6 +16,7 @@ import com.supersavedriving.user.modular.system.util.MallBook.model.InterfaceResponse; import com.supersavedriving.user.modular.system.util.MallBook.model.PaymentOrder; import com.supersavedriving.user.modular.system.util.MallBook.model.PaymentOrderGood; import com.supersavedriving.user.modular.system.util.MallBook.model.QueryOrder; import com.supersavedriving.user.modular.system.util.MallBook.util.TrhRequest; import com.supersavedriving.user.modular.system.util.PayMoneyUtil; import com.supersavedriving.user.modular.system.util.RedisUtil; @@ -322,7 +323,7 @@ PaymentOrder paymentOrder = new PaymentOrder(); paymentOrder.setBizOrderId(out_trade_no); paymentOrder.setAmount(String.valueOf(amount * 100)); paymentOrder.setOrderName("余额充值"); paymentOrder.setOrderName("账户充值"); paymentOrder.setPayType("WX_MINI"); paymentOrder.setTransferType("0"); paymentOrder.setAsynSplitFlag("1"); @@ -331,7 +332,7 @@ paymentOrder.setTerminalIp(InetAddress.getLocalHost().getHostAddress()); List<PaymentOrderGood> goodsDetail = new ArrayList<>(); PaymentOrderGood paymentOrderGood = new PaymentOrderGood(); paymentOrderGood.setGoodsName("余额充值"); paymentOrderGood.setGoodsName("账户充值"); goodsDetail.add(paymentOrderGood); paymentOrder.setGoodsDetail(goodsDetail); paymentOrder.setFrontUrl(""); @@ -340,7 +341,7 @@ TrhRequest<PaymentOrder> request = new TrhRequest(); InterfaceResponse execute = request.execute(paymentOrder, PaymentOrder.SERVICE_CODE); if(!"0000".equals(execute.getResult())){ if(!"0000".equals(execute.getCode())){ return ResultUtil.error(execute.getMsg()); } JSONObject jsonObject = JSON.parseObject(execute.getResult()); @@ -348,10 +349,72 @@ if("2".equals(status)){ return ResultUtil.error("失败"); } if("0".equals(status)){ return ResultUtil.error("处理中"); } String payCode = jsonObject.getString("payCode"); if(ToolUtil.isNotEmpty(payCode)){ 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; } QueryOrder queryOrder = new QueryOrder(); queryOrder.setOriginalMerOrderId(out_trade_no); queryOrder.setQueryType("1"); TrhRequest<QueryOrder> request = new TrhRequest(); InterfaceResponse execute1 = request.execute(queryOrder, QueryOrder.SERVICE_CODE); if("0000".equals(execute1.getCode())){ JSONObject jsonObject1 = JSON.parseObject(execute1.getResult()); String status1 = jsonObject1.getString("status"); if("0".equals(status1)){//待处理 Thread.sleep(wait); num++; } if("1".equals(status1)){//成功 String merOrderId = jsonObject1.getString("merOrderId"); AppUser appUser1 = AppUserServiceImpl.this.selectById(rechargeRecord1.getUserId()); AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); accountChangeDetail.setUserType(1); accountChangeDetail.setUserId(appUser1.getId()); accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3)); accountChangeDetail.setChangeType(3); accountChangeDetail.setType(1); accountChangeDetail.setCreateTime(new Date()); accountChangeDetail.setExplain("账户充值"); accountChangeDetail.setOldData(appUser1.getAccountBalance()); appUser1.setAccountBalance(appUser1.getAccountBalance() + rechargeRecord1.getAmount()); accountChangeDetail.setNewData(appUser1.getAccountBalance()); AppUserServiceImpl.this.updateById(appUser1); accountChangeDetailService.saveData(accountChangeDetail); rechargeRecord1.setPayTime(new Date()); rechargeRecord1.setPayStatus(2); rechargeRecord1.setOrderNumber(merOrderId); rechargeRecord1.setSurplusDividedAmount(rechargeRecord1.getAmount()); rechargeRecordService.updateById(rechargeRecord1); break; } if("2".equals(status1) || 10 == num){//失败 rechargeRecordService.deleteById(rechargeRecord1.getId()); break; } }else{ Thread.sleep(wait); num++; } } }catch (Exception e){ e.printStackTrace(); } } }).start(); } return ResultUtil.success(payCode); } @@ -387,6 +450,7 @@ rechargeRecord1.setPayTime(new Date()); rechargeRecord1.setPayStatus(2); rechargeRecord1.setOrderNumber(transaction_id); rechargeRecord1.setSurplusDividedAmount(rechargeRecord1.getAmount()); rechargeRecordService.updateById(rechargeRecord1); } user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -104,6 +104,9 @@ @Autowired private IDivisionRecordService divisionRecordService; @Value("${wx.appletsAppid}") private String appletsAppid; @Value("${callbackPath}") private String callbackPath;//支付回调网关地址 @@ -886,10 +889,6 @@ order.setPayMoney(payMoney); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String out_trade_no = sdf.format(new Date()) + order.getId(); // ResultUtil weixinpay = payMoneyUtil.weixinpay("代驾服务费", "", out_trade_no, payMoney.toString(), "/base/order/orderPayCallback", "JSAPI", appUser.getOpenid()); // this.updateById(order); PaymentOrder paymentOrder = new PaymentOrder(); paymentOrder.setBizOrderId(out_trade_no); @@ -898,7 +897,7 @@ paymentOrder.setPayType("WX_MINI"); paymentOrder.setTransferType("0"); paymentOrder.setAsynSplitFlag("1"); paymentOrder.setAppid(""); paymentOrder.setAppid(appletsAppid); paymentOrder.setOpenid(appUser.getOpenid()); paymentOrder.setTerminalIp(InetAddress.getLocalHost().getHostAddress()); List<PaymentOrderGood> goodsDetail = new ArrayList<>(); @@ -912,7 +911,7 @@ TrhRequest<PaymentOrder> request = new TrhRequest(); InterfaceResponse execute = request.execute(paymentOrder, PaymentOrder.SERVICE_CODE); if(!"0000".equals(execute.getResult())){ if(!"0000".equals(execute.getCode())){ return ResultUtil.error(execute.getMsg()); } JSONObject jsonObject = JSON.parseObject(execute.getResult()); @@ -925,6 +924,24 @@ } String payCode = jsonObject.getString("payCode"); this.updateById(order); new Thread(new Runnable() { @Override public void run() { QueryOrder queryOrder = new QueryOrder(); /** * 原请求订单号(必填) 字段长度最长:32位 */ queryOrder.setOriginalMerOrderId("202108310351001"); /** * 1:支付查询 2:退款查询 3:确认收货查询 4:结算查询 5:充值查询 6:转账查询 7:异步分账查询(必填) 字段长度最长:1位 */ queryOrder.setQueryType("1"); TrhRequest<QueryOrder> request = new TrhRequest(); request.execute(queryOrder, QueryOrder.SERVICE_CODE); } }).start(); return ResultUtil.success(payCode); } @@ -1055,7 +1072,7 @@ PaymentOrder paymentOrder = new PaymentOrder(); paymentOrder.setBizOrderId(out_trade_no); paymentOrder.setAmount(String.valueOf(payMoney * 100)); paymentOrder.setAmount(String.valueOf(Double.valueOf(payMoney * 100).intValue())); paymentOrder.setOrderName("代驾服务费"); paymentOrder.setPayType("WX_MINI"); paymentOrder.setTransferType("0"); @@ -1074,7 +1091,7 @@ TrhRequest<PaymentOrder> request = new TrhRequest(); InterfaceResponse execute = request.execute(paymentOrder, PaymentOrder.SERVICE_CODE); if(!"0000".equals(execute.getResult())){ if(!"0000".equals(execute.getCode())){ return ResultUtil.error(execute.getMsg()); } JSONObject jsonObject = JSON.parseObject(execute.getResult()); @@ -1256,7 +1273,7 @@ complete.setSplitList(splitList); TrhRequest<Complete> request = new TrhRequest(); InterfaceResponse execute = request.execute(complete, Complete.SERVICE_CODE); if(!"0000".equals(execute.getResult())){ if(!"0000".equals(execute.getCode())){ return ResultUtil.error(execute.getMsg()); } JSONObject jsonObject = JSON.parseObject(execute.getResult()); @@ -1315,7 +1332,7 @@ TrhRequest<Transfer> request1 = new TrhRequest(); InterfaceResponse execute1 = request1.execute(transfer, Transfer.SERVICE_CODE); if(!"0000".equals(execute1.getResult())){ if(!"0000".equals(execute1.getCode())){ return ResultUtil.error(execute1.getMsg()); } JSONObject jsonObject1 = JSON.parseObject(execute1.getResult()); user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/MallBook/config/ChannelConfig.java
@@ -39,7 +39,7 @@ static { YamlPropertiesFactoryBean yamlProFb = new YamlPropertiesFactoryBean(); yamlProFb.setResources(new ClassPathResource("application.yaml")); yamlProFb.setResources(new ClassPathResource("application.yml")); Properties properties = yamlProFb.getObject(); System.out.println("mallbook 参数配置初始化"); System.out.println("--------------------------------"); user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/MallBook/model/QueryOrder.java
New file @@ -0,0 +1,31 @@ package com.supersavedriving.user.modular.system.util.MallBook.model; public class QueryOrder { /**业务类型编号,必须和接口文档一致*/ public static String SERVICE_CODE = "queryOrder"; /** * 原请求订单号 */ private String originalMerOrderId; /** * 查询类型 */ private String queryType; public String getOriginalMerOrderId() { return originalMerOrderId; } public void setOriginalMerOrderId(String originalMerOrderId) { this.originalMerOrderId = originalMerOrderId; } public String getQueryType() { return queryType; } public void setQueryType(String queryType) { this.queryType = queryType; } } user/guns-admin/src/main/resources/application.yml
@@ -92,10 +92,10 @@ --- alipay: appid: 2021001161600393 #应用程序唯一标识 appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCEbTcG2wz+kaYDo2YxflpHE59MvKc3rbl6RlBgO6i5GzgphzeRTv5kRWUpSVkKCsbxFvAYLcgFPmm5nY2fz5hCTKiRcYfpUjH/OougUbzYU3ilUc9JqMbmvy7KN+Kv7+kQYCGLvMqlyYPiJ7LrmJLpE/FUcNLDwo6xUmwJSxaF7M4TbD3ZQZdddki1iJp9GihlqehZCMWOBeotEXvPKDEzSEkYlnvHPQaaspVgeesGmlHDuOiZUokENutxpjo7klWe97NA49hXEtI+xlczNGJKdBr0keBX/kSMsnx8kMxYDjh4QTySBaR6zlO4RYPFekWv9QZ2CrfiKCS7AHUpZYZ5AgMBAAECggEAXjCoUPIBHhhOcowIJe/vGlr0lUohzdJ8+GGGzcvhSDf6DF+mwG3lN0C8oU8QS7o6okRkZW46tLAd1u4fS6oGbDHGPBz6RJQ4B4eGxHMe1OcaCsxTmdq4DmuxRhfV3rnPldwqQA/6O01HxtXhxvzwkWOj5SGSZ7a8c5diTIHh9ULd6neUI/rIFC97mH1TeW0uDIxAtyvswz0pIfDhAR+lsOyTg/8qzsIXjpBFG4gAVxhUeUqQA5HzbsFglC08V7ViDk1OEoWi3yIj1CmNdtntJI4cxqLgTK7MNB9udhbN2I9YasuIpZvlAcvPi5R9cYT8vvFBCFGM+i22wtcsQmxdAQKBgQDaD9y6WNmsp+IaAUG3FqbJC8SqwreGIiEflWwVjrd+LuN6yhyr45CobOmhbTz0de8gRJEZKgJZEJcywL1ScrPIC4n1JaG688lk5aR+0Lik5fy1+L6G/CydJoJqlh6KKdwPJmDGpVu/geLJcLkWcYOwL56IL7GK2JI1p607R0x6iQKBgQCbd0n4xG9GkpvW4LDAJiMEhwPu9QcCKIT0mXVXCgMFdWel9bY3+8RSZoziWutaofm9tRHFAqwjbRyOZ+EdckkNsWVkkTnkKGtAhYKgM0GaOwdMFxmvME5WYJ74a5t1jiezDmR3obUBtS2nyQ8CFPUnlimoTR9F6APrth3h8uvwcQKBgFWaCn1AqdrEYNbyjViRVNHxg7fBDohiV3xtjOt9hfzL7VLjipPTlpL3hlNvbZFNxpx1LjyhqCBMif5LeUanbnnmRbbtmeqpDvNDzupVh1Z8TlMlHa4hymW6m1G6MqzsN83es/jnKvgnxd5sGMx9rUN5vhMaHekykVrswu1VVOl5AoGAMDljh7gfMEv/7TqLeT8bM6dR8AivoNrCy0Di5hnj8AiIGzHJ0TnWnxzSbNB5GwcNeew109/NV7vb1MyiRskRoh657eUiiQSEqGIBsAHWQqo2zEKKJA6e7ipQhYyTj3aGGAPJ5FYT2LDDtb0nW6T2ms34pA0wOzYKKU63nEQHLfECgYEAgbbpZJRtPxWB1M/Dg7loguT5O/VUsKefS0JrSD+tJIqYkumH5mejvYW5YEeDdelkvBhAEFUW9JOkzL+1w1g3wz2QQ2aPV/r55cJE3EfOzbwgw6GsO+8UuyiavbFhS3pFZNI0pR5M3u1+SIcLqQCnYLbO11vnEXglB6wjw9/oxPE= #开发者应用私钥 alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhG03BtsM/pGmA6NmMX5aRxOfTLynN625ekZQYDuouRs4KYc3kU7+ZEVlKUlZCgrG8RbwGC3IBT5puZ2Nn8+YQkyokXGH6VIx/zqLoFG82FN4pVHPSajG5r8uyjfir+/pEGAhi7zKpcmD4iey65iS6RPxVHDSw8KOsVJsCUsWhezOE2w92UGXXXZItYiafRooZanoWQjFjgXqLRF7zygxM0hJGJZ7xz0GmrKVYHnrBppRw7jomVKJBDbrcaY6O5JVnvezQOPYVxLSPsZXMzRiSnQa9JHgV/5EjLJ8fJDMWA44eEE8kgWkes5TuEWDxXpFr/UGdgq34igkuwB1KWWGeQIDAQAB #应用公钥 alipay_public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzmDrvcNvhexu3KkxVS9bemdSn6pyQUFmpyOGMDOirGR+RbmldpH2N9bPegzZynb5+bmRHii4ib31XeoXc7M7r6UsPhmPeLoSBNwpC+Uig0VxPa0hmvHjAl6StArhB3eMib6Zo40nM6eCYZLLZ1kKpI5Ad/APov9uLrbSnoeZsgeRibQix07arvTEsZq6pJavNlA+UBjp65o6Bv0+kfQ65pMTpbu+jRtTzkTj1hoW9PjwlWrY21F1FvN67zDWkTB2LjGFsqan0Qoe4/X8nK3VsDvkjIm/ZQsnQr8ZzfcuTzQPrcZpo3h9DPZoHeiToEfXtyk7E0bQHEmYVpmrvk/IJwIDAQAB #支付宝公钥 appid: 111 #应用程序唯一标识 appPrivateKey: 111 #开发者应用私钥 alipayPublicKey: 111 #应用公钥 alipay_public_key: 111 #支付宝公钥 --- @@ -136,16 +136,16 @@ # mallbook 调起接口参数配置 mallbook: # pay_url:mallbook接口地址 测试环境: http://ld.mallbook.cn:12000/api 生产环境:https://cloudpay.mallbook.cn/api pay_url: http://ld.mallbook.cn:12000/api # pay_url:mallbook接口地址 测试环境: https://uat.mallbook.cn/api 生产环境:https://cloudpay.mallbook.cn/api pay_url: https://uat.mallbook.cn/api # merchant_no 业务系统商户平台编号,需替换为mallbook工作人员提供的商户编号 merchant_no: 需要替换内容 merchant_no: HF2023041901 # version 接口版本号 version: 1.0.0 # channel_type 渠道类型 HF:汇付 channel_type: HF # merchant_private_key 商户平台私钥,需要替换成商户平台自己生成的私钥 merchant_private_key: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIoGARvX6k6rVwuUW6HjAPkzXVntCtDI8q/niGZbeILc5T/noer+UNDECSy9f8T6ENw7tEKWaHOFcicrqgRv+wXeo2hPiJI2iYsUNs6I8ckd8i4uy/PBEDMW78GlnQLAatk0NC44HKjn8cuIHaETKNG2Vk3rwGBzNgDZ/God1L6JAgMBAAECgYBhCsOwzehBk5pJ2+9pLO+8Rm72EQGvtflb0BBI1zst1x2gBr4DOPedMJe6yymQVrmP/rJItvONdV/DRqHtKMZ2Wa4ul/U1mDnAtS/FkpRYBA5FaXV2hNEW11xBLhL5iGk35P23Bzaa0MJw9Vsd0vjeykridIw/PweDyTdeRBwC2QJBANS+iOaKRuf6BRwCKDmBSHOiZmc/kKnpx2f5BD3h+LWEX3JsNxObMbW1SxQIf2/qwqzIoEm/WbWaOyuwtRZkXQ8CQQCmFjTm5l+Ws2LoQgM+5+eLmPyMyRFOu4G8yqsUkhKuANHK/qrsS1GTbv6SN341NijjNYl05e0h6Jq1T9UZmtrnAkEAwTfzmn7H+3RmI5QJ+IBkzzEWFHv05X0/8DyID7QmcKWzEncaZqIzObdYYu983qa2/LqSaahyz68uQnYRYi7xHQJATr3SgPIRuaH8r360iTtrRHzYp2qgYQJ25On1KECEyKgszp/kqzieSVbjLLFQjavKwMXeEGT+AwiDaJibwJLxWwJAXZApORsqGqdxc9FTxt5iiqG2ZP5DTXxc6E+ihmlmoVl9KncgTf9ez0Q0Qz/4KUTPTHNVgzt1nyBxiLtnyzFavA== merchant_private_key: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIDGadl1oxP7EJg+/o32vpAMa8cwFevD6xu3FjIh04TOuVTpC9hbAwiyX/9OKQi3nHEISyrtnF6Y49tkmb7X8nDwOahvsyOjgNYp+NtSLAdgPAbd6lv2DPC1lVYYu5IkMz7PRifntROFH6OvE5fpj6GinaFY3TYBjyDcC2VVbq/LAgMBAAECgYATdmlvDWF9Vpe2eubcK+u3N7leXH0jqfOxt6UqJISkcN3/4E0DARZfTR5HJtf60k1ZpAhAT7MvdOoTMYwvFNI2WEFRwND5wBl+OdEN/lyWeISjjg1EnnTLj/azGLgE8Z2q/FodGikqrGrc2tSNIy75afeW2gUTF3DHiwcG76SYeQJBAPOyIzpT3yMfM7iVhjaPfmyxvDXq0cLwiAF0eUbrebPO0EevI+PKYhmN2oRMis6wSJbv+sbkElOXQzDefjw0ieUCQQCHRuFlX9JQYUOoyyirKxpu30uys+ygZqmo4PiKgIaaJJPm2p2o7vzZJANGmkmdwFf2LLzij70InKGvqGTEnvfvAkEAnJOMRuG0sOBPXv3TaiLwW+4mu43QkKvy9txbP9H0NC9ha22AZc+XEEwwZmi3lu109mXifv/zNnot1axe91facQJALExcwQqo32OKeXrVvX+m70m2CzX6NeiIhGHvYcOG0HFL8ZwDZu+j4yN04yjhFISJCXdK/1Icj/ZiyBf3r59zBwJACl7Sya9BcqRo5XJ/A7+T2E3VQT2nIopy0hPRLKWFaOzrCIsn3gcC58KSACXl2QMiG5kp1192QOC26b3o57ZecA== # mall_book_public_key mallbook测试环境公钥 不需要替换 mall_book_public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD0L2DaHOO8ekhktB6RoHxIcki/0v7OUeOn9tX9VBE+jv6PRjqlZRWL3Qezxz5ADtHEyLv+RFFaceXSep6rWyoQ6DRlvLv5CySUAxAM42LLVe4DI3l/0ccEAIuU5NCpwAAj1zkm2X01DwUCZwymLjlqbDlBvQhpq+1fddtTtA/QLQIDAQAB # mall_book_public_key mallbook生产环境公钥 不需要替换