浏览代码

获取微信二维码

hmp 4 年之前
父节点
当前提交
435b875757

+ 4 - 0
pom.xml

@@ -247,6 +247,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-undertow</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 10 - 3
src/main/java/org/springblade/agent/listener/AgentFeeHandle.java

@@ -20,6 +20,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.util.Optional;
 
 /**
  * @author: lianghanqiang
@@ -38,12 +39,17 @@ public class AgentFeeHandle {
 
 	@EventListener
 	@Async
-	@Transactional
 	public void addAgentFee(BillSuccessEvent billSuccessEvent){
 		//获取付款流水号数据
 		SuccessParams successParams = billSuccessEvent.getSuccessParams();
 		Bills bills = successParams.getBills();
 
+		//总的手续费
+		BigDecimal totalFee = Optional.ofNullable(bills.getFee()).orElse(BigDecimal.ZERO).add(bills.getPointFee());
+		if (totalFee.compareTo(BigDecimal.ZERO) == 0) {
+			//总手续费等于0不插入收益流水
+			return;
+		}
 		//查询是否有城市代理商
 		Long receiveId = bills.getReceiveId();
 
@@ -64,6 +70,7 @@ public class AgentFeeHandle {
 
 		//判断是否有渠道合作伙伴
 		Long agenter = shop.getAgenter();
+
 		if(agenter!=null){
 			//创建代理人费用
 			AgentBills agentBills = new AgentBills();
@@ -76,7 +83,7 @@ public class AgentFeeHandle {
 			agentBills.setCreateTime(now);
 
 			//计算代理人和平台收益费用各占50%
-			BigDecimal fee = bills.getFee().add(bills.getPointFee()).multiply(new BigDecimal(BillsConstant.CHANNEL_PARTNERS_AGENT_BILLS_FREE));
+			BigDecimal fee = totalFee.multiply(new BigDecimal(BillsConstant.CHANNEL_PARTNERS_AGENT_BILLS_FREE));
 			agentBills.setFee(fee);
 			platformBills.setFee(fee);
 
@@ -85,7 +92,7 @@ public class AgentFeeHandle {
 			Assert.isTrue(save,"添加代理人收益信息错误");
 		}else{
 			//平台全收益(收取的服务费+积分交易费)
-			platformBills.setFee(bills.getFee().add(bills.getPointFee()));
+			platformBills.setFee(totalFee);
 		}
 
 		boolean save = iPlatformBillsService.save(platformBills);

+ 9 - 1
src/main/java/org/springblade/wx/constant/WeChatApi.java

@@ -21,7 +21,15 @@ public enum WeChatApi {
 	/**
 	 * 获取用户AccessToken
 	 * */
-	fetchAccessToken("https://api.weixin.qq.com/cgi-bin/token","GET");
+	fetchAccessToken("https://api.weixin.qq.com/cgi-bin/token","GET"),
+
+
+	/**
+	 * 获取小程序码api
+	 */
+	createWxaQrCode("https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=", "GET"),
+
+	;
 
 	String api;
 	String requestMethods;

+ 82 - 4
src/main/java/org/springblade/wx/controller/WxAppController.java

@@ -1,5 +1,6 @@
 package org.springblade.wx.controller;
 
+import cn.hutool.core.lang.Assert;
 import cn.hutool.crypto.Mode;
 import cn.hutool.crypto.Padding;
 import cn.hutool.crypto.symmetric.AES;
@@ -10,19 +11,39 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.modules.resource.builder.oss.OssBuilder;
 import org.springblade.wx.config.ConfigForClient;
+import org.springblade.wx.constant.MiniProgramType;
+import org.springblade.wx.constant.WeChatApi;
 import org.springblade.wx.dto.DataDto;
 import org.springblade.wx.dto.JumpWxa;
 import org.springblade.wx.dto.SchemeDto;
+import org.springblade.wx.service.WeChatService;
 import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.multipart.MultipartFile;
+import sun.misc.BASE64Decoder;
 
