刘小明
2024-12-12 c4b85c21d8bee8fef671ec8f5e3957fd88a37f88
小程序登录方法demo
3个文件已修改
4个文件已添加
223 ■■■■■ 已修改文件
pms-parent/pms-global/src/main/resources/application-global.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/PmsWechatTraceApplication.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/AuthController.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/QueryVo.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/WeChatService.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/util/RestTemplateUtil.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-wechat-trace/src/main/resources/application.yml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-global/src/main/resources/application-global.yml
@@ -84,6 +84,9 @@
    report:
        webPort: 12350
        idSuffix: 7
    wechat:
        webPort: 12351
        idSuffix: 8
    file:
        idSuffix: 99
    file1:
pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/PmsWechatTraceApplication.java
@@ -1,9 +1,15 @@
package com.dy.pmsTrace;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@SpringBootApplication
@EnableAspectJAutoProxy
@ComponentScan(basePackages = {"com.dy.common", "com.dy.pmsGlobal", "com.dy.pmsTrace"})
@MapperScan(basePackages={"com.dy.pmsGlobal.dao*"})
public class PmsWechatTraceApplication {
    public static void main(String[] args) {
pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/AuthController.java
New file
@@ -0,0 +1,36 @@
package com.dy.pmsTrace.login;
import com.alibaba.fastjson2.JSONObject;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/wechat")
public class AuthController {
    private WeChatService weChatService;
    @Autowired
    public void setWechatService(WeChatService weChatUserService){
        this.weChatService = weChatUserService;
    }
    @PostMapping("/login")
    public BaseResponse<Boolean> login(@RequestBody QueryVo vo) {
        try {
            JSONObject wxResponse = weChatService.login(vo.code);
            if (wxResponse.containsKey("openid")) {
                // 成功获取到了用户的openid,session_key和其他信息
                // 这里可以进行更多业务逻辑操作,例如生成自定义token返回给客户端
                return BaseResponseUtils.buildSuccess(wxResponse);
            } else {
                // 如果有错误信息,直接返回
                return BaseResponseUtils.buildError(wxResponse);
            }
        } catch (Exception e) {
            return BaseResponseUtils.buildError(e.getMessage());
        }
    }
}
pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/QueryVo.java
New file
@@ -0,0 +1,14 @@
package com.dy.pmsTrace.login;
import com.dy.common.webUtil.QueryConditionVo;
import lombok.*;
@Data
@EqualsAndHashCode(callSuper = false)
@ToString(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class QueryVo extends QueryConditionVo {
    public String code;
}
pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/WeChatService.java
New file
@@ -0,0 +1,40 @@
package com.dy.pmsTrace.login;
import com.alibaba.fastjson2.JSONObject;
import com.dy.pmsTrace.util.RestTemplateUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@Service
public class WeChatService {
    @Value("${wechat.appId}")
    private String appId;
    @Value("${wechat.appSecret}")
    private String appSecret;
    @Value("${wechat.loginUrl}")
    private String loginUrl;
    private final RestTemplateUtil restTemplateUtil;
    public WeChatService(RestTemplateUtil restTemplateUtil) {
        this.restTemplateUtil = restTemplateUtil;
    }
    public JSONObject login(String code) throws IOException {
        Map<String, Object> queryParams = new HashMap<>();
        queryParams.put("appid", appId);
        queryParams.put("secret", appSecret);
        queryParams.put("js_code", code);
        queryParams.put("grant_type", "authorization_code");
        Map<String, String> headerParams = new HashMap<>();
        return restTemplateUtil.get(loginUrl, queryParams, headerParams);
    }
}
pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/util/RestTemplateUtil.java
New file
@@ -0,0 +1,111 @@
package com.dy.pmsTrace.util;
import com.alibaba.fastjson2.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
 * @author ZhuBaoMin
 * @date 2024-03-06 13:47
 * @LastEditTime 2024-03-06 13:47
 * @Description
 */
@Component
public class RestTemplateUtil {
    @Autowired
    private RestTemplate restTemplate;
    public JSONObject get(String url, Map<String, Object> queryParams) throws IOException {
        return get(url, queryParams, new HashMap<>(1));
    }
    public JSONObject get(String url, Map<String, Object> queryParams, Map<String, String> headerParams) throws IOException {
        String tempUrl = setParamsByAppendUrl(queryParams, url);
        HttpHeaders headers = new HttpHeaders();
        headerParams.forEach(headers::add);
        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(null, headers);
        ResponseEntity<String> response = restTemplate.exchange(tempUrl, HttpMethod.GET, httpEntity, String.class);
        return JSONObject.parseObject(response.getBody());
    }
    public JSONObject getHeaders(String url, Map<String, Object> queryParams, Map<String, String> headerParams) throws IOException {
        String tempUrl = setParamsByAppendUrl(queryParams, url);
        HttpHeaders headers = new HttpHeaders();
        headerParams.forEach(headers::add);
        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(null, headers);
        ResponseEntity<String> response = restTemplate.exchange(tempUrl, HttpMethod.GET, httpEntity, String.class);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("headers", response.getHeaders());
        jsonObject.put("body", response.getBody());
        return jsonObject;
    }
    public JSONObject get2(String url, Map<String, Object> queryParams, Map<String, String> headerParams) throws IOException {
        String tempUrl = setParamsByPath(queryParams, url);
        HttpHeaders headers = new HttpHeaders();
        headerParams.forEach(headers::add);
        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(null, headers);
        ResponseEntity<String> response = restTemplate.exchange(tempUrl, HttpMethod.GET, httpEntity, String.class, queryParams);
        return JSONObject.parseObject(response.getBody());
    }
    public JSONObject post(String url, String json, Map<String, String> headerParams) {
        HttpHeaders headers = new HttpHeaders();
        headerParams.forEach(headers::add);
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        HttpEntity<String> httpEntity = new HttpEntity<>(json, headers);
        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
        return JSONObject.parseObject(response.getBody());
    }
    private String setParamsByPath(Map<String, Object> queryParams, String url) {
        // url?id={id}&name={name}
        if (queryParams == null || queryParams.isEmpty()) {
            return url;
        }
        StringBuilder sb = new StringBuilder();
        try {
            for (Map.Entry<String, Object> entry : queryParams.entrySet()) {
                sb.append("&").append(entry.getKey()).append("=").append("{").append(entry.getKey()).append("}");
            }
            if (!url.contains("?")) {
                sb.deleteCharAt(0).insert(0, "?");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return url + sb;
    }
    private String setParamsByAppendUrl(Map<String, Object> queryParams, String url) {
        // url?id=1&name=zzc
        if (queryParams == null || queryParams.isEmpty()) {
            return url;
        }
        StringBuilder sb = new StringBuilder();
        try {
            for (Map.Entry<String, Object> entry : queryParams.entrySet()) {
                sb.append("&").append(entry.getKey()).append("=");
                sb.append(entry.getValue());
            }
            if (!url.contains("?")) {
                sb.deleteCharAt(0).insert(0, "?");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return url + sb;
    }
}
pms-parent/pms-wechat-trace/src/main/resources/application.yml
@@ -4,15 +4,16 @@
#web服务端口,tomcat默认是8080
server:
    port: ${pms.base.webPort}
    port: ${pms.wechat.webPort}
    servlet:
        context-path: /base #web访问上下文路径
        context-path: /wechat #web访问上下文路径
        context-parameters:
            #GenerateIdSetSuffixListener中应用,取值范围是0-99
            idSuffix: ${pms.base.idSuffix}
            idSuffix: ${pms.webPort.idSuffix}
            #ConfigListener中应用
            #configFileNames: config-global.xml,config-demo.xml
user:
    defaultTrueRandomFalsePassword: true #true:采用默认密码,false:系统产生随机密码
    defaultPassword: "ABC123" #默认密码
wechat:
    appId: wx2e6beb0eca7c3672
    appSecret: b8f8ce34e13d3ba2eeaeba89068d7fbe
    loginUrl: https://api.weixin.qq.com/sns/jscode2session