微信小程序--每日签到

前言

小程序在版本更新的时候,海轰准备添加一个每日签到的功能,也就是每个用户每天可以进行一次签到,获得一个积分。看似挺简单的每日签到,海轰还是琢磨了一下午的。

整体思路

  1. 第一步肯定是要判断用户是否授权了小程序,因为后面需要用到用户的详细信息,不授权,无法进行判断。判断是否授权,可以参考微信开发文档
  2. 第二步是判断用户是否在users记录中(users:用来存储登录小程序的用户集),若不存在,则上传用户信息到users中,存在则更新信息。
  3. 第三步,判断用户今日是否签到,这里海轰采用了一种比较笨的方法,在每一个用户信息记录中,额外增加了time字段,用来存入用户签到小程序的时间(年-月-日)。每一次签到之前,需要判断今日日期是否与time中的日期一致,一致则代表已签到。

程序运行界面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码讲解

1.判断用户是否授权

// 查看是否授权
    wx.getSetting({
      success(res) {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像昵称
          wx.getUserInfo({
            success: function (res) {
              console.log(res.userInfo)
              k.setData({
                name: res.userInfo.nickName,
                img: res.userInfo.avatarUrl
              })
            }
          })
        }
        else
        {
             k.setData({
               isempower:false
             })
        }
      }
    })

2.判断用户是否存在于users记录中

db.collection('users').where({
        _openid: openid // 填入当前用户 openid
      }).count().then(res => {
        console.log(res.total)
        // 若users记录中没有该用户 则上传用户信息
        if(res.total==0){
          db.collection('users').add({
            // data 字段表示需新增的 JSON 数据
            data: {
              user_openid:openid,
              user_name:name,
              user_img:img,
              time:time,
              nums:0
               }
          })
            .then(res => {
              console.log("上传用户成功")
              wx.hideLoading()
            })
            .catch(console.error)
        }
        // 存在该用户
        else{
         console.log("存在该用户,不用重新上传")
          wx.hideLoading()
        }
      })
      k.setData({
        isempower: true,
        name:name,
        img:img
      })
    }

3.签到

// 签到
  signed(e){
    var k=this
    var openid=k.data.openid
    var name=k.data.name
    var img=k.data.img
    var time=k.data.time
   
    wx.showLoading({
      title: '签到中...',
      mask: true
    })

    // 防止老用户 已经授权 但users记录中没有该用户信息
    db.collection('users').where({
      _openid: openid // 填入当前用户 openid
    }).count().then(res => {
      console.log(res.total)
      // 没有该用户
      if(res.total==0)
      {
        db.collection('users').add({
          // data 字段表示需新增的 JSON 数据
          data: {
            user_openid: openid,
            user_name: name,
            user_img: img,
            time:time
          }
        })
          .then(res => {
            console.log("上传用户成功,下一步进行积分更新")
            wx.cloud.callFunction({
              // 要调用的云函数名称
              name: 'HHPro_functions',
              // 传递给云函数的event参数
              data: {
                function_name: "update_nums",
                time: time,
                openid:openid
              }
            }).then(res => {
              console.log("积分+1")
              wx.hideLoading()
              k.setData({
                issigned: true
              })
              k.onLoad()
            }).catch(err => {
            })
          })
          .catch(console.error)
      }
      // 有该用户 则更新积分 +1
      else{
        wx.cloud.callFunction({
          // 要调用的云函数名称
          name: 'HHPro_functions',
          // 传递给云函数的event参数
          data: {
            function_name:"update_nums",
            time:time,
            openid: openid
          }
        }).then(res => {
         console.log("积分+1")
          k.setData({
            issigned: true
          })
          wx.hideLoading()
          k.onLoad()
        }).catch(err => {
   
        })
      }
    })
  
  },

总结

开始的时候,感觉也是不好做,但是仔细思考,其实并不难。
只需要弄清楚一些逻辑关系即可。
有一些用户授权了,之后可能存在于users记录,也有可能不在
有些用户未授权,也有可能存在users记录(授权过期等情况)…
总之,逻辑一定要理清楚!!!

项目源码

需要源码的小伙伴
请前往海轰的微信公众号:海轰Pro
回复:海轰
即可

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海轰Pro

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

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

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

打赏作者

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

抵扣说明:

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

余额充值