-import javax.annotation.Resource;
-import java.util.Base64;
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.text.SimpleDateFormat;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @author cy-computer
@@ -31,11 +52,18 @@ import java.util.concurrent.TimeUnit;
 @Slf4j
 @RequestMapping("/wx-app")
 @Api(tags = "微信小程序登录模块")
+@AllArgsConstructor
 public class WxAppController {
-	@Resource
+
+	/**
+	 * 对象存储构建类
+	 */
+	private final OssBuilder ossBuilder;
+
 	private ConfigForClient configForClient;
-	@Resource
 	private StringRedisTemplate stringRedisTemplate;
+	private WeChatService weChatService;
+
 
 	private static final String ACCESS_TOKEN = "access_token:";
 
@@ -105,4 +133,54 @@ public class WxAppController {
 		return R.data(jsonObject);
 	}
 
+	@ApiOperation("获取小程序码")
+	@GetMapping("/createWxaQrCode")
+	public R createWxaQrCode(String path,@RequestParam String type) throws IOException {
+		//根据类型获取accessToken
+		String accessToken = weChatService.fetchAccessToken(MiniProgramType.valueOf(type));
+		Assert.notNull(accessToken, "获取accessToken失败");
+
+		String url = WeChatApi.createWxaQrCode.getApi() + accessToken;
+		RestTemplate rest = new RestTemplate();
+
+
+		Map<String,Object> param = new HashMap<>(2);
+		param.put("path", path);
+		param.put("width", 430);
+
+		MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
+		HttpEntity requestEntity = new HttpEntity(param, headers);
+		ResponseEntity<byte[]> entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);
+		log.info("调用小程序生成微信永久二维码URL接口返回结果:" + entity.getBody());
+
+		byte[] result = entity.getBody();
+		BladeFile bladeFile = this.uploadImage(result);
+		return R.data(bladeFile);
+	}
+
+	private BladeFile uploadImage(byte[] bytes) throws IOException {
+		BladeFile bladeFile = new BladeFile();
+
+		InputStream inputStream = null;
+		try {
+			inputStream = new ByteArrayInputStream(bytes);
+			MultipartFile multipartFile =new MockMultipartFile("file", "shopQrCode.jpg", "text/plain", inputStream);
+			//上传到对象存储
+			bladeFile = ossBuilder.template().putFile(multipartFile.getOriginalFilename(), multipartFile.getInputStream());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}finally {
+			if (inputStream != null) {
+				inputStream.close();
+			}
+		}
+		return bladeFile;
+	}
+
+	private String replaceEnter(String str){
+		String reg ="[\n-\r]";
+		Pattern p = Pattern.compile(reg);
+		Matcher m = p.matcher(str);
+		return m.replaceAll("");
+	}
 }

+ 2 - 1
src/main/java/org/springblade/wx/service/WeChatService.java

@@ -87,7 +87,8 @@ public class WeChatService {
 				return SpringUtil.getBean(ConfigForShop.class);
 			case CLIENT:
 				return SpringUtil.getBean(ConfigForClient.class);
+			default:
+				return null;
 		}
-		return null;
 	}
 }

+ 4 - 0
src/main/resources/wxConfig.properties

@@ -17,3 +17,7 @@
 #联兑通客户端
 wx.client.appId = wx9ad53e8c83ae1a51
 wx.client.appSecret = fe94990e1f90f65df8bb47e530697906
+
+
+wx.shop.appId = wx2db9c41e85d5a4fc
+wx.shop.appSecret = 89a59cc73a3d77ac1e636ced0531cd08

+ 2 - 2
src/test/java/org/springblade/test/BladeTest.java

@@ -10,8 +10,8 @@ import org.springblade.core.test.BladeSpringRunner;
  *
  * @author Chill
  */
-@RunWith(BladeSpringRunner.class)
-@BladeBootTest(appName = "blade-runner", profile = "dev")
+//@RunWith(BladeSpringRunner.class)
+//@BladeBootTest(appName = "blade-runner", profile = "dev")
 public class BladeTest {
 
 	@Test