diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index 1a02b47..28d81da 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -51,6 +51,8 @@ wechat: merchantSerialNumber: 微信支付密钥对应的序列号 apiV3key: 微信支付apiV3key notifyUrl: 微信支付回调地址 + miniProgramAppId: 小程序apppid + miniProgramSecret: sms: enabled: true # 阿里云 dysmsapi.aliyuncs.com diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java index 4950bd0..49d2fde 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java @@ -77,6 +77,10 @@ public class AjaxResult extends HashMap { return AjaxResult.success("操作成功", data); } + public static AjaxResult successData(Object data) + { + return AjaxResult.success("操作成功", data); + } /** * 返回成功消息 diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/controller/WechatController2.java b/ruoyi-mall/src/main/java/com/cyl/h5/controller/WechatController2.java index 1f11cc8..7260f59 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/controller/WechatController2.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/controller/WechatController2.java @@ -1,13 +1,19 @@ package com.cyl.h5.controller; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.cyl.external.WechatUtil; import com.cyl.h5.pojo.vo.form.WechatLoginForm; import com.cyl.manager.ums.service.MemberWechatService; +import com.ruoyi.common.core.domain.AjaxResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; +import org.springframework.util.Base64Utils; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; /** * h5/微信 @@ -41,4 +47,19 @@ public class WechatController2 { String token = memberWechatService.login(form); return ResponseEntity.ok("{\"data\": \"" + token + "\"}"); } + + + @GetMapping("/no-auth/wechat/getSessionId") + public AjaxResult getSessionId(String code) { + JSONObject object = memberWechatService.getSessionId(code); + if (object != null) { + String openId = object.getString("openid"); + String sessionId = object.getString("session_key"); + Map map = new HashMap(); + map.put("openId", openId); + map.put("sessionId", sessionId); + return AjaxResult.successData(Base64Utils.encodeToString(JSON.toJSONString(map).getBytes())); + } + return AjaxResult.success(null); + } } diff --git a/ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberWechatService.java b/ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberWechatService.java index 4f1c1b2..31d0168 100644 --- a/ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberWechatService.java +++ b/ruoyi-mall/src/main/java/com/cyl/manager/ums/service/MemberWechatService.java @@ -6,13 +6,16 @@ import java.util.List; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.cyl.config.WechatConfig; import com.cyl.external.WechatUtil; import com.cyl.external.resp.AccessTokenResp; import com.cyl.external.resp.UserInfoResp; import com.cyl.h5.pojo.vo.form.WechatLoginForm; import com.cyl.manager.ums.convert.MemberWechatConvert; +import com.cyl.wechat.WechatPayData; import com.github.pagehelper.PageHelper; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.ExtraUserBody; @@ -23,10 +26,12 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.apache.commons.lang3.StringUtils; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import com.cyl.manager.ums.mapper.MemberWechatMapper; import com.cyl.manager.ums.domain.MemberWechat; import com.cyl.manager.ums.pojo.query.MemberWechatQuery; +import org.springframework.web.client.RestTemplate; /** * 用户微信信息Service业务层处理 @@ -47,6 +52,10 @@ public class MemberWechatService { private ISysUserService userService; @Autowired private SysLoginService loginService; + @Autowired + private RestTemplate restTemplate; + private static String LOGIN_URL = "https://api.weixin.qq.com/sns/jscode2session?appid=#{APPID}&secret=#{SECRET}&js_code=#{JSCODE}&grant_type=authorization_code"; + /** * 查询用户微信信息 @@ -203,4 +212,22 @@ public class MemberWechatService { // 4. 生成token return loginService.createToken(u); } + + public JSONObject getSessionId(String code) { + String url = LOGIN_URL.replace("#{APPID}", WechatPayData.miniProgramAppId) + .replace("#{SECRET}", WechatPayData.miniProgramSecret) + .replace("#{JSCODE}", code); + log.info("获取openid,url:{}", url); + try { + ResponseEntity res = restTemplate.getForEntity(url, String.class); + String body = res.getBody(); + if (com.ruoyi.common.utils.StringUtils.isEmpty(body)) { + throw new Exception("获取openid出错"); + } + return JSONObject.parseObject(body); + } catch (Exception e) { + log.error("获取openid报错", e); + return null; + } + } } diff --git a/ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayData.java b/ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayData.java index 641d58b..8c9d016 100644 --- a/ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayData.java +++ b/ruoyi-mall/src/main/java/com/cyl/wechat/WechatPayData.java @@ -21,6 +21,9 @@ public class WechatPayData { public static String apiV3key; public static String notifyUrl; + public static String miniProgramAppId; + public static String miniProgramSecret; + public void setAppId(String appId) { WechatPayData.appId = appId; } @@ -48,4 +51,12 @@ public class WechatPayData { public void setNotifyUrl(String notifyUrl) { WechatPayData.notifyUrl = notifyUrl; } + + public void setMiniProgramAppId(String miniProgramAppId) { + WechatPayData.miniProgramAppId = miniProgramAppId; + } + + public void setMiniProgramSecret(String miniProgramSecret) { + WechatPayData.miniProgramSecret = miniProgramSecret; + } }