|  |  | 
 |  |  | package com.doumee.core.wx; | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.doumee.biz.system.SystemDictDataBiz; | 
 |  |  | import com.doumee.core.constants.Constants; | 
 |  |  | import com.doumee.core.constants.ResponseStatus; | 
 |  |  | import com.doumee.core.exception.BusinessException; | 
 |  |  | import com.doumee.core.utils.DateUtil; | 
 |  |  | import com.doumee.core.utils.HttpsUtil; | 
 |  |  | import com.doumee.core.utils.ID; | 
 |  |  | import com.doumee.core.utils.ImageDesignerUtil; | 
 |  |  | import com.doumee.dao.business.RefundMapper; | 
 |  |  | import com.doumee.dao.business.TransactionsMapper; | 
 |  |  | import com.doumee.dao.business.model.Bikes; | 
 |  |  | import com.doumee.dao.business.model.Locks; | 
 |  |  | import com.doumee.dao.business.model.Refund; | 
 |  |  | import com.doumee.dao.business.model.Transactions; | 
 |  |  | import com.doumee.dao.business.web.request.RefundDTO; | 
 |  |  | import com.doumee.service.business.RefundService; | 
 |  |  | import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; | 
 |  |  | import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; | 
 |  |  | import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; | 
 |  |  | import com.github.binarywang.wxpay.exception.WxPayException; | 
 |  |  | import com.doumee.dao.system.model.SystemDictData; | 
 |  |  | import com.wechat.pay.java.service.refund.model.AmountReq; | 
 |  |  | import com.wechat.pay.java.service.refund.model.CreateRequest; | 
 |  |  | import com.wechat.pay.java.service.refund.model.QueryByOutRefundNoRequest; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.checkerframework.checker.units.qual.A; | 
 |  |  | import okhttp3.OkHttpClient; | 
 |  |  | import okhttp3.Request; | 
 |  |  | import okhttp3.Response; | 
 |  |  | import org.apache.commons.io.FileUtils; | 
 |  |  | import org.apache.commons.lang3.StringUtils; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  |  | 
 |  |  | import java.io.*; | 
 |  |  | import java.math.BigDecimal; | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.Map; | 
 |  |  | import java.util.Objects; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 微信小程序-公共方法 | 
 |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private TransactionsMapper transactionsMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private SystemDictDataBiz systemDictDataBiz; | 
 |  |  |     @Autowired | 
 |  |  |     private WxPayProperties wxPayProperties; | 
 |  |  |  | 
 |  |  |     @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
 |  |  |     public Refund wxRefund(RefundDTO refundDTO) { | 
 |  |  |         try { | 
 |  |  |             // 发送退款请求 | 
 |  |  |             String refNum = ID.nextGUID(); | 
 |  |  |             WxPayRefundRequest request = new WxPayRefundRequest(); | 
 |  |  |             request.setOutTradeNo(refundDTO.getOrderId()); | 
 |  |  |             request.setOutRefundNo(refNum); | 
 |  |  | //            request.setTotalFee(BaseWxPayRequest.yuanToFen(refundDTO.getTotalAmount().toString())); | 
 |  |  | //            request.setRefundFee(BaseWxPayRequest.yuanToFen(refundDTO.getRefundAmount().toString())); | 
 |  |  |             System.out.println("实际总金额" + BaseWxPayRequest.yuanToFen(refundDTO.getTotalAmount().toString())); | 
 |  |  |             System.out.println("实际退款金额" + BaseWxPayRequest.yuanToFen(refundDTO.getRefundAmount().toString())); | 
 |  |  |     public boolean wxRefund(RefundDTO refundDTO) { | 
 |  |  |         // 发送退款请求 | 
 |  |  |         Refund refund = new Refund(); | 
 |  |  |         refund.setId(Constants.getUUID()); | 
 |  |  |         refund.setCreateDate(new Date()); | 
 |  |  |         refund.setMemberId(refundDTO.getMemberId()); | 
 |  |  |         refund.setMoney(refundDTO.getRefundAmount()); | 
 |  |  | //        refund.setOnlineOrderid(refNum); | 
 |  |  |         refund.setPayWay(Constants.ZERO); | 
 |  |  |         refund.setStatus(Constants.ZERO); | 
 |  |  |         refund.setDoneDate(new Date()); | 
 |  |  |         refund.setCreator(refundDTO.getCreator()); | 
 |  |  |         refund.setType(refundDTO.getType()); | 
 |  |  |         refund.setObjId(refundDTO.getOrderId()); | 
 |  |  |         refund.setReason(refundDTO.getReason()); | 
 |  |  |         refund.setCanBalance(refundDTO.getCanBalance()); | 
 |  |  |         refundMapper.insert(refund); | 
 |  |  |  | 
 |  |  |             request.setTotalFee(1); | 
 |  |  |             request.setRefundFee(1); | 
 |  |  |             WxPayRefundResult response = WxMiniConfig.wxPayService.refund(request); | 
 |  |  |             if ("SUCCESS".equals(response.getReturnCode()) && "SUCCESS".equals(response.getResultCode())) { | 
 |  |  |         CreateRequest request = new CreateRequest(); | 
 |  |  |         request.setOutTradeNo(refundDTO.getOrderId()); | 
 |  |  |         request.setOutRefundNo(refund.getId()); | 
 |  |  |         request.setSubMchid(WxMiniConfig.wxProperties.getSubMchId()); | 
 |  |  |         request.setNotifyUrl(WxMiniConfig.wxProperties.getRefundNotifyUrl()); | 
 |  |  |         AmountReq amountReq = new AmountReq(); | 
 |  |  |         amountReq.setTotal(refundDTO.getTotalAmount().longValue()); | 
 |  |  |         amountReq.setRefund(refundDTO.getRefundAmount().longValue()); | 
 |  |  |         amountReq.setCurrency("CNY"); | 
 |  |  |         request.setAmount(amountReq); | 
 |  |  |         try { | 
 |  |  |             log.error("=============="+JSONObject.toJSONString(request)); | 
 |  |  |             com.wechat.pay.java.service.refund.model.Refund response = WxMiniConfig.refundService.create(request); | 
 |  |  |             log.error("=============="+JSONObject.toJSONString(response)); | 
 |  |  |             if ("SUCCESS".equals(response.getStatus().name()) | 
 |  |  |                     || "PROCESSING".equals(response.getStatus().name()) ) { | 
 |  |  |                 return  true; | 
 |  |  |             }else{ | 
 |  |  |                 throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,退款申请失败哦!"); | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             e.printStackTrace(); | 
 |  |  |             throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,退款申请失败!"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |     @Transactional(rollbackFor = {BusinessException.class,Exception.class}) | 
 |  |  |     public com.wechat.pay.java.service.refund.model.Refund isSuucessRefund(String outTradeNo) { | 
 |  |  |         // 发送退款请求 | 
 |  |  |  | 
 |  |  |         QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest(); | 
 |  |  |         request.setOutRefundNo(outTradeNo); | 
 |  |  |         request.setSubMchid(WxMiniConfig.wxProperties.getSubMchId()); | 
 |  |  |         try { | 
 |  |  |             log.error("=============="+JSONObject.toJSONString(request)); | 
 |  |  |             com.wechat.pay.java.service.refund.model.Refund response = WxMiniConfig.refundService.queryByOutRefundNo(request); | 
 |  |  |             log.error("=============="+JSONObject.toJSONString(response)); | 
 |  |  |             if ("SUCCESS".equals(response.getStatus().name()) | 
 |  |  |                     || "PROCESSING".equals(response.getStatus().name()) ) { | 
 |  |  |                 return  response; | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             e.printStackTrace(); | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |         return  null; | 
 |  |  |     } | 
 |  |  |     public Refund wxRefundOld(RefundDTO refundDTO) { | 
 |  |  |         // 发送退款请求 | 
 |  |  |         String refNum = ID.nextGUID(); | 
 |  |  |         CreateRequest request = new CreateRequest(); | 
 |  |  |         request.setOutTradeNo(refundDTO.getOrderId()); | 
 |  |  |         request.setOutRefundNo(refNum); | 
 |  |  |         request.setSubMchid(WxMiniConfig.wxProperties.getSubMchId()); | 
 |  |  |         request.setNotifyUrl(WxMiniConfig.wxProperties.getRefundNotifyUrl()); | 
 |  |  | // | 
 |  |  |         AmountReq amountReq = new AmountReq(); | 
 |  |  |         amountReq.setTotal(refundDTO.getTotalAmount().longValue()); | 
 |  |  |         amountReq.setRefund(refundDTO.getRefundAmount().longValue()); | 
 |  |  |         amountReq.setCurrency("CNY"); | 
 |  |  |         request.setAmount(amountReq); | 
 |  |  |         System.out.println("实际总金额" + refundDTO.getTotalAmount()); | 
 |  |  |         System.out.println("实际退款金额" + refundDTO.getRefundAmount()); | 
 |  |  | //            request.setTotalFee(1); | 
 |  |  | //            request.setRefundFee(1); | 
 |  |  |         try { | 
 |  |  |             com.wechat.pay.java.service.refund.model.Refund response = WxMiniConfig.refundService.create(request); | 
 |  |  |             if ("SUCCESS".equals(response.getStatus().name()) ) { | 
 |  |  |                 //存储退款记录 与 流水记录 | 
 |  |  |                 Refund refund = new Refund(); | 
 |  |  |                 refund.setId(Constants.getUUID()); | 
 |  |  | 
 |  |  |                 transactions.setIsdeleted(Constants.ZERO); | 
 |  |  |                 transactions.setOrderId(refundDTO.getOrderId()); | 
 |  |  |                 transactions.setMoney(refundDTO.getRefundAmount()); | 
 |  |  |                 transactions.setType(refundDTO.getType()==Constants.TRANSACTIONS_TYPE.REFUND.getKey()?Constants.TRANSACTIONS_TYPE.PLATFORMREFUND.getKey():Constants.REFUND_TYPE.BACK.getKey()); | 
 |  |  |                 transactions.setPreOrderid(refundDTO.getOrderId()); | 
 |  |  |                 transactions.setOnlineOrderid(refNum); | 
 |  |  |                 transactions.setDoneDate(new Date()); | 
 |  |  |                 transactions.setTitle(Constants.TRANSACTIONS_TYPE.get(transactions.getType()).getName()); | 
 |  |  |                 transactions.setContent(Constants.TRANSACTIONS_TYPE.get(transactions.getType()).getInfo()); | 
 |  |  |                 if(refund.getType().equals(Constants.REFUND_TYPE.PLAT_AUTO.getKey())||refund.getType().equals(Constants.REFUND_TYPE.PLAT_FORCE.getKey())){ | 
 |  |  |                     //平台自动退款 或 强制退款 | 
 |  |  |                     transactions.setType(Constants.TRANSACTIONS_TYPE.REFUND.getKey()); | 
 |  |  |                     transactions.setTitle(Constants.REFUND_TYPE.PLAT_AUTO.getInfo()); | 
 |  |  |                     transactions.setContent(Constants.REFUND_TYPE.PLAT_AUTO.getInfo()); | 
 |  |  |                 }else if(refund.getType().equals(Constants.REFUND_TYPE.NORMAL.getKey())){ | 
 |  |  |                     //用户主动退款 | 
 |  |  |                     transactions.setType(Constants.TRANSACTIONS_TYPE.REFUND.getKey()); | 
 |  |  |                     transactions.setTitle(Constants.REFUND_TYPE.NORMAL.getInfo()); | 
 |  |  |                     transactions.setContent(Constants.REFUND_TYPE.NORMAL.getInfo()); | 
 |  |  |                 }else if(refund.getType().equals(Constants.REFUND_TYPE.BACK.getKey())){ | 
 |  |  |                     //结算后退款 | 
 |  |  |                     transactions.setType(Constants.TRANSACTIONS_TYPE.REFUND.getKey()); | 
 |  |  |                     transactions.setTitle(Constants.REFUND_TYPE.BACK.getInfo()); | 
 |  |  |                     transactions.setContent(Constants.REFUND_TYPE.BACK.getInfo()); | 
 |  |  |                 } | 
 |  |  |                 transactions.setBalance(BigDecimal.ZERO); | 
 |  |  |                 transactions.setObjId(refund.getId()); | 
 |  |  |                 transactions.setObjType(Constants.ONE); | 
 |  |  |                 transactionsMapper.insert(transactions); | 
 |  |  |                 return refund; | 
 |  |  |             } else{ | 
 |  |  |                 throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),response.getErrCode() + response.getErrCodeDes()); | 
 |  |  |                 throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,退款失败!"); | 
 |  |  |             } | 
 |  |  |         } catch (WxPayException e) { | 
 |  |  |         }catch (BusinessException e){ | 
 |  |  |             throw e; | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             e.printStackTrace(); | 
 |  |  |             throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,退款失败!"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public static void main(String[] args) throws IOException { | 
 |  |  |       /* InputStream inputStream = HttpsUtil.postJson("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=75_W8lx5-bp9WEo69pQ6hvN70fJJJCNSRby6Wi6z_R9G7Sd5GMdY7ZT8Zq3PrKWrFBq92utfgqu3P8iw1NOvJNfyZssEYCy6k94Wch-GQNXcarSV65gowLk-SA9bncWTJbAGAHEU", "{\"check_path\":false,\"is_hyaline\":false,\"page\":\"pages/index/index\",\"scene\":\"1993/90\",\"env_version\":\"trial\"}"); | 
 |  |  |         File file = new File("D://test.png"); | 
 |  |  |  | 
 |  |  |         //定义一个用于读取InputStream数据的byte数组 | 
 |  |  |         byte[] buffer = new byte[1024]; | 
 |  |  |  | 
 |  |  | //输出流,用于写入文件 | 
 |  |  |         FileOutputStream outputStream = new FileOutputStream(file); | 
 |  |  |  | 
 |  |  | //循环读取数据并将其写入文件中 | 
 |  |  |         int length; | 
 |  |  |         while ((length = inputStream.read(buffer)) > 0) { | 
 |  |  |             outputStream.write(buffer, 0, length); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | //关闭InputStream和OutputStream | 
 |  |  |         inputStream.close(); | 
 |  |  |         outputStream.close();*/ | 
 |  |  |         Map<String,Object> body = new HashMap<>(); | 
 |  |  |         // 场景码,与前端约定,最终是需要前端解析 | 
 |  |  |         body.put("scene",   "1992/41" ); | 
 |  |  |         // 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。 | 
 |  |  | //        body.put("env_version", "release"); | 
 |  |  |         body.put("env_version", "trial"); | 
 |  |  |         // 透明,根据你的场景自行设置body参数 | 
 |  |  |         body.put("is_hyaline",false); | 
 |  |  |         body.put("check_path", false); | 
 |  |  |         body.put("page","pages/index/index"); | 
 |  |  |         OkHttpClient client = new OkHttpClient().newBuilder().build(); | 
 |  |  |         okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json"); | 
 |  |  |         log.info("=========================================="+JSONObject.toJSONString(body)); | 
 |  |  |         okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(mediaType, JSONObject.toJSONString(body)); | 
 |  |  |         Request request = new Request.Builder().url("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=75_MppLyM-Fy1rWPbJE8ccXfy90Afg_3wdENqKBEshglyyARP3egjvsti3agoaZJ0UVKHh_wwuIDcbu41ptPKleUcaD1vDRi4BrH8oN8TEHPTUCb1Kcp6ZoMJNNWScZKChAIAHSK").method("POST", requestBody).build(); | 
 |  |  |         try { | 
 |  |  |             Response response = client.newCall(request).execute(); | 
 |  |  |             if (response.isSuccessful()) { | 
 |  |  |                 InputStream inputStream = new ByteArrayInputStream(response.body().bytes()); | 
 |  |  |                 String nowDate = DateUtil.getNowShortDate(); | 
 |  |  |                 File file = new File("D://test1.png"); | 
 |  |  |                 FileUtils.copyInputStreamToFile(inputStream,file); | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             e.printStackTrace(); | 
 |  |  |         } | 
 |  |  |         throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"退款发生异常请联系管理员"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 生成小程序码 | 
 |  |  |      * https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/qr-code/getUnlimitedQRCode.html | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public void generateWXMiniCode(Locks locks,String token,String prePath,String path){ | 
 |  |  |  | 
 |  |  |         if(Objects.isNull(token)){ | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |          String url =  "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+ token; | 
 |  |  |         String release =   systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.MINI_PROGRAMME_REALEASE).getCode(); | 
 |  |  |         //生成图片上传OSS | 
 |  |  |         Map<String,Object> body = new HashMap<>(); | 
 |  |  |         // 场景码,与前端约定,最终是需要前端解析 | 
 |  |  |         body.put("scene", locks.getSiteId() + "/" +locks.getCode() ); | 
 |  |  |         // 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。 | 
 |  |  | //        body.put("env_version", "release"); | 
 |  |  |         body.put("env_version", StringUtils.defaultString(release, "release")); | 
 |  |  |         // 透明,根据你的场景自行设置body参数 | 
 |  |  |         body.put("is_hyaline", false); | 
 |  |  |         body.put("check_path", false); | 
 |  |  |         body.put("width", 290); | 
 |  |  |         body.put("page","pages/index/index"); | 
 |  |  |         log.info("=========================================="+url+"\n"+JSONObject.toJSONString(body)); | 
 |  |  |         try { | 
 |  |  |             InputStream inputStream  =HttpsUtil.postJson(url,JSONObject.toJSONString(body));; | 
 |  |  |             if (inputStream !=null) { | 
 |  |  |                 String nowDate = DateUtil.getNowShortDate(); | 
 |  |  |                 String name =locks.getSiteId()+"-"+locks.getCode()+"-"+nowDate+".png"; | 
 |  |  |                 String fileName =prePath+path+"/"+name; | 
 |  |  | //                File file = new File(prePath+path,locks.getSiteId()+"-"+locks.getCode()+"-"+nowDate+".png"); | 
 |  |  | //                FileUtils.copyInputStreamToFile(inputStream,file); | 
 |  |  |                 if(ImageDesignerUtil.graphicsGenerationIs(locks.getSiteId()+"/"+locks.getCode(),inputStream,fileName)){ | 
 |  |  |                     locks.setInfo(name); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             e.printStackTrace(); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |     public void generateEbikeWXMiniCode(Bikes bikes, String token, String prePath, String path){ | 
 |  |  |         if(Objects.isNull(token)){ | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |          String url =  "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+ token; | 
 |  |  |         String release =   systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.MINI_PROGRAMME_REALEASE).getCode(); | 
 |  |  |         //生成图片上传OSS | 
 |  |  |         Map<String,Object> body = new HashMap<>(); | 
 |  |  |         // 场景码,与前端约定,最终是需要前端解析 | 
 |  |  |         body.put("scene",  Constants.EBIKE_PREFIX +bikes.getCode() ); | 
 |  |  |         // 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。 | 
 |  |  | //        body.put("env_version", "release"); | 
 |  |  |         body.put("env_version", StringUtils.defaultString(release, "release")); | 
 |  |  |         // 透明,根据你的场景自行设置body参数 | 
 |  |  |         body.put("is_hyaline", false); | 
 |  |  |         body.put("check_path", false); | 
 |  |  |         body.put("width", 290); | 
 |  |  |         body.put("page","pages/index/index"); | 
 |  |  |         log.info("=========================================="+url+"\n"+JSONObject.toJSONString(body)); | 
 |  |  |         try { | 
 |  |  |             InputStream inputStream  =HttpsUtil.postJson(url,JSONObject.toJSONString(body));; | 
 |  |  |             if (inputStream !=null) { | 
 |  |  |                 String nowDate = DateUtil.getNowShortDate(); | 
 |  |  |                 String name =Constants.EBIKE_PREFIX+bikes.getCode()+"-"+nowDate+".png"; | 
 |  |  |                 String fileName =prePath+path+"/"+name; | 
 |  |  | //                File file = new File(prePath+path,locks.getSiteId()+"-"+locks.getCode()+"-"+nowDate+".png"); | 
 |  |  | //                FileUtils.copyInputStreamToFile(inputStream,file); | 
 |  |  |                 if(ImageDesignerUtil.graphicsGenerationIs(bikes.getCode(),inputStream,fileName)){ | 
 |  |  |                     bikes.setImgurl(name); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             e.printStackTrace(); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |     /** | 
 |  |  |      * 生成小程序码 | 
 |  |  |      * https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/qr-code/getUnlimitedQRCode.html | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public void generateWXMiniCodeOld(Locks locks,SystemDictData systemDictData,String prePath,String path){ | 
 |  |  |  | 
 |  |  |         if(Objects.isNull(systemDictData)){ | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |       String release =   systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.MINI_PROGRAMME_REALEASE).getCode(); | 
 |  |  |         //生成图片上传OSS | 
 |  |  |         Map<String,Object> body = new HashMap<>(); | 
 |  |  |         // 场景码,与前端约定,最终是需要前端解析 | 
 |  |  |         body.put("scene", locks.getSiteId() + "/" +locks.getCode() ); | 
 |  |  |         // 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。 | 
 |  |  | //        body.put("env_version", "release"); | 
 |  |  |         body.put("env_version", StringUtils.defaultString(release, "release")); | 
 |  |  |         // 透明,根据你的场景自行设置body参数 | 
 |  |  |         body.put("is_hyaline", Boolean.FALSE.toString()); | 
 |  |  |         body.put("check_path", Boolean.FALSE.toString()); | 
 |  |  |         body.put("page","pages/index/index"); | 
 |  |  |         OkHttpClient client = new OkHttpClient().newBuilder().build(); | 
 |  |  |         okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json"); | 
 |  |  |         okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(mediaType, JSONObject.toJSONString(body)); | 
 |  |  |         log.info("=========================================="+JSONObject.toJSONString(body)); | 
 |  |  |         Request request = new Request.Builder().url("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+systemDictData.getCode()).method("POST", requestBody).build(); | 
 |  |  |         try { | 
 |  |  |             Response response = client.newCall(request).execute(); | 
 |  |  |             if (response.isSuccessful()) { | 
 |  |  |                 InputStream inputStream = new ByteArrayInputStream(response.body().bytes()); | 
 |  |  |                 String nowDate = DateUtil.getNowShortDate(); | 
 |  |  |                 File file = new File(prePath+path,locks.getSiteId()+"-"+locks.getCode()+"-"+nowDate+".png"); | 
 |  |  |                 FileUtils.copyInputStreamToFile(inputStream,file); | 
 |  |  |                 locks.setInfo(locks.getSiteId()+"-"+locks.getCode()+"-"+nowDate+".png"); | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             e.printStackTrace(); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |