关于小程序微信登录后端设计的一点分享

这篇具有很好参考价值的文章主要介绍了关于小程序微信登录后端设计的一点分享。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们知道微信小程序对于微信登录的设计其实是给到了一个微信login的功能接口,其中响应成功会返回一个临时凭证码(时间大概是5分钟)code,这个临时的凭证码是从https://api.weixin.qq.com/sns/jscode2session获取openId的必带参数。下图示微信登录过程的时序图:

关于小程序微信登录后端设计的一点分享

 这里我们只介绍到第三方服务器得到openId与session_key之前的处理,至于后面的做登录态校验的业务和大家自己的需求有关,一般情况下自己测试着玩,不需要加上图片上说的加密算法进行登录态的小程序缓存存储。

1、获取code,直接在小程序某一个按钮触发事件添加JS函数,函数内部加上类似代码:

wx.login(){

        success(res){

                wx.request(){

                        url: ‘第三方服务器的url(本地跑后端项目的话就是本地ip与端口)’

                        ......省略header与method

                        data:{

                                code: res.data.code

                                }       

                        ......省略登录获取响应的判断方法

                }

        }

}

2、wx.request()请求已经发出,第三方服务器进行响应,处理逻辑:

requestUtils.getWeChatOPenId(appinfo.getAppId(), appinfo.getAppSecrtet(), code);

直接将需要的参数获取给到处理方法,方法返回的是openId的值。

我们来看这个处理的方法:

/**
 * 请求工具类封装请求方法
 */
@Component
public class RequestUtils {
    /**
     * 获取微信小程序openid
     *
     * @param AppId     小程序Id
     * @param AppSecret 小程序密钥
     * @param code      小程序wx.login接口返回的临时的临时状态码
     * @return openid
     */
    public  String getWeChatOPenId(String AppId, String AppSecret, String code) {
        try {
            /*1.拼接微信登录获取openId所需要访问的URL*/
            StringBuilder URL = new StringBuilder(WeChatConfig.loginUrl).append("?appId=").append(AppId).
                    append("&secret=").append(AppSecret).append("&js_code=").append(code).
                    append("&grant_type=authorization_code");
            /*2.创建http连接的客户端对象*/
            BasicHttpClientConnectionManager connectionManager;
            connectionManager = new BasicHttpClientConnectionManager(
                    RegistryBuilder.<ConnectionSocketFactory>create().
                            register("http", PlainConnectionSocketFactory.getSocketFactory())
                            .register("https", SSLConnectionSocketFactory.getSocketFactory())
                            .build(), null, null, null
            );
            CloseableHttpClient httpClient = HttpClientBuilder.create().
                    setConnectionManager(connectionManager)
                    .build();
            HttpGet httpGet = new HttpGet(URL.toString());
            /*3.执行访问一次请求获取响应体内容*/
            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity entity = httpResponse.getEntity();
            String s = EntityUtils.toString(entity, "UTF-8");
            JSONObject jsonObject = new JSONObject(s);
            /*4.从响应体中拿到openId并返回*/
            return jsonObject.get("openid").toString();
        } catch (Exception e) {
            System.out.println("---------小程序获取微信登录openId异常--------");
            e.printStackTrace();
        }
        /*出现异常即返回null*/
        return null;
    }

}

其中的四步处理法,但是这样做出来的微信登录处理逻辑,我觉得耗时上是一个问题。目前还没有很好的优化方案。文章来源地址https://www.toymoban.com/news/detail-496569.html

到了这里,关于关于小程序微信登录后端设计的一点分享的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [RPC]关于RPC的一点理解

    以下内容仅为个人理解,不作正确性保证,感谢批评指正 在分布式计算中,远程过程调用 (RPC) 是指计算机程序导致过程(子例程)在不同的地址空间(通常在共享网络上的另一台计算机上)中执行, 它的编码就好像是普通(本地)过程调用一样,程序员没有 显式 编码远程

    2024年02月10日
    浏览(29)
  • 关于区块链的一点经济学思考

    区块链是区块链,加密资产是加密资产,尽管二者之间的关系紧密,区块链和加密资产却不能混为一谈。区块链并不是什么新技术,如果从创新的角度来看,顶多算是一种组合创新。但是,很少有一种技术像区块链这样,让很多人趋之若鹜,不论是技术人员还是普通大众,不

    2023年04月08日
    浏览(73)
  • C# 关于进程回收管理的一款工具设计与分享

    目录 设计初衷 开发运行环境 Craneoffice ProcessGC 运行主界面 管理任务与策略 其它设置 移动存储设备管理 核心代码-计时器监控 小结 在使用 COM 模式操作 OFFICE 组件的开发过程中,当操作完相关文档后,在某些情况下仍然无法释放掉 Word 或 EXCEL 等应用进程,因此根据进程活动情

    2024年04月17日
    浏览(25)
  • 关于视觉3d目标检测学习像素深度的一点理解

    在真实世界的一个物体,可以通过相机矩阵将其投影到像素坐标系上 但是,在像素坐标系上的像素,由于相机的原理,导致它的深度信息已经没有了,所以原理上是没法得到其真实深度的(即3d位置) 那么现在的深度学习方法又为什么能预测出物体的深度呢? 个人理解: 大概

    2024年01月25日
    浏览(40)
  • Flutter关于StatefulWidget中State刷新时机的一点实用理解

    刚入门flutter开发,使用StatefulWidget踩了很多坑,就我遇到典型问题谈谈见解。 1.initState方法只会在控件初始化的时候执行一遍。 2.控件内部执行setState方法,则会每次执行build方法。 3.控件销毁会执行dispose方法,所以一些未释放的资源可以在该方法中执行,例如计时器。 4.使

    2024年02月10日
    浏览(32)
  • [数学建模] 0、关于数学建模的一点看法&付费专栏食用说明

    1、前言 在大学期间,几次参加数学建模的经历给我带来的印象还是很深

    2024年02月15日
    浏览(29)
  • 关于工作流开发前端选型的一点个人见解(bpmn.js与LogicFlow)

    掘金2023年度人气创作者打榜中,快来帮我打榜吧~ https://activity.juejin.cn/rank/2023/writer/747323639208391?utm_campaign=annual_2023utm_medium=self_web_shareutm_source=MiyueFE 首先需要明确的一点是,本文的出发点 纯粹是针对工作流开发 的场景的选型对比,其他业务场景下建议重新调研。 什么是工作

    2024年02月20日
    浏览(36)
  • 关于credal set和credal decision tree的一点思考(其实就是论文笔记)

    阅读Abellán老师的Credal-C4.5时,发现好难。。。然后又额外补充了一些论文,终于稍微懂一点点了,所以记录如下。 credal set在DS theory的定义如下 [1]: 这句话的意思是(证据理论中的)credal set是一个概率的凸集,这里面的概率p(x)受到上界pl函数和下界bel函数的控制(约束),

    2024年02月12日
    浏览(31)
  • 后端登录安全的一种思路

    PS:作者是小白能接触到的就只会这样写。勿喷。 前提 思路: 结合io流将登录token存储到配置文件中,不将token存储到浏览器端,从而避免盗取。 下面jwt的学习可以参考下这个: JWT --- 入门学习_本郡主是喵的博客-CSDN博客 JWT工具类 IO工具类 测试文件

    2024年02月14日
    浏览(25)
  • 微信小程序接入微信登录后端API

    微信官方文档:小程序登录 | 微信开放文档 (qq.com)   1.前端获取code 获取微信登录code https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html 2.获取微信用户信息 获取微信用户信息 https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html 后台我这边是使

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包