微信小程序的授权登录和获取用户信息

这篇博客介绍了两种方式实现微信小程序的授权登录流程。首先,前端通过微信接口获取code,后端利用code、appid和secret调用微信API获取session_key和openID。接着,前端接收到解密后的session信息进行授权。另一种方法是使用微信-popular库来完成相同步骤。此外,还提及了2021年后用户信息获取的变化,以及电话号码的解密处理。
摘要由CSDN通过智能技术生成

官网:https://developers.weixin.qq.com/miniprogram/dev/api-backend/

授权登录

前端传递过来code,然后后端用code+appid+secret调用微信的auth.code2Session接口得到session_key和openID
然后再由前端来授权。

方法一:

/**
     * 微信登录的原理,前段调用微信接口得到一个code,然后后端用这个code和小程序的appid以及appsecret 调用接口得到session_key和openid
     * 然后再滴定仪一个状态返回给前端使用
     */
    @PostMapping("/wxLogin")
    public R wxLogin(@RequestParam(value = "code", required = false) String code,
                          @RequestParam(value = "rawData", required = false) String rawData,
                          @RequestParam(value = "signature",required = false) String signature) {
        String wxurl = "https://api.weixin.qq.com/sns/jscode2session";
        MultiValueMap<String, Object> param = new LinkedMultiValueMap();
        param.add("appid", "xxx2xxxxxc");
        param.add("secret", "xxxxxxxxxxxx2");
        param.add("js_code", code);
        param.add("grant_type", "authorization_code");
        ResponseEntity<JSONObject> exchange = restTemplate.exchange(wxurl, HttpMethod.POST, null, JSONObject.class, param);
        JSONObject resultJson = exchange.getBody();
        Map<String, String> result = new HashMap<>();
        result.put("resultJson", resultJson.toString());
        if (resultJson.has("openId")) {
            //        获取sessionKey和openId
            String sessionKey = resultJson.get("session_key").toString();
            String openId = resultJson.get("openId").toString();

//        生成自定义登录态
            String session = null;
            Map<String, String> sessionMap = new HashMap<>();
            sessionMap.put("sessionKey", sessionKey);
            sessionMap.put("openId", openId);
            session = JSONObject.fromObject(sessionMap).toString();
            try {
                EncryptUtil encryptUtil = new EncryptUtil();
                session = encryptUtil.encrypt(session);
                result.put("session", session);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            return R.success(result, "授权失败");
        }
        return R.success(result, "授权成功");
    }



方法二:

先导入依赖
<dependency>
            <groupId>com.github.liyiorg</groupId>
            <artifactId>weixin-popular</artifactId>
            <version>2.8.31</version>
        </dependency>
		
		// SnsAPI 上面依赖自带的
 Jscode2sessionResult jscode2sessionResult = SnsAPI.jscode2session("wxxxxc", "ab792xxxf28920c2", code);
        String openid = jscode2sessionResult.getOpenid();
        String session_key = jscode2sessionResult.getSession_key();

获取用户信息

2021年前是后端调用api,现在是前端调用
但是电话号码需要后端解密一下,查看我的另一篇篇文章

微信支付和退款,需要关注成为粉丝才可见哦!!
微信支付和退款,需要关注成为粉丝才可见哦!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LC超人在良家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值