使用nodejs+redis+mysql获取微信二维码并扫码返回微信公众号

简介:使用nodejs+redis+mysql获取微信二维码并扫码返回微信公众号

  • 上一篇文章已经成功获取到二维码了,并且也对微信服务器返回的xml数据进行处理,以object对象形式返回到node服务器
    • 用户扫码之后根据openid进行注册/登录
      // 根据openid判断是否注册
      let openidRes = await DB.Account.findAll({
              
               where: {
              
               openid }, raw: true })
      // 随机获取头像、用户名
      let head_img = RandomTool.randomAvatar()
      let username = RandomTool.randomName()
      // 无注册则增加个用户数据
      let user = null
      if (openidRes.length === 0) {
              
              
        let resData = await DB.Account.create({
              
               username, head_img, openid })
        user = {
              
               head_img, username, id: resData.toJSON().id }
      } else {
              
              
        user = {
              
              
          head_img: openidRes.head_img,
          username: openidRes.username,
          id: openidRes.id
        }
      }
      
    • 生成token
      let token = SecretTool.jwtSign(user, '168h')
      
    • 更新redis缓存中的扫码状态+token
      let key = `wechat:ticket:${
                
                ticket}`
      const existsKey = await redisConfig.exists(key)
      if (existsKey) {
              
              
        redisConfig.set(key, JSON.stringify({
              
               isScan: 'yes', token }), 120)
      }
      
    • 用户扫码之后返回微信xml格式数据
      let content = ''
      if (msgObj.MsgType == 'event') {
              
              
        // 扫码
        if (msgObj.Event == 'SCAN') {
              
              
          content = '欢迎回来,欢迎登录我的网站'
        } else if (msgObj.Event == 'subscribe') {
              
              
          // 订阅
          content = '感谢关注'
        }
        // 根据来时的信息格式,重组返回。(注意中间不能有空格)
        let msgStr = `<xml>
          <ToUserName><![CDATA[${
                
                lastData.FromUserName}]]></ToUserName>
          <FromUserName><![CDATA[${
                
                lastData.ToUserName}]]></FromUserName>
          <CreateTime>${
                
                Date.now()}</CreateTime>
          <MsgType><![CDATA[text]]></MsgType>
          <Content><![CDATA[${
                
                content}]]></Content>
        </xml>`
        return msgStr
      }
      
      在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u011313034/article/details/131164590
今日推荐