ToB企服应用市场:ToB评测及商务社交产业平台

标题: 聊聊公众号联动扫码登录功能如何实现 [打印本页]

作者: 反转基因福娃    时间: 2024-11-1 11:09
标题: 聊聊公众号联动扫码登录功能如何实现
大家好,我是 V哥。扫码登录是个很普遍的功能,通过与公众号联动实现扫码登录功能,要怎么做呢,V 哥整理了以下步骤和代码,供你参考。这里假设你已经有一个Java后端应用,并且微信开发者平台的设置也已经完成。(相信你可以根据微信开放平台的操纵进行)整个流程包括二维码生成、扫码后获取微信用户信息、并将用户登录状态返回到你的应用中。
1. 微信公众号扫码登录流程

2. 前置预备

确保你在微信开放平台上设置了以下信息:
3. Java 实现扫码登录

使用Spring Boot实现一个简单的微信扫码登录后端接口:
导入依赖

在 pom.xml 中添加必要的依赖项:
  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>org.springframework.boot</groupId>
  7.     <artifactId>spring-boot-starter-data-redis</artifactId>
  8. </dependency>
  9. <dependency>
  10.     <groupId>com.fasterxml.jackson.core</groupId>
  11.     <artifactId>jackson-databind</artifactId>
  12. </dependency>
  13. <dependency>
  14.     <groupId>org.springframework.boot</groupId>
  15.     <artifactId>spring-boot-starter-security</artifactId>
  16. </dependency>
复制代码
代码实现

  1.    @Configuration
  2.    public class WeChatConfig {
  3.        @Value("${wechat.appId}")
  4.        private String appId;
  5.       
  6.        @Value("${wechat.appSecret}")
  7.        private String appSecret;
  8.       
  9.        @Value("${wechat.redirectUri}")
  10.        private String redirectUri;
  11.       
  12.        public String getAppId() {
  13.            return appId;
  14.        }
  15.        public String getAppSecret() {
  16.            return appSecret;
  17.        }
  18.        public String getRedirectUri() {
  19.            return redirectUri;
  20.        }
  21.    }
复制代码
  1.    @RestController
  2.    @RequestMapping("/api/wechat")
  3.    public class WeChatLoginController {
  4.        @Autowired
  5.        private WeChatConfig weChatConfig;
  6.        @GetMapping("/login/qrcode")
  7.        public ResponseEntity<String> getQRCode() {
  8.            String url = "https://open.weixin.qq.com/connect/qrconnect" +
  9.                    "?appid=" + weChatConfig.getAppId() +
  10.                    "&redirect_uri=" + URLEncoder.encode(weChatConfig.getRedirectUri(), StandardCharsets.UTF_8) +
  11.                    "&response_type=code" +
  12.                    "&scope=snsapi_login" +
  13.                    "&state=STATE#wechat_redirect";
  14.            return ResponseEntity.ok(url);
  15.        }
  16.    }
复制代码
通过此接口可以生成微信扫码登录的二维码URL。
  1.    @GetMapping("/callback")
  2.    public ResponseEntity<String> weChatCallback(@RequestParam("code") String code) {
  3.        String accessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + weChatConfig.getAppId() +
  4.                "&secret=" + weChatConfig.getAppSecret() +
  5.                "&code=" + code +
  6.                "&grant_type=authorization_code";
  7.        RestTemplate restTemplate = new RestTemplate();
  8.        String response = restTemplate.getForObject(accessTokenUrl, String.class);
  9.        JSONObject json = new JSONObject(response);
  10.        String accessToken = json.getString("access_token");
  11.        String openId = json.getString("openid");
  12.        // 获取用户信息
  13.        String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openId;
  14.        String userInfoResponse = restTemplate.getForObject(userInfoUrl, String.class);
  15.        // 返回或保存用户信息
  16.        return ResponseEntity.ok(userInfoResponse);
  17.    }
复制代码
  1.    @Autowired
  2.    private RedisTemplate<String, Object> redisTemplate;
  3.    @PostMapping("/saveSession")
  4.    public ResponseEntity<String> saveSession(@RequestBody Map<String, String> userInfo) {
  5.        String sessionId = UUID.randomUUID().toString();
  6.        redisTemplate.opsForValue().set(sessionId, userInfo);
  7.        // 返回Session ID作为登录凭证
  8.        return ResponseEntity.ok(sessionId);
  9.    }
复制代码
4. 前端处置惩罚

在前端页面中调用 /api/wechat/login/qrcode 接口,将二维码表现给用户。当用户扫码并完成授权后,前端可以获取后端传回的Session ID,表示登录乐成。
完备流程小结

使用以上代码和步骤可以实现完备的微信公众号扫码登录流程,前端就可以使用得到的Session ID来维护用户登录状态啦。
由于演示案例涉及本身的账号信息和微信开放平台的私密信息,请根据本身的情况使用代码案例,下课。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4