ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuctionFallbackFactory.java
@@ -4,6 +4,7 @@ import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.AuctionGoods; import com.ruoyi.system.api.domain.AuctionSalesroom; import com.ruoyi.system.api.domain.OrderAuctionBond; import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; import com.ruoyi.system.api.domain.dto.BondDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO; @@ -52,6 +53,11 @@ } @Override public R<OrderAuctionBond> getBond(BondDTO BondVO, String source) { return R.fail("获取保证金支付状态失败" + cause.getMessage()); } @Override public R<List<AuctionSalesroom>> getAuctionSalesroomByIds( Collection<Long> auctionSalesroomGoodsIdSet, String source) { return R.fail("获取拍卖场列表失败" + cause.getMessage()); ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuctionClient.java
@@ -6,6 +6,7 @@ import com.ruoyi.system.api.domain.AppMiniLoginVO; import com.ruoyi.system.api.domain.AuctionGoods; import com.ruoyi.system.api.domain.AuctionSalesroom; import com.ruoyi.system.api.domain.OrderAuctionBond; import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; import com.ruoyi.system.api.domain.dto.BondDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO; @@ -43,6 +44,9 @@ @PostMapping("/order-auction-bond/UpdateBond") R<?> UpdateBond(@RequestBody BondDTO BondVO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @PostMapping("/order-auction-bond/getBond") R<OrderAuctionBond> getBond(@RequestBody BondDTO BondVO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @PostMapping("/auction-salesroom/list-by-ids") R<List<AuctionSalesroom>> getAuctionSalesroomByIds( @RequestBody Collection<Long> auctionSalesroomGoodsIdSet, ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/config/AppConfig.java
@@ -28,8 +28,8 @@ @Bean public WxMaConfig memberWxMaConfig(){ WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); config.setAppid("wxe91f1af7638aa5dd"); config.setSecret("a787e1a462715604e0c9528b6d8960d1"); config.setAppid("wx69e3ac6e13a889b7"); config.setSecret("1b8bcfcb681524ac553e72054e5271ef"); return config; } } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java
@@ -239,9 +239,11 @@ currentAuctionSalesroomGoods.setGoodsSkustatus(auctionSalesroomGoodss.getStatus()); currentAuctionSalesroomGoods.setListingDuration(auctionSalesroomGoodss.getListingDuration()); auctionSalesroomVO.setCurrentAuctionSalesroomGoods(currentAuctionSalesroomGoods); } wrappers.eq(AuctionSalesroomGoods::getSortNum, auctionSalesroomGoodss.getSortNum()); list.add(auctionSalesroomGoodss.getSortNum()); } } wrapper1.last("limit 1"); AuctionSalesroomGoods auctionSalesroomGoods1 = this.getOne(wrapper1); @@ -258,7 +260,6 @@ auctionSalesroomVO.setNextAuctionSalesroomGoods(nextAuctionSalesroomGoods); } LambdaQueryWrapper<AuctionSalesroomGoods> wrapper2=Wrappers.lambdaQuery(); wrapper2.notIn(AuctionSalesroomGoods::getSortNum,list); wrapper2.notIn(AuctionSalesroomGoods::getSortNum,list); wrapper2.eq(AuctionSalesroomGoods::getDelFlag,0); wrapper2.eq(AuctionSalesroomGoods::getAuctionSalesroomId,ationSalesroomGoodsDTO.getAuctionSalesroomId()); ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -103,6 +103,8 @@ import java.util.function.Function; import java.util.stream.Collectors; import javax.annotation.Resource; import lombok.Data; import org.apache.http.HttpResponse; import org.apache.http.client.config.RequestConfig; import org.apache.http.util.EntityUtils; @@ -205,6 +207,7 @@ private static final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlW2RMACojdqTa8H+j6411Lm5UipGXXbQiswq50rUflwjTj843zNVaVpk8uJmbdmtUBJlmblgBS/a31O4L4LrHB8WxJ+w0f9DBNTq9T6b80MiAVnU/3gXK365DmbzPWS5pR9wEgJVHnfOFUbsB5AVFHV0m9hUZcPv7xveuEp3BEoD5smaDJByR+KgFw0Q0JgINhhE6bsEa3UgJ198af269LtQ5HJl1TWLI8aeqW14HrxyADIt49NB9KZ8MOdKP+66HWcrXlipKFHtccy3dff72DqPmFdESoXfLXKZyhU5w9v4Q5F6UoAGTPwl9KQwikTobNeJ/7su7X3AB6+C14J4sQIDAQAB"; private static final ObjectMapper objectMapper = new ObjectMapper(); @Override public List<AuctionSalesroom> getAuctionBidRecordList(AuctionSalesroomDTO ationSalesroomGoodsDTO) { @@ -348,7 +351,7 @@ R<SysUser> sysUserR = sysUserClient.queryUserByPhone(appMiniLoginDto.getPhone()); SysUser data = sysUserR.getData(); appMiniLoginVo.setSysUser(data); appMiniLoginVo.setPhone(appMiniLoginDto.getAuth_code()); appMiniLoginVo.setPhone(appMiniLoginDto.getPhone()); return appMiniLoginVo; } @@ -629,6 +632,36 @@ } LambdaQueryWrapper<AuctionBidRecord> wrapper2=Wrappers.lambdaQuery(); wrapper2.eq(AuctionBidRecord::getAuctionSalesroomId,bidVO.getAuctionSalesroomId()); wrapper2.eq(AuctionBidRecord::getTargetId,bidVO.getTargetId()); wrapper2.eq(AuctionBidRecord::getDelFlag,0); wrapper2.orderByDesc(AuctionBidRecord::getLastBidAmount); AuctionBidRecord one2 = auctionBidRecordService.getOne(wrapper1); Map<String, Object> map = new ConcurrentHashMap<>(); map.put("notification_type", NotificationTypeConstant.AUCTION_SALESROOM); map.put("auctionSalesroomId", bidVO.getAuctionSalesroomId()); map.put("byId", byId.getStatus()); map.put("lastBidAmount",one2.getLastBidAmount()); map.put("message_type", "start"); String msg = null; try { msg = objectMapper.writeValueAsString(map); } catch (JsonProcessingException e) { } String finalMsg = msg; Thread socketSender=new Thread(()->{ try { Thread.sleep(1000);//先休眠1秒 WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), finalMsg); } catch (Exception e) { e.printStackTrace(); } }); }else { AuctionGoods byId = auctionGoodsService.getById(bidVO.getTargetId()); if (byId.getStartingPrice().doubleValue()>bidVO.getLastBidAmount().doubleValue()){ @@ -652,6 +685,8 @@ one.setLastBidTime(LocalDateTime.now()); one.setBidCount(one.getBidCount()+1); auctionBidRecordService.updateById(one); }else{ one=new AuctionBidRecord(); one.setAuctionSalesroomId(bidVO.getAuctionSalesroomId()); @@ -664,6 +699,34 @@ one.setLastBidAmount(bidVO.getLastBidAmount()); auctionBidRecordService.save(one); } LambdaQueryWrapper<AuctionBidRecord> wrapper2=Wrappers.lambdaQuery(); wrapper2.eq(AuctionBidRecord::getAuctionSalesroomId,bidVO.getAuctionSalesroomId()); wrapper2.eq(AuctionBidRecord::getTargetId,bidVO.getTargetId()); wrapper2.eq(AuctionBidRecord::getDelFlag,0); wrapper2.orderByDesc(AuctionBidRecord::getLastBidAmount); AuctionBidRecord one2 = auctionBidRecordService.getOne(wrapper1); Map<String, Object> map = new ConcurrentHashMap<>(); map.put("notification_type", NotificationTypeConstant.AUCTION_SALESROOM); map.put("auctionSalesroomId", bidVO.getAuctionSalesroomId()); map.put("byId", byId.getStartStatus()); map.put("lastBidAmount",one2.getLastBidAmount()); map.put("message_type", "start"); String msg = null; try { msg = objectMapper.writeValueAsString(map); } catch (JsonProcessingException e) { } String finalMsg = msg; Thread socketSender=new Thread(()->{ try { Thread.sleep(1000);//先休眠1秒 WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), finalMsg); } catch (Exception e) { e.printStackTrace(); } }); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/config/AppConfig.java
@@ -27,8 +27,8 @@ @Bean public WxMaConfig memberWxMaConfig(){ WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); config.setAppid("wxe91f1af7638aa5dd"); config.setSecret("a787e1a462715604e0c9528b6d8960d1"); config.setAppid("wx69e3ac6e13a889b7"); config.setSecret("1b8bcfcb681524ac553e72054e5271ef"); return config; } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java
@@ -89,9 +89,9 @@ //微信 private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token"; private static final String WX_APPID = "wxe91f1af7638aa5dd"; private static final String WX_APPID = "wx69e3ac6e13a889b7"; private static final String WX_SECRET = "a787e1a462715604e0c9528b6d8960d1"; private static final String WX_SECRET = "1b8bcfcb681524ac553e72054e5271ef"; //支付寶 /** ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/LogisticsServiceImpl.java
@@ -1,6 +1,7 @@ package com.ruoyi.order.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.nacos.shaded.com.google.gson.Gson; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -18,6 +19,7 @@ import com.ruoyi.system.api.domain.Logistics; import com.ruoyi.system.api.domain.dto.LogisticsDTO; import com.ruoyi.system.api.domain.vo.Express100VO; import net.sf.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -29,10 +31,13 @@ import javax.annotation.Resource; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -49,6 +54,8 @@ ILogisticsService { private String key="BltjQodT7186"; private String kye1="GMtjjhxp9pdEpfz37M"; private String customer="56DE8E9E3D58CE73C60755C8B7483043"; private static final String AUTONUMBER_AUTO_URL = "http://www.kuaidi100.com/autonumber/auto?num=NUM&key=KEY"; @@ -89,37 +96,65 @@ @Override public Boolean isLogisticsOne(LogisticsDTO logisticsDTO) { List<KuaiDiCode> m=findKuaiDiCode(logisticsDTO.getPostid()); Boolean b=false; if (m.size()>0){ for (KuaiDiCode k:m){ if (k.getComCode().equals(logisticsDTO.getCompany())){ b=true; } } } Map<String,String> params=new HashMap(); params.put("secret_key", "GMtjjhxp9pdEpfz37M"); params.put("secret_code", "53514ac63f0447d188423221550b0c3e"); params.put("secret_sign", "8265A3C04DDA73E5B899F7F750099BB0"); params.put("num", logisticsDTO.getPostid()); String string=post(params); if (string.equals("[]")){ return b; }else{ return b=true; } public List<KuaiDiCode> findKuaiDiCode(String orderId) { String url = AUTONUMBER_AUTO_URL.replace("NUM", orderId).replace("KEY", key); // 发送快递参数处理 MultiValueMap<String, Object> sendBody = new LinkedMultiValueMap<>(); sendBody.add("num", orderId); sendBody.add("key", key); //设置请求头参数 HttpHeaders headers = new HttpHeaders(); headers.add("Content-type", "application/x-www-form-urlencoded"); HttpEntity<MultiValueMap<String, Object>> formEntity = new HttpEntity<>(sendBody, headers); ResponseEntity<String> result = restTemplate.postForEntity(url, formEntity, String.class); List<KuaiDiCode> kuaiDiCode = new ArrayList<>(); if (result.getBody() != null && result.getBody().length() > 0) { ArrayList body = JSON.parseObject(result.getBody(), ArrayList.class); body.forEach(i -> kuaiDiCode.add(JSON.parseObject(JSON.toJSONString(i), KuaiDiCode.class))); } return kuaiDiCode; } public String post(Map<String,String> params){ StringBuilder response=new StringBuilder(""); BufferedReader reader = null; try { StringBuilder builder =new StringBuilder(); for(Map.Entry param:params.entrySet()){ if(builder.length()>0){ builder.append('&'); } builder.append(URLEncoder.encode(param.getKey().toString(),"UTF-8")); builder.append('='); builder.append(URLEncoder.encode(String.valueOf(param.getValue()),"UTF-8")); } byte[]bytes=builder.toString().getBytes("UTF-8"); URL url=new URL("http://cloud.kuaidi100.com/api"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.setReadTimeout(5000); conn.setRequestMethod("POST"); conn.setRequestProperty("accept","*/*"); conn.setRequestProperty("connection","Keep-Alive"); conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length",String.valueOf(bytes.length)); conn.setDoOutput(true); conn.getOutputStream().write(bytes); reader=new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8")); String line = ""; while ((line =reader.readLine())!=null){ response.append(line); } }catch(Exception e){ e.printStackTrace(); }finally{ try{ if (null!=reader){ reader.close(); } }catch(IOException e){ e.printStackTrace(); } } return response.toString(); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java
@@ -149,15 +149,14 @@ } else { orderAuctionBond.setPaymentMethod(PaymentMethodEnum.ALIPAY); } this.save(orderAuctionBond); payInfoVO.setOrderNO(orderAuctionBond.getOrderNo()); if (memberAuctionSalesroomBondDTO.getPaymentMethod() == 1) { payInfoVO.setType(2); } else { payInfoVO.setType(1); } payInfoVO.setOrderNO(orderAuctionBond.getOrderNo()); payInfoVO.setSubject("保证金"); payInfoVO.setMemberId(memberAuctionSalesroomBondDTO.getMemberId()); payInfoVO.setBody("保证金"); @@ -199,6 +198,7 @@ } else { payInfoVO.setType(1); } payInfoVO.setOrderNO(orderAuctionBond.getOrderNo()); payInfoVO.setSubject("保证金"); payInfoVO.setMemberId(memberAuctionSalesroomBondDTO.getMemberId()); payInfoVO.setBody("保证金"); ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/PaylogServiceImpl.java
@@ -14,12 +14,15 @@ import com.jpay.weixin.api.WxPayApi; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.enums.BondStatusEnum; import com.ruoyi.common.core.enums.OrderStatusEnum; import com.ruoyi.common.core.enums.PointStatusEnum; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.order.domain.Paylog; import com.ruoyi.order.mapper.OrderAuctionBondMapper; import com.ruoyi.order.mapper.OrderMapper; import com.ruoyi.order.mapper.PaylogMapper; import com.ruoyi.order.service.IOrderAuctionBondService; import com.ruoyi.order.service.IPaylogService; import com.ruoyi.order.util.MD5AndKL; import com.ruoyi.order.util.SinataUtil; @@ -31,6 +34,7 @@ import com.ruoyi.order.util.tencent.protocol.AppPayReqData; import com.ruoyi.order.util.tencent.protocol.UnifiedorderReqData; import com.ruoyi.system.api.domain.Order; import com.ruoyi.system.api.domain.OrderAuctionBond; import com.ruoyi.system.api.domain.dto.BondDTO; import com.ruoyi.system.api.domain.dto.MemberPointsDTO; import com.ruoyi.system.api.domain.dto.RefundDTO; @@ -50,6 +54,8 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ruoyi.system.api.feignClient.OrderClient; import org.springframework.stereotype.Service; import org.springframework.util.Assert; @@ -71,8 +77,12 @@ @Resource private AuctionClient auctionClient; @Resource private MemberClient memberClient; @Resource private OrderAuctionBondMapper orderAuctionBondMapper; @Override public R<Map<String, Object>> getPayInfo(Integer uid, Integer type, String orderNO,String openId, HttpServletRequest request) { @@ -81,6 +91,22 @@ String body; try { if(judgeContainsStr(orderNO)){ if (orderNO.contains("BO")) { LambdaQueryWrapper<OrderAuctionBond> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(OrderAuctionBond::getOrderNo,orderNO); wrapper1.eq(OrderAuctionBond::getDelFlag,0); OrderAuctionBond one = orderAuctionBondMapper.selectOne(wrapper1); price=one.getBond().doubleValue(); body = " 订单支付"; subject = " 订单支付"; if (type == 1) { // 支付宝预下单 return this.alipay(orderNO, subject, body, price, request); } else { // 微信预下单 return this.wxpay(2, orderNO, body,openId, price, request); } }else{ LambdaQueryWrapper<Order> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(Order::getOrderNo,orderNO); wrapper1.eq(Order::getDelFlag,0); @@ -96,6 +122,8 @@ // 微信预下单 return this.wxpay(2, orderNO, body,openId, price, request); } } } } catch (Exception e) { e.printStackTrace(); @@ -147,10 +175,15 @@ Paylog one = this.getOne(wrapper); if(SinataUtil.isEmpty(one)) { this.save(paylog1); BondDTO bondVO=new BondDTO(); bondVO.setOrderNO(paylog1.getOutTradeNo()); auctionClient.UpdateBond(bondVO, SecurityConstants.INNER); if (paylog1.getOutTradeNo().contains("BO")) { LambdaQueryWrapper<OrderAuctionBond> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(OrderAuctionBond::getOrderNo,paylog1.getOutTradeNo()); wrapper1.eq(OrderAuctionBond::getDelFlag,0); OrderAuctionBond one1 = orderAuctionBondMapper.selectOne(wrapper1); one1.setBoundStatus(BondStatusEnum.PAID); }else{ LambdaQueryWrapper<Order> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(Order::getOrderNo,paylog1.getOutTradeNo()); wrapper1.eq(Order::getDelFlag,0); @@ -171,7 +204,7 @@ MembeOneDTO.setMoney(page1.getTotalAmount()); MembeOneDTO.setTotalPoints(page1.getPoints()); memberClient.updMembeOne(MembeOneDTO); } } @@ -261,11 +294,14 @@ System.out.println("支付完成时间" + time_end); paylog.setAddTime(LocalDateTime.now()); this.save(paylog); BondDTO bondVO=new BondDTO(); if (paylog.getOutTradeNo().contains("BO")) { LambdaQueryWrapper<OrderAuctionBond> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(OrderAuctionBond::getOrderNo,paylog.getOutTradeNo()); wrapper1.eq(OrderAuctionBond::getDelFlag,0); OrderAuctionBond one1 = orderAuctionBondMapper.selectOne(wrapper1); one1.setBoundStatus(BondStatusEnum.PAID); bondVO.setOrderNO(paylog.getOutTradeNo()); auctionClient.UpdateBond(bondVO, SecurityConstants.INNER); }else{ LambdaQueryWrapper<Order> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(Order::getOrderNo,paylog.getOutTradeNo()); wrapper1.eq(Order::getDelFlag,0); @@ -280,13 +316,13 @@ memberPointsDTO.setPointsStatus(PointStatusEnum.INCREASE); memberPointsDTO.setPoints(page1.getPoints()); memberClient.addMemberPoints(memberPointsDTO); updMembeOneDTO MembeOneDTO=new updMembeOneDTO(); MembeOneDTO.setType(1); MembeOneDTO.setMemberId(page1.getMemberId()); MembeOneDTO.setMoney(page1.getTotalAmount()); MembeOneDTO.setTotalPoints(page1.getPoints()); memberClient.updMembeOne(MembeOneDTO); } log.debug("WxpayController.notify__回调处理成功:SUCCESS"); response.getOutputStream().print("success"); @@ -391,7 +427,7 @@ Map<String, Object> map1 = new HashMap<String, Object>(); Map<String, Object> appPayMap = new HashMap<String, Object>(); try { // 构建接口请求参数 /* // 构建接口请求参数 UnifiedorderReqData unifiedorderReqData = new UnifiedorderReqData(outTradeNo, body, price, Configure.wx_notify_url, "JSAPI", openId); // 请求接口获取返回接口 @@ -404,7 +440,7 @@ // 捕获预支付接口错误提示 if ("FAIL".equals(map1.get("result_code")) || "FAIL".equals(map1.get("return_code"))) { return R.fail(String.valueOf(map1.get("return_msg"))); } }*/ /* // 对获取预支付返回接口参数进行封装(生成支付订单接口数据) AppPayReqData appPay = new AppPayReqData(apptype, (String) map.get("appid"), (String) map.get("mch_id"), @@ -416,27 +452,30 @@ // 创建hashmap(用户获得签名) SortedMap<String, String> paraMap = new TreeMap<>(); //设置请求参数(小程序ID) paraMap.put("appid", unifiedorderReqData.getAppid()); paraMap.put("appid", Configure.getAppid()); //设置请求参数(商户号) paraMap.put("mch_id", unifiedorderReqData.getMch_id()); paraMap.put("mch_id", Configure.getMchid()); //设置请求参数(随机字符串) paraMap.put("nonce_str", nonceStr); //设置请求参数(商品描述) paraMap.put("body", unifiedorderReqData.getBody()); paraMap.put("body", body); //设置请求参数(商户订单号) paraMap.put("out_trade_no", unifiedorderReqData.getOut_trade_no()); paraMap.put("out_trade_no", outTradeNo); //设置请求参数(总金额) paraMap.put("total_fee", unifiedorderReqData.getTotal_fee().toString()); String money=SinataUtil.doubleRetainTwo(price*100d); Integer price1 = Integer.parseInt(money.substring(0,money.length()-3)); paraMap.put("total_fee", price1.toString()); //设置请求参数(通知地址) paraMap.put("notify_url", unifiedorderReqData.getNotify_url()); paraMap.put("notify_url", Configure.wx_notify_url); //设置请求参数(交易类型) paraMap.put("trade_type", String.valueOf(WxPayApi.TradeType.JSAPI)); paraMap.put("openid", unifiedorderReqData.getOpenid()); paraMap.put("openid",openId); //设置请求参数(openid)(在接口文档中 该参数 是否必填项 但是一定要注意 如果交易类型设置成'JSAPI'则必须传入openid) //MD5运算生成签名,这里是第一次签名,用于调用统一下单接口 String sign = PaymentKit.createSign(paraMap, "E10ADC3949BA59ABBE56E057F20F883E"); String sign = PaymentKit.createSign(paraMap, "HSCEWrfSYiwxR6sesZ6De91Xh3m447sh"); paraMap.put("sign", sign); //统一下单,向微信api发送数据 //转成xml @@ -448,7 +487,6 @@ //返回给小程序端需要的参数 Map<String, Object> returnMap = new HashMap<>(20); String prepay_id = map.get("prepay_id"); //重新进行签名后返回给前端 returnMap.put("appId", map.get("appid")); @@ -456,7 +494,7 @@ returnMap.put("package", "prepay_id=" + prepay_id); returnMap.put("timeStamp", new Date().getTime() + ""); returnMap.put("signType", "MD5"); String signature = weixinSignature(returnMap, "E10ADC3949BA59ABBE56E057F20F883E"); String signature = weixinSignature(returnMap, "HSCEWrfSYiwxR6sesZ6De91Xh3m447sh"); returnMap.put("prepay_id", prepay_id); returnMap.put("mch_id", map.get("mch_id")); ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/tencent/common/cert/apiclient_cert.p12Binary files differ
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/tencent/common/cert/apiclient_cert.pem
@@ -1,26 +1,25 @@ -----BEGIN CERTIFICATE----- MIIEbzCCA9igAwIBAgIEAapJajANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC Q04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNV BAoTB1RlbmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEf MB0GCSqGSIb3DQEJARYQbW1wYXltY2hAdGVuY2VudDAeFw0xODAyMDIxMTA3NDRa Fw0yODAxMzExMTA3NDRaMIGeMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdk b25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UEChMHVGVuY2VudDEOMAwGA1UE CxMFTU1QYXkxMzAxBgNVBAMUKuaIkOmDvemprOWPr+aXtuWwmue9kee7nOenkeaK gOaciemZkOWFrOWPuDERMA8GA1UEBBMIOTM1NTUzMzUwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQDF+apUVzPxdAF2FA8r2kg6aPeLynMRsUE17eW+wPZS q8mVMrwACzYePbL5003/snEsEU936qnEiu8t5J6w+74dc3mQMr88FW29jD9MQOYR yOeWz+LVKFXqA7sm9Aj+7hFrcjxdjl2FvKoITTSXNbtM71FrhsGXsnW/1Zjl3sSy cu2qBq40QNqpefzz2gJ+vbtROy+ZynK7QaSwOtiFZuIbPgYv6W18wmigss6JuVkM MZUquK4yDIPhwJ4Dk4lLXak1qqNfplfVKQtOo+MHdfIHnG9Z9q+R4iEvAGF4oxaR zeKFk+zir8E8xEngmnH0ESue7fn9qh6q0mO7xTaYaG0HAgMBAAGjggFGMIIBQjAJ BgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRp ZmljYXRlIjAdBgNVHQ4EFgQUYkOGN8XaKFwFtBCoEBKwGCnBbtYwgb8GA1UdIwSB tzCBtIAUPgUm9iJitBVbiM1kfrDUYqflhnShgZCkgY0wgYoxCzAJBgNVBAYTAkNO MRIwEAYDVQQIEwlHdWFuZ2RvbmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQK EwdUZW5jZW50MQwwCgYDVQQLEwNXWEcxEzARBgNVBAMTCk1tcGF5bWNoQ0ExHzAd BgkqhkiG9w0BCQEWEG1tcGF5bWNoQHRlbmNlbnSCCQC7VJcrvADoVzAOBgNVHQ8B Af8EBAMCBsAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQAD gYEARXIWwdW50A3JM8BIC94argtpvZXqTj5hWeheeJSDBxNVFv/WzdahqZx7Yokn DP/Ac6dekFfvvXR6ujwevEUTFbpSac1h7k7u/URmwH/R2URTevPTrMeg5D+gLeYP nEJ+GhyRRAFOoGbN1SoK4f1j6pExpl2GaQ0PVNv7NRVW1tI= MIIENDCCAxygAwIBAgIUGVH+OUAuVOxChlw+8HWJAdKov00wDQYJKoZIhvcNAQEL BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg Q0EwHhcNMjQwNjIwMDIxODAwWhcNMjkwNjE5MDIxODAwWjCBjTETMBEGA1UEAwwK MTIyMDU0MDAwMTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTkwNwYDVQQL DDDlm5vlt53kuK3lm73nmb3phZLkuqflk4HkuqTmmJPkuK3lv4PmnInpmZDlhazl j7gxCzAJBgNVBAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBALTOOuM7h0rT5KwRRWc2nerxGCWZNz3UT7gRZEW/ IHCVULYU1MtqRSvrVen0PVhDT8Bkt5tQdrv7RLRm2w8mhM/DIPi+EaTaGQmt911G Va02fcRRHUWT4skNN1NiNIZIz3XGTCSGIFrYREAZ0PLewE7dwmfsPC64wXRWRnv0 G+1bdRNYeI5n4BdVbCaDWCJ8YiYNR8rusa1CazFGwp1y5XEBidsO+C0QvsNqv0RS OgnO/izbqubnqyaTdsYT5o+W8cePD14Vml8nLJvPruoV8Mw3MJei+Xj5L4Qm3mNU tqORU7Ghk7l0nrGhgH+xxqeZuQ3rmi+1DYW5rWeCmBvL+b8CAwEAAaOBuTCBtjAJ BgNVHRMEAjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGE aHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0 MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFC NjU0MjJFMTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEB CwUAA4IBAQCcL4hdeAsHMbE5A9AXgNL+LjFJwtCUEdR/fnalqOh8TtHkySfrntTs SvSka+OBWlaSe/6TOBUJy4gY1V2ESHb0JMhbFim5OXPBqXUDshJwDFF3hlpCLrmQ Y8ABrEik3nmx+y4DPmDj+38FTHJUIzzlChR5QWKilBgU2yqJBYrwK8pwoELUMiAv 58pUIBxpiaFqW146vKUDhV+xKI0mHMeGlA5UNkCG/JQLHAdrUXyi8RT3Yl/kvHqW EK/pUiThB/WFCLMGKvF4ahoHZFWuCm/BhCHDpdSh661Ivf9RqsvnPffBUjJ+ZIIk metUnaCMi8qNzcV7ohlfeXfjikzEVf+O -----END CERTIFICATE----- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/tencent/common/cert/apiclient_key.pem
@@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDF+apUVzPxdAF2 FA8r2kg6aPeLynMRsUE17eW+wPZSq8mVMrwACzYePbL5003/snEsEU936qnEiu8t 5J6w+74dc3mQMr88FW29jD9MQOYRyOeWz+LVKFXqA7sm9Aj+7hFrcjxdjl2FvKoI TTSXNbtM71FrhsGXsnW/1Zjl3sSycu2qBq40QNqpefzz2gJ+vbtROy+ZynK7QaSw OtiFZuIbPgYv6W18wmigss6JuVkMMZUquK4yDIPhwJ4Dk4lLXak1qqNfplfVKQtO o+MHdfIHnG9Z9q+R4iEvAGF4oxaRzeKFk+zir8E8xEngmnH0ESue7fn9qh6q0mO7 xTaYaG0HAgMBAAECggEBAL1yjrYqxIAX3JYb1/DE7z1F2S0iTD7v+lEbGDEUAiNW VI67gAAiumTx8eTzeb5oCbh70CoWmuKDeSHXlqwSGvmf2QJOLYXXk65BGQllSURX lpZQ1OXZtW08qMk72afqNS02oeF9LK2fvq43A053koaqtKVKzNLXaaprQecm599C P+BdahdKk6SE39cOB9fMfX1s5BZRJUhIKNBmcEBsgo9xtKTvgvbgBkSvFBd2ycMo 5KRUbquytqIfwDJTETn7FZqh86+BgLOsWEQZ+1ByEJkFNdOGfjz0HVxNMY60j42D u9fsIMFup+a/oP190atMSt+GE6ZjgQit/LsF7BrPaiECgYEA7uUDZIpQ1j07MZP+ CFMGIE8aTlhvbWho67HCCLDAAv2ZdOSusV66iMzEfDkfOcj9fp8OlfbK2ocUCkS5 5hQAuAk4O8KTmbGgf71gyFZzddZkilc1UAgHVMj9wVp2PfLmpb6iFhazd4enwTPs TKxogxfXWRQKQqkCnunOSS7m7V8CgYEA1CaXqMWm2v52FHN8dl8AnH6YjwOQpNXI qNOyA8Af03dEQ5w/sNlusiF73/FIgErb0be4rgIvJOW0ziBU9RKn/vB5wl4IpJjM JuL3hh7RlAbfSWaqaKCZKIDolS2vtvwKp9mZgmxWgvKx3Q/L8I1MXPIZTTRpGwIe HyBxYBTSeVkCgYEAuRHbzgDFXSN0fxUKYMKI5XDCjV0/fX+8gJNmITtklSyHvKII n8omMiKIOUA7a5XEpFpuf0kAn8izgrz5Uz+9ytUBpnI3zIJqN2ur1af7rJdZrj6f Q4/ktg87XpZJMfbCLjb/9KLDh98k26zw6/lIwf4vS4gV5sxuBlRVBib6qXsCgYA9 2f6PWwi5gkSk08KutCX2ekY6M9zg4d89sXKN+16MBZKmb5B2G/5U+sQl1y+/D5Ql AX5bZRGfnUTob661QLov7qZhD49PhajHkZZ+yM9ra9F/keoO1PuyPlsQ2yAGplbo 9tz1lGZoiR9oBun7eQaRdpf/1U7ra+OiSZAkZg2zCQKBgQCl+bszQ202CkLchQ1R Mu2svFFi+BeVvtA8yp4Il3bznxkgBZJ1/4gB+u84f9ybfpKHok7+f+iHVGJSNiay Uw5ouE6oNEJODsvWDDliCjrckGUBDmJ8XOHEkm3MPOmEov8UJ6twev/QWhEfEUZk fclCYjgt3YJ3XW9hXgORWhJj9g== MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0zjrjO4dK0+Ss EUVnNp3q8RglmTc91E+4EWRFvyBwlVC2FNTLakUr61Xp9D1YQ0/AZLebUHa7+0S0 ZtsPJoTPwyD4vhGk2hkJrfddRlWtNn3EUR1Fk+LJDTdTYjSGSM91xkwkhiBa2ERA GdDy3sBO3cJn7DwuuMF0VkZ79BvtW3UTWHiOZ+AXVWwmg1gifGImDUfK7rGtQmsx RsKdcuVxAYnbDvgtEL7Dar9EUjoJzv4s26rm56smk3bGE+aPlvHHjw9eFZpfJyyb z67qFfDMNzCXovl4+S+EJt5jVLajkVOxoZO5dJ6xoYB/scanmbkN65ovtQ2Fua1n gpgby/m/AgMBAAECggEAL3RlblikdNZSkXri/WkPX6exz8R8BEViOwyNheTZLdNy 4KdtBoq45wMYhJQvOahJGVUV/7TJxSL48GSCoGJav3EWiVLRrLP1mF3Jq/iW6iSA M/OaPDXJcz19xOvkn04i7WWDfJ6bhVx35V8hQW2HieuYZ9BQJ28kj1VJoKT8Y3qJ N93e2q+fcAnB8tqkgcHlaeEItoUwS3QEhLng1EOyE2s/XBVKM+AV7XSJhbDSJ9s3 trUghmRSjJ/GhvQEOjq8LOHeDR0azOqgmIkg7viKUyTl7lBuIN9ZPgSGQbv4XNcP oGbF3dokrjPBsQar5+O9QDvGk3pJXo6PIXRVIq7BsQKBgQDsrOl2Snnt5FtTfNNd n+ajsV8+S0HoimV7g05gxGvSc6po3vuBPZKWRsjtXNaSRKdXFvF1v8uAnNlQk0b+ wjyUn0r9x6KF8tj+s4qjyzwkg0Vy1A9/goDKD93HG1C9aieulrBepEmzkfiiD5W2 hJzphvBf+lTUNcJXOllxiDQzyQKBgQDDkYDXuMwlMV3fBv5+wNGsuADSVal/1Bz6 Q91NUnqTMFbOAgEvJy4e/5gle6MCBkqmD08rYcQAQbB1Tgr23CWoXbWn2GSlChoY ugDEz/q+heLjFkZU/T/xpTGtFpnfSUlP+7oXlyeEaXUMYnEW/UPI70AQPC3sDsuS H9VtBFE1RwKBgQCjsqEzqSWWbhjgsPi8zAlJdTgsLP9kKL0yZcqDUbhF8qyOJpSM epr2B/WXf1wGBSg9K2hNCiBmT5ZbjdJQCOa/4UGMMFVwEl0WJfahfcOWeZlCZ/xk NE6B8+Fwgqsgp9jUf/NzMmyroC35YZAqkqS5PRTrPYkI0jod/QS6avu4SQKBgGpe 89NhwjfgmAw8w6OxwNnO4zOEQEM03eYJj48E84KnYi9+y6IYD2/w2ZJZoxnwzh1w akFQVclF8XJ8Vl5a82iWP73hZyyVSAh28wAZl2qVbAjUDsEfVe5bSZ+5kUvvkp6c bmVyY54TtgRcbuJwMrRR3Wh3MwsYKQV7pxw6ouj1AoGANuZe1rxkCGZbUTrhtuma ZxI0NTZjEBVL69m9nlGggEq8tn2j18gaXWq0aEkqIo4/AEHWDyageBAFixTfq+qe vDHlzeSaTD3I2NCNk0+W6QWU8duel6byeoLyb5fhVeRxddg6ZuzjC5pSC9XVIxDR wwFKsfxWpJ2tHMOiif2plww= -----END PRIVATE KEY----- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/tencent/common/cert_2/apiclient_cert.p12Binary files differ
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/tencent/common/cert_2/apiclient_cert.pem
@@ -1,25 +1,25 @@ -----BEGIN CERTIFICATE----- MIIEITCCAwmgAwIBAgIUSmKUuRgKAuIo5mZrAXzAQxjRA6gwDQYJKoZIhvcNAQEL MIIENDCCAxygAwIBAgIUGVH+OUAuVOxChlw+8HWJAdKov00wDQYJKoZIhvcNAQEL BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg Q0EwHhcNMjQwNjE4MDgyNTQ3WhcNMjkwNjE3MDgyNTQ3WjB7MRMwEQYDVQQDDAox Njc4MzQ1NjI3MRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xJzAlBgNVBAsM HuaIkOmDveWWnOacm+enkeaKgOaciemZkOWFrOWPuDELMAkGA1UEBhMCQ04xETAP BgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA xMnTizbQwoQ4VIy9uH/ilbAFfK7nKY7oPs3QLIvudupj95rWHqn96+ap5dky6ToG 1OmVLWqQTrTy8PCfqrsZEwupBw5rEhvgyFj042jJ4I9wM208YQlaMjLu72fnfRRh 38FRBt0Y66UiqAtRKuZeaJj+GZ4cknEUQeK3eh/pDL8TwfkvnzMtUmIICc0IAFFU 9aJQhlecw96hQ9fjVyWTOqD5SXz2yhW9AOdlJlkG61CQfGyQuHxpB4PBiMEk5gn7 9MPTxMag2h2wH4qOb0RkmB/pzC1rNJjgS/cgmkQ35LGEYC65FspOhrOKfw432/OX QTZUz0oKEPZw2UmfO77FwwIDAQABo4G5MIG2MAkGA1UdEwQCMAAwCwYDVR0PBAQD AgP4MIGbBgNVHR8EgZMwgZAwgY2ggYqggYeGgYRodHRwOi8vZXZjYS5pdHJ1cy5j b20uY24vcHVibGljL2l0cnVzY3JsP0NBPTFCRDQyMjBFNTBEQkMwNEIwNkFEMzk3 NTQ5ODQ2QzAxQzNFOEVCRDImc2c9SEFDQzQ3MUI2NTQyMkUxMkIyN0E5RDMzQTg3 QUQxQ0RGNTkyNkUxNDAzNzEwDQYJKoZIhvcNAQELBQADggEBAGNBS3HVK2pqNjmh u9/eLfCjgEF/YLNy/u5yAuJBceLTtT4IWtpNKHbUoljLVLQ9ZApFNsjk55QwZZ4h dcU7XBvPsr1cryNC187WnFb6DX8uMm1G0Koo8ukWhd4B9hft5Nb9wLxmtO8WxYpA r4UuqXz8srLSqUtRu7o5SFXsOwYT+8nwuUNNdWQLJyuKEb0s39eGPECFH8iz+S4G P1sXs//TnxvAsqp+bODZYH9OazfCUG56cs+NiEZktzl9o6lap/ycI9DRuLLFMyfD Bie9QaJ/p9jIOZlJsTHsouNu5d+Mk1tEhdOBh8l53uIi19IPBIGtekVAouQR2zTk PLrU9bA= Q0EwHhcNMjQwNjIwMDIxODAwWhcNMjkwNjE5MDIxODAwWjCBjTETMBEGA1UEAwwK MTIyMDU0MDAwMTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTkwNwYDVQQL DDDlm5vlt53kuK3lm73nmb3phZLkuqflk4HkuqTmmJPkuK3lv4PmnInpmZDlhazl j7gxCzAJBgNVBAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBALTOOuM7h0rT5KwRRWc2nerxGCWZNz3UT7gRZEW/ IHCVULYU1MtqRSvrVen0PVhDT8Bkt5tQdrv7RLRm2w8mhM/DIPi+EaTaGQmt911G Va02fcRRHUWT4skNN1NiNIZIz3XGTCSGIFrYREAZ0PLewE7dwmfsPC64wXRWRnv0 G+1bdRNYeI5n4BdVbCaDWCJ8YiYNR8rusa1CazFGwp1y5XEBidsO+C0QvsNqv0RS OgnO/izbqubnqyaTdsYT5o+W8cePD14Vml8nLJvPruoV8Mw3MJei+Xj5L4Qm3mNU tqORU7Ghk7l0nrGhgH+xxqeZuQ3rmi+1DYW5rWeCmBvL+b8CAwEAAaOBuTCBtjAJ BgNVHRMEAjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGE aHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0 MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFC NjU0MjJFMTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEB CwUAA4IBAQCcL4hdeAsHMbE5A9AXgNL+LjFJwtCUEdR/fnalqOh8TtHkySfrntTs SvSka+OBWlaSe/6TOBUJy4gY1V2ESHb0JMhbFim5OXPBqXUDshJwDFF3hlpCLrmQ Y8ABrEik3nmx+y4DPmDj+38FTHJUIzzlChR5QWKilBgU2yqJBYrwK8pwoELUMiAv 58pUIBxpiaFqW146vKUDhV+xKI0mHMeGlA5UNkCG/JQLHAdrUXyi8RT3Yl/kvHqW EK/pUiThB/WFCLMGKvF4ahoHZFWuCm/BhCHDpdSh661Ivf9RqsvnPffBUjJ+ZIIk metUnaCMi8qNzcV7ohlfeXfjikzEVf+O -----END CERTIFICATE----- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/tencent/common/cert_2/apiclient_key.pem
@@ -1,28 +1,28 @@ -----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDEydOLNtDChDhU jL24f+KVsAV8rucpjug+zdAsi+526mP3mtYeqf3r5qnl2TLpOgbU6ZUtapBOtPLw 8J+quxkTC6kHDmsSG+DIWPTjaMngj3AzbTxhCVoyMu7vZ+d9FGHfwVEG3RjrpSKo C1Eq5l5omP4ZnhyScRRB4rd6H+kMvxPB+S+fMy1SYggJzQgAUVT1olCGV5zD3qFD 1+NXJZM6oPlJfPbKFb0A52UmWQbrUJB8bJC4fGkHg8GIwSTmCfv0w9PExqDaHbAf io5vRGSYH+nMLWs0mOBL9yCaRDfksYRgLrkWyk6Gs4p/Djfb85dBNlTPSgoQ9nDZ SZ87vsXDAgMBAAECggEAA91OyTIXYWqFTKvC4geo5HWjdfJdWcSTrQAPsYBB+5XY xrkEsW93LBXIiln8lPXtwmqf4ldwZAtLpg2jpQ+ti2E0PY477gwcGvMcRAb/x+gp NOlVQTaUzd2QMaVht2QaE/HQ7IiU/7OrfY9TVbtWaUlv3ALt3rZXxn90SPKtefGR 0hhz9hXnnPq2XQ4F2Pe9wwNabRljuBWh5jrTru77nthmrb7afgzPlzvhbBejiJR0 Yj2zjtiTDojo0jEAO2dM3OQERR9OSR5u0X+fawjT7JPGssjBH6ICBWakaUB9Oe/7 fxqOolRxJPV9dlkQGPTOp0buE+Y2YUmMPqvV6Ey4OQKBgQD0BIlu1lveyRo6J0U4 9l9RRQzBrQPGGCZkDJ9GEWL6KdCobFnjE/E21L+cGg4wkAvMpfj9nVc64gZ0Yvm0 oqyQXapwTxJRpwgl+AK1Q79Pe0L4esCvS6JX4eXHsJZiPUS/0gzOU1HCkCoggJ2m E7mnKdc2bj32oUI5z6UzOUAiPwKBgQDOc5Xu0zYMhTzLvkBrL9ILGTBsWN3rdldf QdFlbQMiWWmSrLIMLAmLIullMxFtFqVxjHBumKHq5HOuyxxKMMKdFNXs4WZ0HNyp y4uk7J1bpWBeaM5rExszmK4gpEdMt7G0Oi5NP2DIJ1fNFZulEqNwX3XsSYSPqDWZ 2nvteYSzfQKBgAaPgKpsNPgebAgYOjI33YQv2RHz9uACkjWqaTXXDdQv/54nm5sR VDDnM2edA7imhsqvw6v96PR6UzYZ2yDSJtWSzxxJ4/IyDXQH4PrCoYgfhkNr+XY9 EFZQin797m0hvJFzskhx0QbsHVXWX2axrRIje9fIyv2whDlNreFcrq69AoGAExih 77tdrn7MhtQMRV3hAeHMltkJffQuVMNTyRvyREUc/NI4jeOs5k/OYuv8WqjTmNMy uygnIgELqkljToGAHuOEfirDPU5GIvaO7ixsycNcTJ9JKKJVy8n9oUtQxQngyBjx m3eXTixFdNTg1r4InCZYVAjg2CDpBFgvSmIJIkkCgYA9xRIkr2bZEv0SVPy9Le8E WtqEvYT/61G5n2tESwBPAmrkVSZbmlZFZd7GnV+U7D4Yt3G9gEj754fPabS7prW4 Y0QSYLcRZGIDcbUahPd47ehsDgJljJW+ELTz0Vqi69j+X6fHGyupnWy0TIUpkQgK Um0XDvKxBoO1wp31FS370g== MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC0zjrjO4dK0+Ss EUVnNp3q8RglmTc91E+4EWRFvyBwlVC2FNTLakUr61Xp9D1YQ0/AZLebUHa7+0S0 ZtsPJoTPwyD4vhGk2hkJrfddRlWtNn3EUR1Fk+LJDTdTYjSGSM91xkwkhiBa2ERA GdDy3sBO3cJn7DwuuMF0VkZ79BvtW3UTWHiOZ+AXVWwmg1gifGImDUfK7rGtQmsx RsKdcuVxAYnbDvgtEL7Dar9EUjoJzv4s26rm56smk3bGE+aPlvHHjw9eFZpfJyyb z67qFfDMNzCXovl4+S+EJt5jVLajkVOxoZO5dJ6xoYB/scanmbkN65ovtQ2Fua1n gpgby/m/AgMBAAECggEAL3RlblikdNZSkXri/WkPX6exz8R8BEViOwyNheTZLdNy 4KdtBoq45wMYhJQvOahJGVUV/7TJxSL48GSCoGJav3EWiVLRrLP1mF3Jq/iW6iSA M/OaPDXJcz19xOvkn04i7WWDfJ6bhVx35V8hQW2HieuYZ9BQJ28kj1VJoKT8Y3qJ N93e2q+fcAnB8tqkgcHlaeEItoUwS3QEhLng1EOyE2s/XBVKM+AV7XSJhbDSJ9s3 trUghmRSjJ/GhvQEOjq8LOHeDR0azOqgmIkg7viKUyTl7lBuIN9ZPgSGQbv4XNcP oGbF3dokrjPBsQar5+O9QDvGk3pJXo6PIXRVIq7BsQKBgQDsrOl2Snnt5FtTfNNd n+ajsV8+S0HoimV7g05gxGvSc6po3vuBPZKWRsjtXNaSRKdXFvF1v8uAnNlQk0b+ wjyUn0r9x6KF8tj+s4qjyzwkg0Vy1A9/goDKD93HG1C9aieulrBepEmzkfiiD5W2 hJzphvBf+lTUNcJXOllxiDQzyQKBgQDDkYDXuMwlMV3fBv5+wNGsuADSVal/1Bz6 Q91NUnqTMFbOAgEvJy4e/5gle6MCBkqmD08rYcQAQbB1Tgr23CWoXbWn2GSlChoY ugDEz/q+heLjFkZU/T/xpTGtFpnfSUlP+7oXlyeEaXUMYnEW/UPI70AQPC3sDsuS H9VtBFE1RwKBgQCjsqEzqSWWbhjgsPi8zAlJdTgsLP9kKL0yZcqDUbhF8qyOJpSM epr2B/WXf1wGBSg9K2hNCiBmT5ZbjdJQCOa/4UGMMFVwEl0WJfahfcOWeZlCZ/xk NE6B8+Fwgqsgp9jUf/NzMmyroC35YZAqkqS5PRTrPYkI0jod/QS6avu4SQKBgGpe 89NhwjfgmAw8w6OxwNnO4zOEQEM03eYJj48E84KnYi9+y6IYD2/w2ZJZoxnwzh1w akFQVclF8XJ8Vl5a82iWP73hZyyVSAh28wAZl2qVbAjUDsEfVe5bSZ+5kUvvkp6c bmVyY54TtgRcbuJwMrRR3Wh3MwsYKQV7pxw6ouj1AoGANuZe1rxkCGZbUTrhtuma ZxI0NTZjEBVL69m9nlGggEq8tn2j18gaXWq0aEkqIo4/AEHWDyageBAFixTfq+qe vDHlzeSaTD3I2NCNk0+W6QWU8duel6byeoLyb5fhVeRxddg6ZuzjC5pSC9XVIxDR wwFKsfxWpJ2tHMOiif2plww= -----END PRIVATE KEY-----