zoukankan      html  css  js  c++  java
  • 微信小程序

    前言

    微信小程序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
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    maven 错误:HttpServlet was not found on the Java
    maven 配置Project Facets时further configuration available不出来问题
    maven 解决Cannot change version of project facet Dynamic web module to 2.5
    maven 怎么在MyEclipse中打开Navigator视图
    maven web项目不能创建src/main/java等文件夹的问题
    Maven 使用Eclipse构建Maven的SpringMVC项目
    Maven 异常:Project configuration is not up-to-date with pom.xml解决方案
    Eclipse 配置Maven以及修改默认Repository
    Android Java Mail与Apache Mail发送邮件对比
    Android JavaMail介绍及发送一封简单邮件
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/15162543.html
Copyright © 2011-2022 走看看