• 微信小程序


    前言

    微信小程序AppID和AppSecret一起使用可调用微信公众接口能力,这里介绍通过 wx.login() 拿到code,将code传到后台服务器, 后台服务器结合小程序的 appid 和 appsecret 去请求微信服务器拿到用户的 openid 进行自己的业务逻辑处理。


    环境

    SpringBoot + 小程序


    具体实现

    小程序

    • index.wxml
    <button type='primary' open-type='getUserInfo' bindgetuserinfo='doCodeLogin'>微信登录</button>
    
    • index.js
    Page({
      doCodeLogin() {
        // code
        wx.login({
          success: (res) => {
            if (res.code) {
              wx.request({
                url: 'http://localhost:8081/v1/login/codeLogin?code=' + res.code,
                method: 'POST',
                success: (res) => {
                
               	  // Login Success TO DO
               	  
                  console.log(res.data)
                  wx.setStorageSync('userData', res.data)
                  wx.redirectTo({
                    url: '../index/index'
                  })
                }
              })
            }
          }
        })
      }
    }
    

    SpringBoot

    • application.yml
    wechat:
      appid: 小程序APPID
      appsecret: 小程序Secret
      code2session: https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code
    
    • LoginController.java
    @RestController
    @RequestMapping("/login")
    public class LoginController {
    
        @Value("${wechat.code2session}")
        private String code2SessionUrl;
    
        @Value("${wechat.appid}")
        private String appid;
    
        @Value("${wechat.appsecret}")
        private String appsecret;
    
        @Autowired
        private ObjectMapper mapper;
    
        @Autowired
        private UserRepository userRepository;
    
        /**
         * code登陆
         * @param code
         * @return
         */
        @PostMapping("codeLogin")
        public UnifyMessage codeLogin(@RequestParam String code) {
            /**
             * code2Session 接口Url 拼接
             * code2Session开发者服务器使用临时登录凭证code获取 session_key、
             * 用户userid以及用户所在企业的corpid等信息。
             * https://work.weixin.qq.com/api/doc/90000/90136/91507
             */
            String url = MessageFormat.format(this.code2SessionUrl, this.appid, this.appsecret, code);
            
            RestTemplate rest = new RestTemplate();
            String sessionText = rest.getForObject(url, String.class);
    
            /**
             * code2Session 接口 返回值
             */
            Map<String, Object> codeLoginResp = new HashMap<>();
    
            try {
                /**
                 * codeLoginResp 格式如下
                 * {
                 * 	"session_key": "oImL2VXoGLMvae/5bsgJkA==",
                 * 	"openid": "oBfjq4p7h0kuQEV4_mYRtNj1FX8s"
                 * }
                 */
                codeLoginResp = mapper.readValue(sessionText, Map.class);
    
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
    
            /**
             * 获取用户openId
             */
            String openid = codeLoginResp.getOrDefault("openid", "").toString();
    
            if (StringUtils.isEmpty(openid)) {
                throw new UnPermissionException("Code登陆失败");
            }
    
            /**
             * 业务逻辑处理。。。
             */
            Optional<User> userOptional = userRepository.findByOpenid(openid);
    
            if (userOptional.isPresent()) {
                // TODO: Login success
                return new UnifyMessage(0, "登陆成功", "");
            } else {
                // TODO: Login failed
            }
    
            return null;
        }
    
    }
    
    • 登录调用

    在这里插入图片描述


    - End -
    梦想是咸鱼
    关注一下吧
    以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
    作者:Maggieq8324
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    丁夏畦同志去世
    [裴礼文数学分析中的典型问题与方法习题参考解答]4.5.7
    [数分提高]2014-2015-2第10教学周第2次课 (2015-05-07)
    [数分提高]2014-2015-2第10教学周第1次课 (2015-05-04)
    [数分提高]2014-2015-2第9教学周第2次课 (2015-04-30)
    [数分提高]2014-2015-2第9教学周第1次课 (2015-04-28)
    [数分提高]2014-2015-2第8教学周第2次课 (2015-04-23)
    2014年江西省青年科学家名单
    2014年“江西青年五四奖章”名单
    [数学杂志]AML
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/15162543.html
Copyright © 2020-2023  润新知