前言

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

整体思路

  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=thisvar openid=k.data.openidvar name=k.data.namevar img=k.data.imgvar time=k.data.timewx.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)}// 有该用户 则更新积分 +1else{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
回复:海轰
即可

微信小程序--每日签到相关推荐

  1. python玩微信小程序游戏_使用python实现微信小程序自动签到功能

    功能描述目标 完成多账号微信小程序每天自动签到 输出 签到成功则向微信群发送签到成功的信息 否则提示用户签到失败,需手动签到 包管理 requests itchat time threading 程序 ...

  2. 使用python实现微信小程序自动签到2.0

    微信小程序自动签到 功能描述 目标 输出 包管理 程序的结构设计 步骤1 步骤2 步骤3 步骤4 代码实现 使用findler抓包工具查看请求类型 再次使用findler抓包,查看请求内容 使用多线程 ...

  3. 毕业设计-基于微信小程序的签到系统

    目录 前言 课题背景与简介 实现设计思路 一.微信公众号和微信小程序 二.基于微信小程序的签到系统设计 三.签到系统应用流程 实现效果样例 更多帮助 前言

  4. 微信小程序 考勤签到助手 源码demo

    #微信小程序 考勤签到助手 此小程序已经上线,大家可以去微信小程序搜索 "桂电考勤小助手" 体验一下实际效果! 此小程序完全自己独立开发,对于真正的大牛来说不算什么,所以还是决定开 ...

  5. php后台 微信小程序 考勤签到助手

    下载地址:https://download.csdn.net/download/a13689028602/20665932 项目介绍 php后台 微信小程序 考勤签到助手 系统说明 Client 文件 ...

  6. 微信小程序——每日卡路里

    0.前言 这一个多月从零开始做了一个微信小程序,主要是决定深入学习前端知识,恰逢腾讯举办了第一届微信小程序大赛,参加了比赛做了一个简单的微信小程序作为练手,下面正式介绍这个小程序. 1.开始 开始是快 ...

  7. 微信小程序日历签到组件(原创)

    微信小程序日历签到组件(原创) 开发原因: 为满足定制需要,市面上又找不到车子和轮子,干脆自己撸了并开源分享有需要的人用 其他说明: 该组件js日期均已使用yyyy/MM/dd格式连接解决ios不兼容 ...

  8. 基于微信小程序的签到平台的研究与设计

    0 引言 为解决传统签到耗时长. 效率低等问题, 出现了多种签到形式, 包含硬件和软件两种, 但是现存的技术存在一定的缺陷. 为此, 设计出实现高效率.高可信度的签到平台是非常重要的. 手机安装最多. ...

  9. 微信小程序考勤签到管理系统

    <微信小程序考勤管理系统+后台管理系统>该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 本系统包含微信小程序做的考勤前台和Java做的后台管理系统: 微信小程序-- ...

最新文章

  1. R语言在可视化图像中添加文本(Adding Text to plot)
  2. 大咖来信|浪潮刘军:AI计算将成为“新基建”核心支撑之一
  3. Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐[转]
  4. Writing a Tile Engine in JavaFX
  5. CPU 到底是怎么认识代码的?涨姿势了!
  6. Couchbase 介绍 - 更好的 Cache 系统
  7. java.lang.ClassNotFoundException: com.sap.exception.GlobalDefaultExceptionHandler
  8. iOS绘圆形图-CGContextAddArc各参数说明
  9. C# 代码生成器 (存储过程生成方法)
  10. 目前为止最全的微信小程序项目实例
  11. Photoshop插件-删除所有亮度通道蒙板-脚本开发-PS插件
  12. MAC和IP地址伪造发包
  13. Nginx 412 Precondition Failed
  14. 同一台电脑安装两个版本的jdk和jre
  15. 二元函数最大最小值定理证明_求函数最小最大值定理的证明
  16. 获取客户端真实ip的方法
  17. docker最全笔记速查,逻辑清晰
  18. android textview 显示表情和文字 表情带超链接
  19. 因果推断1:Counterfactual Prediction for Bundle Treatment(NeurIPS 2020)
  20. 网页视频直播、微信视频直播技术解决方案:EasyNVR与EasyDSS流媒体服务器组合之区分不同场景下的直播接入需求

热门文章

  1. 中文乱码解决及中文编码成UTF8
  2. Android 5.1 - 7.1 系统(framework)定制、修改、移植、总结 - 上篇
  3. 【电赛合集】19电磁炮.zip、17板球.zip、15风力摆.zip、13倒立摆.zip、(1994-2021)全国大学生电子设计竞赛历年真题.zip
  4. poj3208 Apocalypse Someday 题解报告
  5. 如何使用origin求图线交点坐标
  6. matlab矩阵处理实验二,实验二MATLAB矩阵分析与处理
  7. 1、迪文屏基于T5L_C51开发手势6宫格解锁
  8. scala中object和class的理解---apply方法是初始化方法
  9. 【博主已解决】win10系统wlan消失 网络适配器出现黄色感叹号(代码56)
  10. PayPal个人户可以绑定义乌个体户结汇是真的吗