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