From 2bb847e3b8bdc2692d88ad9df0d4ad54a3ccd890 Mon Sep 17 00:00:00 2001 From: k94314517 <8417338+k94314517@user.noreply.gitee.com> Date: 星期三, 08 十一月 2023 16:01:20 +0800 Subject: [PATCH] 111 --- server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java | 67 ++++++++++++++++++++++ server/platform/src/main/java/com/doumee/task/ScheduleTool.java | 37 ++++++++++++ server/services/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java | 2 server/services/src/main/java/com/doumee/core/constants/Constants.java | 1 server/web/src/main/java/com/doumee/api/web/AccountApi.java | 15 +++++ server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java | 52 +++++++++++++++++ 6 files changed, 173 insertions(+), 1 deletions(-) diff --git a/server/platform/src/main/java/com/doumee/task/ScheduleTool.java b/server/platform/src/main/java/com/doumee/task/ScheduleTool.java index f9f421b..0345b41 100644 --- a/server/platform/src/main/java/com/doumee/task/ScheduleTool.java +++ b/server/platform/src/main/java/com/doumee/task/ScheduleTool.java @@ -1,16 +1,23 @@ package com.doumee.task; +import com.alibaba.fastjson.JSONObject; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.Constants; import com.doumee.core.exception.BusinessException; import com.doumee.core.utils.DateUtil; +import com.doumee.core.utils.HttpsUtil; +import com.doumee.core.wx.WxPayProperties; import com.doumee.dao.business.model.Goodsorder; +import com.doumee.dao.system.model.SystemDictData; import com.doumee.service.business.GoodsorderService; import com.doumee.service.business.MemberRidesService; import com.doumee.service.business.SitesService; import com.doumee.service.business.WxBillService; +import com.doumee.service.system.SystemDictDataService; import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.util.ThreadContext; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; @@ -19,6 +26,7 @@ import java.util.Date; import java.util.List; +import java.util.Objects; /** * 瀹氭椂浠诲姟 @@ -33,6 +41,9 @@ @Autowired private SystemDictDataBiz systemDictDataBiz; + + @Autowired + private SystemDictDataService systemDictDataService; @Autowired private WxBillService wxBillService; @@ -91,4 +102,30 @@ log.info("=====================缁撴潫 绔欑偣杞﹁締婊℃灦鐜囬璀�======================="); } + + @Autowired + private WxPayProperties wxPayProperties; + + /** + * 鏇存柊寰俊 ACCESS_TOKEN + */ + @Scheduled(fixedDelay = 1000L * 60L * 90L) + public void updAccessToken(){ + DefaultWebSecurityManager manager = new DefaultWebSecurityManager(); + ThreadContext.bind(manager); + String appId = wxPayProperties.getAppId(); + String appSecret = wxPayProperties.getAppSecret(); + //鐢熸垚寰俊token + String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+appSecret; + String response = HttpsUtil.doGet(url,null); + JSONObject json = JSONObject.parseObject(response); + SystemDictData systemDictData = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.ACCESS_TOKEN); + if(!Objects.isNull(systemDictData)){ + systemDictData.setCode(json.getString("access_token")); + systemDictData.setUpdateTime(new Date()); + systemDictDataService.updateById(systemDictData); + } + } + + } diff --git a/server/services/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java b/server/services/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java index 0a873f0..6d9c460 100644 --- a/server/services/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java +++ b/server/services/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java @@ -47,6 +47,8 @@ systemDictDataService.updateById(systemDictData); } + + @Override public SystemDictData queryByCode(String dicCode, String label){ SystemDict queryDto = new SystemDict(); diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java index 62e26cf..cacca62 100644 --- a/server/services/src/main/java/com/doumee/core/constants/Constants.java +++ b/server/services/src/main/java/com/doumee/core/constants/Constants.java @@ -27,6 +27,7 @@ public static final String DINGDING ="DINGDING" ; public static final String MINI_PROGRAMME ="MINI_PROGRAMME" ; public static final String FREE_RENT_TIME ="FREE_RENT_TIME" ; + public static final String ACCESS_TOKEN ="ACCESS_TOKEN" ; public static final String IMG_DIR = "IMG_DIR"; public static final String FILE_DIR ="FILE_DIR" ; public static final String PRIVATE_KEY = "PRIVATE_KEY"; diff --git a/server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java b/server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java index 09bea1e..291d14f 100644 --- a/server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java +++ b/server/services/src/main/java/com/doumee/core/utils/HttpsUtil.java @@ -1,15 +1,25 @@ package com.doumee.core.utils; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + import javax.net.ssl.*; import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.net.URI; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; +import java.util.Map; public class HttpsUtil { @@ -80,6 +90,48 @@ return null; } + /** + * 鍙戦�乬et璇锋眰 + * @param url 璇锋眰URL + * @param param 璇锋眰鍙傛暟 key:value url鎼哄甫鍙傛暟 鎴栬�呮棤鍙傚彲涓嶅~ + * @return + */ + public static String doGet(String url, Map<String, String> param) { + // 鍒涘缓Httpclient瀵硅薄 + CloseableHttpClient httpclient = HttpClients.createDefault(); + String resultString = ""; + CloseableHttpResponse response = null; + try { + // 鍒涘缓uri + URIBuilder builder = new URIBuilder(url); + if (param != null) { + for (String key : param.keySet()) { + builder.addParameter(key, param.get(key)); + } + } + URI uri = builder.build(); + // 鍒涘缓http GET璇锋眰 + HttpGet httpGet = new HttpGet(uri); + // 鎵ц璇锋眰 + response = httpclient.execute(httpGet); + // 鍒ゆ柇杩斿洖鐘舵�佹槸鍚︿负200 + if (response.getStatusLine().getStatusCode() == 200) { + resultString = EntityUtils.toString(response.getEntity(), "UTF-8"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (response != null) { + response.close(); + } + httpclient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultString; + } public static void main(String[] args) { //灞�閮ㄤ俊浠绘墍鏈夎瘉涔﹀拰涓绘満 diff --git a/server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java b/server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java index aec7924..cb838eb 100644 --- a/server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java +++ b/server/services/src/main/java/com/doumee/core/wx/WxMiniUtilService.java @@ -1,5 +1,6 @@ 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; @@ -7,22 +8,31 @@ import com.doumee.core.utils.ID; import com.doumee.dao.business.RefundMapper; import com.doumee.dao.business.TransactionsMapper; +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.dao.system.model.SystemDictData; 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 lombok.extern.slf4j.Slf4j; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FileOutputStream; +import java.io.InputStream; import java.math.BigDecimal; -import java.util.Date; +import java.util.*; /** * 寰俊灏忕▼搴�-鍏叡鏂规硶 @@ -36,6 +46,9 @@ @Autowired private TransactionsMapper transactionsMapper; + + @Autowired + private SystemDictDataBiz systemDictDataBiz; @Transactional(rollbackFor = {BusinessException.class,Exception.class}) @@ -111,4 +124,56 @@ 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){ + SystemDictData systemDictData = systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.ACCESS_TOKEN); + if(Objects.isNull(systemDictData)){ + return; + } + //鐢熸垚鍥剧墖涓婁紶OSS + Map<String,Object> body = new HashMap<>(); + // 鍦烘櫙鐮侊紝涓庡墠绔害瀹氾紝鏈�缁堟槸闇�瑕佸墠绔В鏋� + body.put("scene", locks.getSiteId() + "/" +locks.getCode() ); + // 姝e紡鐗堜负 "release"锛屼綋楠岀増涓� "trial"锛屽紑鍙戠増涓� "develop"銆傞粯璁ゆ槸姝e紡鐗堛�� + body.put("env_version", "release"); + // 閫忔槑锛屾牴鎹綘鐨勫満鏅嚜琛岃缃産ody鍙傛暟 + body.put("is_hyaline", false); +// 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)); + 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()); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int len = -1; + while ((len = inputStream.read(buffer)) != -1) { + baos.write(buffer, 0, len); + } + + locks.setInfo("data:mediatype;base64," + Base64.getEncoder().encodeToString(baos.toByteArray())); + +// FileOutputStream out = new FileOutputStream("d:\\test.png"); +// byte[] buffer = new byte[8192]; +// int bytesRead = 0; +// while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) { +// out.write(buffer, 0, bytesRead); +// } +// out.flush(); +// inputStream.close(); +// out.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } diff --git a/server/web/src/main/java/com/doumee/api/web/AccountApi.java b/server/web/src/main/java/com/doumee/api/web/AccountApi.java index 4bb78d8..4e3d486 100644 --- a/server/web/src/main/java/com/doumee/api/web/AccountApi.java +++ b/server/web/src/main/java/com/doumee/api/web/AccountApi.java @@ -5,6 +5,8 @@ import com.doumee.core.annotation.LoginRequired; import com.doumee.core.annotation.trace.Trace; import com.doumee.core.model.ApiResponse; +import com.doumee.core.wx.WxMiniUtilService; +import com.doumee.dao.business.model.Locks; import com.doumee.dao.business.web.request.RegisterRequest; import com.doumee.dao.business.web.request.WxPhoneRequest; import com.doumee.dao.business.web.response.AccountResponse; @@ -34,6 +36,9 @@ @Autowired private MemberService memberService; + + @Autowired + private WxMiniUtilService wxMiniUtilService; // @ApiOperation(value = "鐢ㄦ埛娉ㄥ唽", notes = "灏忕▼搴忕") // @PostMapping("/userRegister") @@ -96,6 +101,16 @@ + @ApiOperation(value = "娴嬭瘯鐢熸垚浜岀淮鐮�", notes = "灏忕▼搴忕") + @GetMapping("/generateWXMiniCode") + public ApiResponse<Locks> generateWXMiniCode() { + Locks locks = new Locks(); + locks.setCode(12); + locks.setSiteId("1005"); + wxMiniUtilService.generateWXMiniCode(locks); + return ApiResponse.success("鎿嶄綔鎴愬姛",locks); + } + } -- Gitblit v1.9.3