From c4b85c21d8bee8fef671ec8f5e3957fd88a37f88 Mon Sep 17 00:00:00 2001
From: 刘小明 <liuxm_a@163.com>
Date: 星期四, 12 十二月 2024 16:49:29 +0800
Subject: [PATCH] 小程序登录方法demo

---
 pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/WeChatService.java       |   40 ++++++++++
 pms-parent/pms-global/src/main/resources/application-global.yml                          |    3 
 pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/AuthController.java      |   36 +++++++++
 pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/QueryVo.java             |   14 +++
 pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/PmsWechatTraceApplication.java |    6 +
 pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/util/RestTemplateUtil.java     |  111 +++++++++++++++++++++++++++
 pms-parent/pms-wechat-trace/src/main/resources/application.yml                           |   13 +-
 7 files changed, 217 insertions(+), 6 deletions(-)

diff --git a/pms-parent/pms-global/src/main/resources/application-global.yml b/pms-parent/pms-global/src/main/resources/application-global.yml
index ea9cdc9..822bbb8 100644
--- a/pms-parent/pms-global/src/main/resources/application-global.yml
+++ b/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:
diff --git a/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/PmsWechatTraceApplication.java b/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/PmsWechatTraceApplication.java
index 59c92d9..38225fe 100644
--- a/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/PmsWechatTraceApplication.java
+++ b/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) {
diff --git a/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/AuthController.java b/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/AuthController.java
new file mode 100644
index 0000000..6d3fb44
--- /dev/null
+++ b/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/AuthController.java
@@ -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")) {
+                // 鎴愬姛鑾峰彇鍒颁簡鐢ㄦ埛鐨刼penid,session_key鍜屽叾浠栦俊鎭�
+                // 杩欓噷鍙互杩涜鏇村涓氬姟閫昏緫鎿嶄綔锛屼緥濡傜敓鎴愯嚜瀹氫箟token杩斿洖缁欏鎴风
+                return BaseResponseUtils.buildSuccess(wxResponse);
+            } else {
+                // 濡傛灉鏈夐敊璇俊鎭紝鐩存帴杩斿洖
+                return BaseResponseUtils.buildError(wxResponse);
+            }
+        } catch (Exception e) {
+            return BaseResponseUtils.buildError(e.getMessage());
+        }
+    }
+}
\ No newline at end of file
diff --git a/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/QueryVo.java b/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/QueryVo.java
new file mode 100644
index 0000000..6082628
--- /dev/null
+++ b/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/QueryVo.java
@@ -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;
+}
diff --git a/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/WeChatService.java b/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/WeChatService.java
new file mode 100644
index 0000000..241a885
--- /dev/null
+++ b/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/login/WeChatService.java
@@ -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);
+
+    }
+}
\ No newline at end of file
diff --git a/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/util/RestTemplateUtil.java b/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/util/RestTemplateUtil.java
new file mode 100644
index 0000000..211cde3
--- /dev/null
+++ b/pms-parent/pms-wechat-trace/src/main/java/com/dy/pmsTrace/util/RestTemplateUtil.java
@@ -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;
+    }
+
+}
\ No newline at end of file
diff --git a/pms-parent/pms-wechat-trace/src/main/resources/application.yml b/pms-parent/pms-wechat-trace/src/main/resources/application.yml
index 2acde49..e41a2ac 100644
--- a/pms-parent/pms-wechat-trace/src/main/resources/application.yml
+++ b/pms-parent/pms-wechat-trace/src/main/resources/application.yml
@@ -4,15 +4,16 @@
 
 #web鏈嶅姟绔彛锛宼omcat榛樿鏄�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:閲囩敤榛樿瀵嗙爜锛宖alse:绯荤粺浜х敓闅忔満瀵嗙爜
-    defaultPassword: "ABC123" #榛樿瀵嗙爜
\ No newline at end of file
+wechat:
+    appId: wx2e6beb0eca7c3672
+    appSecret: b8f8ce34e13d3ba2eeaeba89068d7fbe
+    loginUrl: https://api.weixin.qq.com/sns/jscode2session
\ No newline at end of file

--
Gitblit v1.8.0