Prechádzať zdrojové kódy

fix:获取公众号二维码测试

wrj 1 rok pred
rodič
commit
97d0e7dd07

+ 24 - 30
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/WeChatController.java

@@ -7,6 +7,7 @@ import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ylx.common.annotation.Log;
 import com.ylx.common.constant.Constants;
+import com.ylx.common.core.controller.BaseController;
 import com.ylx.common.core.domain.R;
 import com.ylx.common.core.domain.model.WxLoginUser;
 import com.ylx.common.enums.BusinessType;
@@ -41,16 +42,14 @@ import static com.ylx.massage.utils.OtherUtil.verification;
 @RestController
 @Api(tags = {"微信公众号"})
 @RequestMapping("/weChat")
-public class WeChatController {
+public class WeChatController extends BaseController {
 
     private final static String TOKEN = "abcd1234";
     private final static String ENCODING = "UTF-8";
     private final static String ACCESS_TOKEN = "access_token";
     private final static String REFRESH_TOKEN = "refresh_token";
     private final static String OPEN_ID = "openid";
-    private final static String NICK_NAME = "nickname";
-    private final static String SEX = "sex";
-    private final static String HEAD_IMG_URL = "headimgurl";
+
     /**
      * 二维码保存路径
      */
@@ -159,13 +158,6 @@ public class WeChatController {
         String accessToken = result.get(ACCESS_TOKEN).toString();
         String refreshToken = result.get(REFRESH_TOKEN).toString();
         String openid = result.get(OPEN_ID).toString();
-//      WeChatUser user = weChatUserService.getOne(new LambdaUpdateWrapper<WeChatUser>().eq(WeChatUser::getOpenid, openid));
-
-        // 如果用户历史上已经完成授权
-//        if (user != null) {
-//            log.info("该用户已授权");
-//            return "<h1>你已经授权过啦~</h1>";
-//        }
 
         // 如果用户是第一次进行微信公众号授权
         // 进行这一步时用户应点击了同意授权按钮
@@ -181,6 +173,7 @@ public class WeChatController {
             user.setcOpenid(openid);
             user.setcNickName(jsonObject.get("nickname").toString());
             user.setcIcon(jsonObject.get("headimgurl").toString());
+            user.setcSessionKey(refreshToken);
 //            user.setcPhone(phoneNumber);
             wxUserService.save(user);
             //异步 添加新人优惠卷
@@ -203,37 +196,38 @@ public class WeChatController {
         return R.ok(wxUser);
     }
 
+
+
     /**
      * 刷新token,微信提供的token是有限时间的,但是对于财务报销系统仅需授权一次的情况下一般不需要进行更新
      *
      * @return accessToken
      */
     @GetMapping("/refreshToken")
-    public R<String> refreshToken() {
-        // TODO 这里需要绑定系统真实的用户id
-//        Long userId = StpUtil.getLoginIdAsLong();
-        //Long userId = 1L;
-
-//        WeChatUser weChatUser = weChatUserService.getOne(new LambdaUpdateWrapper<WeChatUser>().eq(WeChatUser::getUserId, userId));
-//        if (weChatUser == null){
-//            return Result.error("error");
-//        }
+    public String refreshToken() {
 
+        WxLoginUser wxLoginUser = this.getWxLoginUser();
+        TWxUser user = wxUserService.getById(wxLoginUser.getId());
+        if (user == null){
+            throw new RuntimeException("用户不存在");
+        }
         // 发送get请求获取 RefreshToken
-        Map<?, ?> result = weChatUtil.refreshToken("");//weChatUser.getRefreshToken()
+        Map<?, ?> result = weChatUtil.refreshToken(user.getcSessionKey());
         String accessToken = result.get(ACCESS_TOKEN).toString();
         String refreshToken = result.get(REFRESH_TOKEN).toString();
-
         // 更新用户信息
-//        WeChatUser weChatUserUpdate = new WeChatUser();
-//        weChatUserUpdate.setId(weChatUser.getId());
-//        weChatUserUpdate.setAccessToken(accessToken);
-//        weChatUserUpdate.setRefreshToken(refreshToken);
-//        weChatUserUpdate.setUpdateDate(LocalDateTime.now());
-
+        user.setcSessionKey(refreshToken);
         // 存储数据库
-//        weChatUserService.updateById(weChatUserUpdate);
+        wxUserService.updateById(user);
+        return accessToken;
+    }
+    @ApiOperation("获取公众号二维码")
+    @RequestMapping(value = "getwxQrCode", method = RequestMethod.GET)
+    public String getWxQrCodeUtil(@RequestParam String openId) {
+
+        String token = this.refreshToken();
+        Map<?, ?> url = weChatUtil.getUrl(token, openId);
+        return url.toString();
 
-        return R.ok(accessToken);
     }
 }

+ 1 - 1
nightFragrance-framework/src/main/java/com/ylx/framework/config/SecurityConfig.java

@@ -114,7 +114,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/login", "/register", "/captchaImage","/wx/login",
                         "/api/lbt/v1/getAll", "/api/js/v1/select", "/api/xiangmu/v1/wx/getAll", "/api/order/v1/getStatus",
                         "/api/xiangmu/v1/getByid", "/api/js/v1/wx/getByid","/api/js/v1/wx/select", "/api/recharge/v1/test",
-                        "/wx/pay/payNotify","/wx/pay/refundNotify","/weChat/*","/weChat/getCode").permitAll()
+                        "/wx/pay/payNotify","/wx/pay/refundNotify","/weChat/getAccessToken","/weChat/getCode","/weChat/verifyToken").permitAll()
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.txt","/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

+ 25 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/utils/WeChatUtil.java

@@ -4,15 +4,18 @@ package com.ylx.massage.utils;
  * @author jianlong
  * @date 2024-06-04 10:13
  */
+
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.ylx.common.config.WechatAccountConfig;
 import com.ylx.common.exception.ServiceException;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
+import java.util.HashMap;
 import java.util.Map;
 
 
@@ -22,6 +25,7 @@ import java.util.Map;
  *
  */
 @Component
+@Slf4j
 public class WeChatUtil {
 
     private final static String ERROR_CODE = "errcode";
@@ -111,4 +115,25 @@ public class WeChatUtil {
                 .append("&lang=zh_CN");
         return HttpUtil.get(url.toString());
     }
+
+
+    /**
+     * 获取微信AccessToken
+     *
+     * @param code 用户code
+     * @return 返回包含微信AccessToken的Map
+     */
+    public Map<?, ?> getUrl(String token,String openId) {
+
+        String url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token="+token;
+
+        String param = "{\"action_name\": \"QR_LIMIT_STR_SCENE\",\"action_info\": {\"scene\": {\"scene_str\": \"" + openId + "\"}}}";
+
+        String rs = HttpUtil.post(url, param);
+        Map<?, ?> map = JSONObject.parseObject(rs, Map.class);
+
+        log.info("获取二维码成功{}",map);
+        return map;
+
+    }
 }