Browse Source

二维码

guoshuai 1 week ago
parent
commit
7bd3865ec4

+ 50 - 22
src/main/java/com/qmrb/system/controller/CaSignController.java

@@ -2,6 +2,7 @@ package com.qmrb.system.controller;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
@@ -138,6 +139,9 @@ public class CaSignController {
 
     @Autowired
     private  SysUserService userService;
+    
+    @Autowired
+    private  UserService iUserService;
 
     @Autowired
     private ITplContentMyService tplContentMyService;
@@ -2367,13 +2371,17 @@ public class CaSignController {
         }
         return null;
     }
-    
+
+
+
+    @Autowired
+    private ToolWxConfigService toolWxConfigService;
     
     /**
      * 获取优惠券的二维码
      * @return
      */
-    @GetMapping("getCouponQrcode")
+    // @GetMapping("getCouponQrcode")
     public Result<?> getCouponQrcode(){
     // public ResponseEntity<byte []>  getCouponQrcode(){
         if(SecurityUtils.getUserId() == null){
@@ -2389,26 +2397,6 @@ public class CaSignController {
         Map<String,Object> map = new HashMap<>();
 //        String signUrl = "";
         try {
-//            String token = OkHttpUtils.getTokenNew();
-//            signUrl = CaConstants.qrCodeDomain + "/goto.html?cardId=" + social_no + "&access_token=" + token;
-//            log.info(signUrl);
-//            String signUrl = (String)redisTemplate.opsForValue().get(deviceNo);
-
-            // 生成token
-            // List<SimpleGrantedAuthority> roleList = userService.getUserAuthInfo(contract.getUsername()).getRoles()
-            //         .stream().map(role -> new SimpleGrantedAuthority("ROLE_" + role)).toList();
-            // UsernamePasswordAuthenticationToken authenticationToken =
-            //         new UsernamePasswordAuthenticationToken(contract.getUsername(), contract.getPassword(),
-            //                 roleList);
-            // UserAuthInfo userAuthInfo = userService.getUserAuthInfo(contract.getUsername());
-            // SysUserDetails sysUserDetails = new SysUserDetails(userAuthInfo);
-            // authenticationToken.setDetails(sysUserDetails);
-            // SecurityContextHolder.getContext().setAuthentication(authenticationToken);
-            // String accessToken = jwtTokenManager.createToken(authenticationToken);
-            // 保存token至redis中
-            // String contractId =  SecurityConstants.CONTRACT_TOKEN_CACHE_PREFIX + user.getId() + UUID.randomUUID();
-            
-            // String encrypt = AesUtils.encrypt(contract.getId().toString(), CaConstants.serverSecret);
             UUID uuid = UUID.randomUUID();
             redisTemplate.opsForValue().set(uuid.toString(),contract.getId(),overDue,TimeUnit.SECONDS);
             // String url = contract.getQrcodeLoginUrl() + "?tokenId=" + tokenId;
@@ -2429,6 +2417,46 @@ public class CaSignController {
         }
         return null;
     }
+    
+    /**
+     * 获取优惠券的二维码
+     * @return
+     */
+    @GetMapping("getCouponQrcode")
+    public Result<?> getCouponQrcode2(){
+        if(SecurityUtils.getUserId() == null){
+            return null;
+        }
+        
+        SysUser user = userService.getById(SecurityUtils.getUserId());
+        // 获取到协议的二维码登录地址
+        Contract contract = contractService.getById(user.getContractId());
+        if(contract == null){
+            return null;
+        }
+        
+        Map<String,Object> map = new HashMap<>();
+//        String signUrl = "";
+        try {
+            UUID uuid = UUID.randomUUID();
+            String key = RandomUtil.randomString(10);
+            String base64 = iUserService.getCouponQRCode(toolWxConfigService.findConf(),key);
+            redisTemplate.opsForValue().set(key,contract.getId(),overDue,TimeUnit.SECONDS);
+
+            // String url = contract.getQrcodeLoginUrl() + "?contractId=" + uuid;
+            //
+            // String base64 = QRCodeUtil.createCodeToOutputStream(url);
+
+            map.put("data",base64);
+            map.put("contractName",contract.getContractName());
+            
+            // return new ResponseEntity<>(imageBytes, headers, HttpStatus.OK);
+            return Result.success(map);
+        }catch (Exception e){
+            log.error(e.getMessage(),e);
+        }
+        return null;
+    }
 
 
     /**

+ 4 - 0
src/main/java/com/qmrb/system/service/UserService.java

@@ -8,6 +8,8 @@ import com.qmrb.system.pojo.entity.ToolWxConfig;
 import com.qmrb.system.pojo.vo.UserInfo;
 import com.qmrb.system.pojo.vo.WxLoginVO;
 
+import java.util.UUID;
+
 
 /**
  * <p>
@@ -33,4 +35,6 @@ public interface UserService extends IService<Order> {
     public String getWxAccessToken(ToolWxConfig wxConfig, String code);
 
     public String getUserPhoneNumber(ToolWxConfig wxConfig, String code);
+
+    String getCouponQRCode(ToolWxConfig conf, String key);
 }

+ 4 - 0
src/main/java/com/qmrb/system/service/impl/SysUserServiceImpl.java

@@ -364,6 +364,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         if(StrUtil.isNotBlank(user.getMobile())){
             entity.setMobile(user.getMobile());
         }
+        
+        if(StrUtil.isNotBlank(user.getNickname())){
+            entity.setNickname(user.getNickname());
+        }
 
        
 

+ 121 - 0
src/main/java/com/qmrb/system/service/impl/UserServiceImpl.java

@@ -14,14 +14,25 @@ import com.qmrb.system.pojo.vo.UserInfo;
 import com.qmrb.system.pojo.vo.WxLoginVO;
 import com.qmrb.system.service.ToolWxConfigService;
 import com.qmrb.system.service.UserService;
+import com.qmrb.system.utils.QRCodeUtil;
 import com.qmrb.system.utils.WxPayUtil;
 import com.qmrb.system.wxpayback.Enum.WxApiType;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.imageio.ImageIO;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.net.URL;
+import java.net.URLConnection;
+
 import java.util.HashMap;
 import java.util.Map;
+import java.util.UUID;
 
 /**
  * <p>
@@ -71,6 +82,20 @@ public class UserServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         String access_token = jsonObject.getStr("access_token");
         return access_token;
     }
+    
+    public String getWxAccessToken(ToolWxConfig wxConfig){
+        //获取当前的openid
+        Map hashMap = new HashMap();
+        hashMap.put("appid", wxConfig.getAppId());
+        hashMap.put("secret", wxConfig.getAppSecret());
+//        hashMap.put("js_code", code);
+        hashMap.put("grant_type", "client_credential");
+        String json = HttpUtil.get(WxApiType.WX_TOKEN.getValue(), hashMap);
+        JSONObject jsonObject = JSONUtil.parseObj(json);
+        log.info("json:{}",jsonObject);
+        String access_token = jsonObject.getStr("access_token");
+        return access_token;
+    }
 
     public String getUserPhoneNumber(ToolWxConfig wxConfig, String code){
         String token =  getWxAccessToken(wxConfig, code);
@@ -91,6 +116,102 @@ public class UserServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return mobile;
     }
 
+    @Override
+    public String getCouponQRCode(ToolWxConfig conf, String key) {
+        String token =  getWxAccessToken(conf);
+        //获取当前的openid
+        // Map hashMap = new HashMap();
+        // hashMap.put("page", "pages/index/index");
+        // hashMap.put("scene", "contractId=" + key);
+        // hashMap.put("env_version", "develop");
+        // // hashMap.put("width", 430);
+        // // hashMap.put("auto_color", false);
+        // // hashMap.put("line_color", "{\"r\":\"0\",\"g\":\"0\",\"b\":\"0\"}");
+        // // hashMap.put("is_hyaline", false);
+        // String url = WxApiType.GET_QRCODE_URL.getValue()+"?access_token="+token;
+        // String json = HttpUtil.post(url, JSONUtil.toJsonStr(hashMap));
+        // log.info("获取微信二维码:{}",json);
+        // byte[] bytes = json.getBytes();
+        //
+        //
+        // String data = Base64.getEncoder().encodeToString(bytes);
+        // return data;
+
+
+
+
+        Map<String, Object> resultObj = new HashMap();
+        PrintWriter out = null;
+        //BufferedReader in = null;
+        InputStream in = null;
+        String result = "";
+        try {
+            URL realUrl = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+token);
+            // 打开和URL之间的连接
+            URLConnection conn = realUrl.openConnection();
+            // 设置通用的请求属性
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent",
+                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            // 发送POST请求必须设置如下两行
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            // 获取URLConnection对象对应的输出流
+            out = new PrintWriter(conn.getOutputStream());
+            // 发送请求参数
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("scene", "contractId=" + key); //参数自定义
+            jsonObject.put("page","pages/index/index");//要生成小程序码的链接
+            jsonObject.put("width",300);
+            jsonObject.put("env_version", "develop");
+            out.print(jsonObject);
+            // flush输出流的缓冲
+            out.flush();
+            in = conn.getInputStream();
+            byte[] data = null;
+            // 读取图片字节数组
+            try {
+                ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
+                byte[] buff = new byte[100];
+                int rc = 0;
+                while ((rc = in.read(buff, 0, 100)) > 0) {
+                    swapStream.write(buff, 0, rc);
+                }
+                data = swapStream.toByteArray();
+            } catch (IOException e) {
+                log.error("获取领券二维码出错",e);
+            } finally {
+                if (in != null) {
+                    try {
+                        in.close();
+                    } catch (IOException e) {
+                        log.error("获取领券二维码出错",e);
+                    }
+                }
+            }
+            return new String(Base64.encodeBase64(data));
+        } catch (Exception e) {
+            System.out.println("发送 POST 请求出现异常!" + e);
+            log.error("发送 POST 请求出现异常!",e);
+        }
+        // 使用finally块来关闭输出流、输入流
+        finally {
+            try {
+                if (out != null) {
+                    out.close();
+                }
+                if (in != null) {
+                    in.close();
+                }
+            } catch (IOException ex) {
+                log.error("关闭输出流、输入流!",ex);
+            }
+        }
+//            resultObj.put("result",result);
+        return result;
+    }
+
     public UserInfo getMyInfo(UserParam userParam){
         UserInfo userInfo = new UserInfo();
         userInfo.setId("1");

+ 1 - 0
src/main/java/com/qmrb/system/wxpayback/Enum/WxApiType.java

@@ -10,6 +10,7 @@ public enum WxApiType {
     WX_LOGIN_URL ("https://api.weixin.qq.com/sns/jscode2session"),
     WX_TOKEN ("https://api.weixin.qq.com/cgi-bin/token"),
     GET_MOBILE_URL( "https://api.weixin.qq.com/wxa/business/getuserphonenumber"),
+    GET_QRCODE_URL( "https://api.weixin.qq.com/wxa/getwxacodeunlimit"),
 
 
     /** 小程序 下单API */