通过微信小程序扫码,在PC端登陆跳转相应页面

通过微信小程序扫码,在PC端登陆跳转相应页面

最近在做一个零食店,移动端采用微信小程序进行实现。当然,既然是零食店,那么肯定会有后台管理的,当时的想法是如何才能通过微信小程序里进行扫码去登陆PC端的管理平台呢?话不多说,接下来就说说我是怎么做到!

首先,大致上讲一下我的实现思路,整体通过WebSocket来实现自动跳转。在PC登陆页,展示二维码,建立WebSocket连接,当微信小程序扫码后,在后台进行身份验证,并且将验证结果实时发送给在PC登陆页建立的websocket连接,然后进行相应信息的提示以及页面的跳转。

扫码登陆流程
  1. 生成PC端页面二维码 这个二维码中放的什么信息呢,当时是能够唯一标识客户端的UUID啦,不然你扫码之后,应该给哪个客户端发送状态信息呢

  2. 进入PC端管理页时,获取唯一标识,建立websocket连接,并且以该唯一标识作为key存放在map集合当中。

pc端代码


var websocket = null;

    var url="ws://localhost:8080/snacks/socketLogin/[[${socketKey}]]";

    if('WebSocket' in window)

        websocket = new WebSocket(url);

    else

        layer.msg("该浏览器暂不支持!请更换浏览器",{icon:2,time:1000})

    websocket.onopen = function () {



    }

    websocket.onclose = function () {

        layer.msg("连接失效,请刷新页面",{icon:2,time:1000})

    }

    websocket.onmessage = function (e) {

        var res = e.data;

        var mid = eval("var json = "+res)

        if(json.code=="1000"){

            //登陆成功

            layer.msg("登陆成功!",{icon:1,time:1000},function () {

                window.location.href = "http://localhost:8080/snacks/login/goShopIndex/"+json.openId+"/snacks";

            })

        }else{

            //登陆失败

            layer.msg("该用户暂时没有权限或者商户",{icon:2,time:2000})

        }

    }

服务器端代码


private static ConcurrentHashMap<String, Session> sessionMap = new ConcurrentHashMap<>();

@OnOpen

    public void onOpen(Session session, @PathParam("socketKey") String socketKey){

        System.out.println("websocket:"+socketKey+"--->建立成功");

        sessionMap.put(socketKey,session);

    }

    @OnClose

    public void onClose(Session session,@PathParam("socketKey") String socketKey){

        System.out.println("websocket:"+socketKey+"--->断开连接");

        sessionMap.remove(socketKey);

    }

  1. <font size='4'>然后呢就是微信小程序端了,微信小程序通过扫码获取到该PC登陆页建立的websocket连接的唯一标识Key后,将自己的信息与这个key作为data请求后台接口。在后台接口中对用户信息进行校验,之后将校验结果发送给该key对应的session连接就可以啦 </font>

服务器端


@RequestMapping("/getLoginCode")

    @ResponseBody

    public Integer getLoginCode(HttpSession session, String socketKey, String openId){

        //在这里进行登陆信息验证

        。。。。。。

        //获取到websocket连接session的map

        ConcurrentHashMap<String, Session> sessionMap = LoginSocket.getSessionMap();

        //将状态信息发送到客户端

        Session currentSession = sessionMap.get(socketKey);

        currentSession.getAsyncRemote().sendText(responseJson);

        return result.getCode();

    }

微信小程序端


scanCodeLogin:function(){

    wx.scanCode({

      scanType:'qrCode',

      success:function(e){

        var socketKey = e.result;

        app.checkSession();

        var openId = wx.getStorageSync("openId");



        wx.request({

          url: app.baseUrl + '/getLoginCode',

          method:'POST',

          header:app.postHeader,

          data:{socketKey:socketKey,openId:openId},

          success:function(e){

            console.log(e)

          var result = e.data;

          if(result == 1000){

              wx.showToast({

                title: '登陆成功',

              })

          }else{

              wx.showModal({

                title: '登陆失败',

                content: '该用户暂时没有权限或者商户',

                showCancel:false

              })

          }

          }

        })

      },

      fail:function(){

      }

    })

这里的websocket也可以替换为消息队列中间件,但是这样是不是大材小用了呢?

给个关注,继续努力

关于本文章的实战演示可以看这里最适合java开发者的实战项目(包含多个技术栈)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容