From 00ecb535a0d60687293d54d23de3e94e27cd2b1f Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Wed, 21 Jul 2021 10:41:36 +0800
Subject: [PATCH] modify user/share/poster

---
 gc-core/src/main/java/com/xzx/gc/common/utils/wxpay/WxUtil.java  |   27 +++++++++----
 gc-user/src/test/java/SpringTest.java                            |   46 ++++++++++++++++++++++
 gc-user/src/main/java/com/xzx/gc/user/service/PosterService.java |    4 +-
 gc-user/src/test/java/ThreadTest.java                            |    9 ++++
 4 files changed, 74 insertions(+), 12 deletions(-)

diff --git a/gc-core/src/main/java/com/xzx/gc/common/utils/wxpay/WxUtil.java b/gc-core/src/main/java/com/xzx/gc/common/utils/wxpay/WxUtil.java
index 81fb8ed..750922b 100644
--- a/gc-core/src/main/java/com/xzx/gc/common/utils/wxpay/WxUtil.java
+++ b/gc-core/src/main/java/com/xzx/gc/common/utils/wxpay/WxUtil.java
@@ -73,6 +73,9 @@
         return openid;
     }
 
+    public  String generateAcode(String scene,String path,String imgName,String width){
+        return generateAcode(scene, path, imgName, width, null);
+    }
 
     /**
      * 生成小程序码
@@ -81,19 +84,25 @@
      * @param imgName  图片唯一名称
      * @return
      */
-    public  String generateAcode(String scene,String path,String imgName,String width){
+    public  String generateAcode(String scene,String path,String imgName,String width, Integer type){
         String urlPrefix=businessUtil.getViewUrl();
         String imgPath=Constants.IMG_UPLOAD_PATH+imgName;
         if(!FileUtil.exist(imgPath)){
-            //调用二维码接口
-            String url = StrFormatter.format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={}", getAccessToken());
+
             cn.hutool.json.JSONObject obj = JSONUtil.createObj();
-            //最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,
-            // 其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
-            obj.put("scene", scene);
-            //必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index,
-            // 根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面
-            obj.put("path", path);
+            //调用二维码接口
+            String url = null;
+            if (type == null) {
+                // 该接口无数量限制,但是 scene 传参最大字符长度为32个字符
+                url = StrFormatter.format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={}", getAccessToken());
+                obj.put("scene", scene);
+                obj.put("path", path);
+            } else {
+                // 该接口存在数量限制, 总共可生成10w个, 但参数是接在path后面
+                url = StrFormatter.format("https://api.weixin.qq.com/wxa/getwxacode?access_token={}", getAccessToken());
+                obj.put("path", path + "?" + scene );
+            }
+
             //最小 280px,最大 1280px
             obj.put("width", width);
             obj.put("auto_color", false);
diff --git a/gc-user/src/main/java/com/xzx/gc/user/service/PosterService.java b/gc-user/src/main/java/com/xzx/gc/user/service/PosterService.java
index dbbad20..0563cc6 100644
--- a/gc-user/src/main/java/com/xzx/gc/user/service/PosterService.java
+++ b/gc-user/src/main/java/com/xzx/gc/user/service/PosterService.java
@@ -36,8 +36,8 @@
         String userId=userInfo.getUserId();
         String imageName="/user_" + userId + "_poster.jpg";
         //二维码图名称
-        String imgName="/user_" + userId + "_acode.jpg";
-        String s1 = wxUtil.generateAcode("poster=" + userInfo.getMobilePhone(), "pages/login/login", imgName, "800px");
+        String imgName="/user_" + userId + "_acode_1.jpg";
+        String s1 = wxUtil.generateAcode("poster=" + userInfo.getMobilePhone() +"&chiefId=" + userInfo.getUserId(), "pages/login/login", imgName, "800px", 1);
         if(StrUtil.isBlank(s1)){
             throw new RestException("生成分享海报失败");
         }
diff --git a/gc-user/src/test/java/SpringTest.java b/gc-user/src/test/java/SpringTest.java
index 1412762..4bfb511 100644
--- a/gc-user/src/test/java/SpringTest.java
+++ b/gc-user/src/test/java/SpringTest.java
@@ -1,8 +1,11 @@
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.text.StrFormatter;
 import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
 import cn.hutool.json.JSONUtil;
 import com.xzx.gc.GcUserApplication;
 import com.xzx.gc.common.Result;
@@ -10,9 +13,11 @@
 import com.xzx.gc.common.constant.Constants;
 import com.xzx.gc.common.utils.RedisUtil;
 import com.xzx.gc.common.utils.gdmap.GdTraceUtil;
+import com.xzx.gc.common.utils.wxpay.WxUtil;
 import com.xzx.gc.entity.*;
 import com.xzx.gc.user.mapper.UserBatchMapper;
 import com.xzx.gc.user.service.*;
+import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,6 +25,8 @@
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.io.File;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
@@ -28,9 +35,10 @@
 import java.util.stream.Collectors;
 
 
+@Slf4j
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = {GcUserApplication.class})
-@ActiveProfiles(profiles = {"temp"})
+@ActiveProfiles(profiles = {"xc"})
 public class SpringTest {
 
 
@@ -211,6 +219,42 @@
     }
 
 
+    @Autowired
+    private WxUtil wxUtil;
+
+    @Test
+    public void acodeTest() {
+
+        String path = "pages/login/login?poster=18390984915&chiefId=YH1417670707298828288";
+        String imgPath = "/Users/helius/Desktop/YH1417670707298828288_acode.jpg";
+
+        String url = StrFormatter.format("https://api.weixin.qq.com/wxa/getwxacode?access_token={}", wxUtil.getAccessToken());
+        cn.hutool.json.JSONObject obj = JSONUtil.createObj();
+        obj.put("path", path);
+        //最小 280px,最大 1280px
+        obj.put("width", "800px");
+        obj.put("auto_color", false);
+        cn.hutool.json.JSONObject obj2 = JSONUtil.createObj();
+        obj2.put("r", 0);
+        obj2.put("g", 0);
+        obj2.put("b", 0);
+        obj.put("line_color", obj2);
+        //是否需要透明底色,为 true 时,生成透明底色的小程序码
+        obj.put("is_hyaline", false);
+        try {
+            InputStream inputStream = HttpRequest.post(url).body(obj.toString(), "application/json").execute().bodyStream();
+            File file = new File(imgPath);
+            FileUtil.writeFromStream(inputStream, file);
+            long uploadUrl = FileUtil.size(file);
+            //小于10kb重新生成
+            if(uploadUrl<= Constants.MIN_FILE_SIZE){
+                log.error("生成微信小程序码失败:图片大小异常:{}",uploadUrl);
+            }
+        } catch (Exception e) {
+            log.error("生成微信小程序码失败",e);
+        }
+
+    }
 
 
 }
diff --git a/gc-user/src/test/java/ThreadTest.java b/gc-user/src/test/java/ThreadTest.java
index fa97a56..4662cf0 100644
--- a/gc-user/src/test/java/ThreadTest.java
+++ b/gc-user/src/test/java/ThreadTest.java
@@ -1,8 +1,17 @@
+import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.lang.Console;
+import cn.hutool.core.text.StrFormatter;
 import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.NumberUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONUtil;
+import com.xzx.gc.common.constant.Constants;
+import com.xzx.gc.common.utils.wxpay.WxUtil;
 import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 
+import java.io.File;
+import java.io.InputStream;
 import java.util.concurrent.*;
 
 public class ThreadTest {

--
Gitblit v1.9.1