nodejs+redis+mysql を使用して WeChat QR コードを取得し、コードをスキャンして WeChat 公式アカウントに戻ります

はじめに:nodejs+redis+mysql を使用して WeChat QR コードを取得し、コードをスキャンして WeChat 公式アカウントに戻ります

  • 前回の記事では、QR コードの取得に成功し、WeChat サーバーから返された XML データを処理して、オブジェクト オブジェクトの形式でノード サーバーに返しました。
    • ユーザーがコードをスキャンした後、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
        }
      }
      
    • トークンを生成する
      let token = SecretTool.jwtSign(user, '168h')
      
    • Redis キャッシュ内のスキャン ステータスとトークンを更新します
      let key = `wechat:ticket:${
                
                ticket}`
      const existsKey = await redisConfig.exists(key)
      if (existsKey) {
              
              
        redisConfig.set(key, JSON.stringify({
              
               isScan: 'yes', token }), 120)
      }
      
    • ユーザーがコードをスキャンした後、データを WeChat 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