gc-core/src/main/java/com/xzx/gc/common/utils/wxpay/WxUtil.java | ●●●●● patch | view | raw | blame | history | |
gc-user/src/main/java/com/xzx/gc/user/service/PosterService.java | ●●●●● patch | view | raw | blame | history | |
gc-user/src/test/java/SpringTest.java | ●●●●● patch | view | raw | blame | history | |
gc-user/src/test/java/ThreadTest.java | ●●●●● patch | view | raw | blame | history |
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); 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("生成分享海报失败"); } 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); } } } 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 {