Commit 4c05bd340ef2ec1b42ebfac427fc05df71f32634

Authored by puhui999
1 parent 4a0ad205

fix: 获得微信小程序码(base64 image)

yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/AppSocialUserController.java
... ... @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.member.controller.app.social.vo.AppSocialUserBind
8 8 import cn.iocoder.yudao.module.member.controller.app.social.vo.AppSocialUserRespVO;
9 9 import cn.iocoder.yudao.module.member.controller.app.social.vo.AppSocialUserUnbindReqVO;
10 10 import cn.iocoder.yudao.module.member.controller.app.social.vo.AppSocialWxQrcodeReqVO;
  11 +import cn.iocoder.yudao.module.system.api.social.SocialClientApi;
11 12 import cn.iocoder.yudao.module.system.api.social.SocialUserApi;
12 13 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
13 14 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
... ... @@ -34,6 +35,8 @@ public class AppSocialUserController {
34 35  
35 36 @Resource
36 37 private SocialUserApi socialUserApi;
  38 + @Resource
  39 + private SocialClientApi socialClientApi;
37 40  
38 41 @PostMapping("/bind")
39 42 @Operation(summary = "社交绑定,使用 code 授权码")
... ... @@ -63,14 +66,12 @@ public class AppSocialUserController {
63 66 return success(BeanUtils.toBean(socialUser, AppSocialUserRespVO.class));
64 67 }
65 68  
66   - // TODO @puhui999:是不是 url 叫 wxa-qrcode?然后相关的方法,都做下调整哈;因为是微信小程序的二维码
67   - @PostMapping("/wxacode")
68   - @Operation(summary = "获得微信小程序码")
69   - @PreAuthenticated // TODO @puhui999:可能不需要登录
  69 + @PostMapping("/wxa-qrcode")
  70 + @Operation(summary = "获得微信小程序码(base64 image)")
70 71 public CommonResult<String> getWxQrcode(@RequestBody @Valid AppSocialWxQrcodeReqVO reqVO) {
71   - byte[] wxQrcode = socialUserApi.getWxQrcode(BeanUtils.toBean(reqVO, SocialWxQrcodeReqDTO.class).setUserId(getLoginUserId())
72   - .setUserType(UserTypeEnum.MEMBER.getValue()).setSocialType(reqVO.getType()));
73   - return success(Base64.getEncoder().encodeToString(wxQrcode));
  72 + byte[] wxQrcode = socialClientApi.getWxaQrcode(BeanUtils.toBean(reqVO, SocialWxQrcodeReqDTO.class)
  73 + .setUserId(getLoginUserId()).setUserType(UserTypeEnum.MEMBER.getValue()).setSocialType(reqVO.getType()));
  74 + return success("data:image/png;base64," + Base64.getEncoder().encodeToString(wxQrcode));
74 75 }
75 76  
76 77 }
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/social/vo/AppSocialWxQrcodeReqVO.java
... ... @@ -12,8 +12,9 @@ import lombok.Data;
12 12 @Data
13 13 public class AppSocialWxQrcodeReqVO {
14 14  
15   - // TODO @puhui999:这个后续不用前端传递,应该是后端搞的
16   - private static String SCENE = "1011"; // 默认场景值 1011 扫描二维码
  15 + // TODO @puhui999:这个后续不用前端传递,应该是后端搞的。
  16 + // 页面路径不能携带参数(参数请放在scene字段里)
  17 + private static String SCENE = ""; // 默认场景值 1011 扫描二维码
17 18 // TODO @puhui999:这个默认是不是 release 哈?
18 19 private static String ENV_VERSION = "develop"; // 小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"
19 20 // TODO @puhui999:这个去掉;因为本身就是 430 啦;
... ... @@ -28,6 +29,10 @@ public class AppSocialWxQrcodeReqVO {
28 29 @Schema(description = "场景值", requiredMode = Schema.RequiredMode.REQUIRED, example = "1001")
29 30 private String scene = SCENE;
30 31  
  32 + /**
  33 + * 默认是主页,页面 page,例如 pages/index/index,根路径前不要填加 /,不能携带参数(参数请放在scene字段里),
  34 + * 如果不填写这个字段,默认跳主页面。scancode_time为系统保留参数,不允许配置
  35 + */
31 36 @Schema(description = "页面路径", requiredMode = Schema.RequiredMode.REQUIRED, example = "pages/goods/index")
32 37 @NotEmpty(message = "页面路径不能为空")
33 38 private String path;
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApi.java
... ... @@ -2,7 +2,9 @@ package cn.iocoder.yudao.module.system.api.social;
2 2  
3 3 import cn.iocoder.yudao.module.system.api.social.dto.SocialWxJsapiSignatureRespDTO;
4 4 import cn.iocoder.yudao.module.system.api.social.dto.SocialWxPhoneNumberInfoRespDTO;
  5 +import cn.iocoder.yudao.module.system.api.social.dto.SocialWxQrcodeReqDTO;
5 6 import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum;
  7 +import jakarta.validation.Valid;
6 8  
7 9 /**
8 10 * 社交应用的 API 接口
... ... @@ -39,4 +41,12 @@ public interface SocialClientApi {
39 41 */
40 42 SocialWxPhoneNumberInfoRespDTO getWxMaPhoneNumberInfo(Integer userType, String phoneCode);
41 43  
  44 + /**
  45 + * 获得小程序二维码
  46 + *
  47 + * @param reqVO 请求信息
  48 + * @return 小程序二维码
  49 + */
  50 + byte[] getWxaQrcode(@Valid SocialWxQrcodeReqDTO reqVO);
  51 +
42 52 }
... ...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApi.java
... ... @@ -52,12 +52,4 @@ public interface SocialUserApi {
52 52 */
53 53 SocialUserRespDTO getSocialUserByCode(Integer userType, Integer socialType, String code, String state);
54 54  
55   - /**
56   - * 获得小程序二维码
57   - *
58   - * @param reqVO 请求信息
59   - * @return 小程序二维码
60   - */
61   - byte[] getWxQrcode(@Valid SocialWxQrcodeReqDTO reqVO);
62   -
63 55 }
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialClientApiImpl.java
... ... @@ -4,6 +4,7 @@ import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
4 4 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
5 5 import cn.iocoder.yudao.module.system.api.social.dto.SocialWxJsapiSignatureRespDTO;
6 6 import cn.iocoder.yudao.module.system.api.social.dto.SocialWxPhoneNumberInfoRespDTO;
  7 +import cn.iocoder.yudao.module.system.api.social.dto.SocialWxQrcodeReqDTO;
7 8 import cn.iocoder.yudao.module.system.service.social.SocialClientService;
8 9 import me.chanjar.weixin.common.bean.WxJsapiSignature;
9 10 import org.springframework.stereotype.Service;
... ... @@ -40,4 +41,9 @@ public class SocialClientApiImpl implements SocialClientApi {
40 41 return BeanUtils.toBean(info, SocialWxPhoneNumberInfoRespDTO.class);
41 42 }
42 43  
  44 + @Override
  45 + public byte[] getWxaQrcode(SocialWxQrcodeReqDTO reqVO) {
  46 + return socialClientService.getWxaQrcode(reqVO);
  47 + }
  48 +
43 49 }
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/social/SocialUserApiImpl.java
... ... @@ -43,10 +43,4 @@ public class SocialUserApiImpl implements SocialUserApi {
43 43 return socialUserService.getSocialUserByCode(userType, socialType, code, state);
44 44 }
45 45  
46   - // TODO @puhui999:貌似搞到 SocialClientApiImpl 更合适,二维码和用户关系不大;这样 socialUserService 也不用绕一次了
47   - @Override
48   - public byte[] getWxQrcode(SocialWxQrcodeReqDTO reqVO) {
49   - return socialUserService.getWxQrcode(reqVO);
50   - }
51   -
52 46 }
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientService.java
... ... @@ -67,7 +67,7 @@ public interface SocialClientService {
67 67 * @param reqVO 请求信息
68 68 * @return 小程序二维码
69 69 */
70   - byte[] getWxQrcode(SocialWxQrcodeReqDTO reqVO);
  70 + byte[] getWxaQrcode(SocialWxQrcodeReqDTO reqVO);
71 71  
72 72 // =================== 客户端管理 ===================
73 73  
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java
... ... @@ -229,7 +229,7 @@ public class SocialClientServiceImpl implements SocialClientService {
229 229 }
230 230  
231 231 @Override
232   - public byte[] getWxQrcode(SocialWxQrcodeReqDTO reqVO) {
  232 + public byte[] getWxaQrcode(SocialWxQrcodeReqDTO reqVO) {
233 233 WxMaService service = getWxMaService(reqVO.getUserType());
234 234 try {
235 235 return service.getQrcodeService().createWxaCodeUnlimitBytes(reqVO.getScene(), reqVO.getPath(),
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserService.java
... ... @@ -87,12 +87,4 @@ public interface SocialUserService {
87 87 */
88 88 PageResult<SocialUserDO> getSocialUserPage(SocialUserPageReqVO pageReqVO);
89 89  
90   - /**
91   - * 获得小程序二维码
92   - *
93   - * @param reqVO 请求信息
94   - * @return 小程序二维码
95   - */
96   - byte[] getWxQrcode(SocialWxQrcodeReqDTO reqVO);
97   -
98 90 }
... ...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImpl.java
... ... @@ -171,9 +171,4 @@ public class SocialUserServiceImpl implements SocialUserService {
171 171 return socialUserMapper.selectPage(pageReqVO);
172 172 }
173 173  
174   - @Override
175   - public byte[] getWxQrcode(SocialWxQrcodeReqDTO reqVO) {
176   - return socialClientService.getWxQrcode(reqVO);
177   - }
178   -
179 174 }
... ...