就像拼夕夕一样,有些活动需要朋友助力。
最近有个需求是这样的:

核心:

  1. 与微信小程序的激励广告联系一起,点击按钮助力,弹出微信激励广告,观看广告后,给予奖励,助力人数减1
  2. 分享给朋友,请朋友助力,助力人数减1
  3. 数据全部通过云函数进行处理
  4. 剩余时间

逻辑:

  1. 用户开始拼团添加拼团表->点击助力广告->更新拼团人数和广告->当助力人数满了,更新拼团状态
  2. 朋友助力->更新拼团人数,添加助力人表->助力成功后跳转成用户逻辑
  3. 用户或朋友进入拼团,查询拼团表和助力人表,显示拼团信息,设置定时器
  4. 开始拼团时设置开始时间和结束时间,定时器中进行判断是否超时

一、激励广告

1.在微信公众平台里的流量主中进行创建。
2.复制代码,就可以运行了。

let rewardedVideoAd = null
Page({onLoad() {let that = thisif(wx.createRewardedVideoAd){rewardedVideoAd = wx.createRewardedVideoAd({ adUnitId: 'xxxx' })rewardedVideoAd.onLoad(() => {console.log('onLoad event emit')})rewardedVideoAd.onError((err) => {console.log('onError event emit', err)})rewardedVideoAd.onClose(res => {// 用户点击了【关闭广告】按钮if (res && res.isEnded) {// 正常播放结束,可以下发游戏奖励//这里是奖励that.sendGift()} else {// 播放中途退出,不下发游戏奖励}})}},//按钮助力videoShow: function () {let that = thisthat.setData({isUser: false})// 用户触发广告后,显示激励视频广告if (that.createRewardedVideoAd) {that.createRewardedVideoAd.show().catch(() => {// 失败重试that.createRewardedVideoAd.load().then(() => that.createRewardedVideoAd.show()).catch(err => {wx.showToast({title: '广告显示失败,请刷新页面',duration: 2000})console.log('激励视频 广告显示失败')})})}},
})

二、分享好友

  /*** 用户点击右上角分享* groupId:订单id,imgurl团主头像*/onShareAppMessage: function () {let that = this;console.log(that.data.memberInfo.headimgurl)let imgUrl = that.data.memberInfo.headimgurl || that.data.memberInfo.avatarreturn {title: '戳我领取,帮朋友助力',path: 'pages/***/***?groupId=' + that.data.groupId + "&imgurl=" + that.data.imgurl,success: (res) => {console.log("转发成功", res);if (res.shareTickets != undefined) {wx.getShareInfo({shareTicket: res.shareTickets,success: function (res) { }})}}}},
   <button open-type="share">邀请好友助力</button>

三、云函数

涉及到云函数添加,更新,查找,删除数据库,云函数调用发送订阅消息

// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {switch (event.action) {//添加拼团case 'addGroup': {return addGroup(event)}//更新人数和观看广告的次数case 'updateGroup': {return updateGroup(event)}//通过openid和课程id查询信息case 'queryByOpenid': {return queryGroup(event)}//通过订单id查询信息case 'queryByGroupId': {return queryByGroupId(event)}//更新订单状态case 'updateStauts': {return updateStauts(event)}//更新订单状态和完成时间case 'updateStautsAndTime': {return updateStautsAndTime(event)}//添加助力人信息表case 'addGroupHelp': {return addGroupHelp(event)}//通过订单id查询助力人消息case 'queryGroupHelpByopenId': {return queryGroupHelpByopenId(event)}//发送完成订阅消息case 'sendSubscribeMessageFinish': {return sendSubscribeMessageFinish(event)}//发送过期订阅消息case 'sendSubscribeMessageGroup': {return sendSubscribeMessageGroup(event)}//查询订单完成条数case 'querySucdess': {return querySucdess()}//删除订单case 'removeID':{return removeID(event)}default: {return}}async function addGroup(event) {const res = await db.collection('***').add({data: {  }})return res;
}
async function updateGroup(event) {const res = await db.collection('***').doc(event.id).update({data: {}})return res;
}
//通过课程id和openid查询信息
async function queryGroup(event) {const res = await db.collection('***').where({atta_id: event.atta_id,openid: event.openid,}).get()return res;
}
/*** 发送订阅消息--成功*/
async function sendSubscribeMessageGroup(event) {const { OPENID } = cloud.getWXContext()const sendResult = await cloud.openapi.subscribeMessage.send({touser: OPENID,templateId: event.templateId,miniprogram_state: 'developer',page: 'pages/***/****?dataId='+event.dataId,// 此处字段应修改为所申请模板所要求的字段data: {thing14: {value : '****',},date8: {value : event.time,},phrase2: {value : '***',}}})return sendResult
}
async function querySucdess() {const res = db.collection('****').where({}).count()return res;
}
async function removeID(event) {const res = await db.collection('***').where({}).remove()return res;
}
}

四、剩余时间

 /*** 设置砍价倒计时时间* @method setAnswerTime* @param {number} data 结束时间* @return {} 返回查询对象数组*/setAnswerTime(data) {let that = this;clearInterval(that.data.timer)//如果将定时器设置在外面,那么用户就看不到countDownNum的数值动态变化,所以要把定时器存进data里面let timer = setInterval(function () {that.formatTime(data);}, 1e3);that.setData({timer: timer});},/*** 剩余时间格式*/formatTime: function (date) {let that = thislet nowTime = new Date(),_nowTime = nowTime.getTime(),resTime = date - _nowTimeif (resTime <= 0) {clearInterval(that.data.timer)if (that.data.groupDate.stauts != 2) {that.setData({status: 3})that.updateStauts(3)that.sendSubscribeMessageFinish()}return;}var hour = parseInt((resTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));var minute = parseInt((resTime % (1000 * 60 * 60)) / (1000 * 60));var second = parseInt(resTime % (1000 * 60) / 1000);let time = [hour, minute, second].map(this.formatNumber).join(':') + '后结束'this.setData({time: time})},/*** 剩余时间格式01*/formatNumber: function (n) {n = n.toString()return n[1] ? n : '0' + n},

微信小程序案例:拼团模块相关推荐

  1. 微信小程序实现拼团成功动画

    微信小程序实现如上效果. 分为两个组件: PinTuan: 整体组件 PinTuanHead: 每个头像组件 代码如下: PinTuan.js Component({attached:function ...

  2. 微信小程序自驾游拼团+后台管理系统SSM-JAVA【数据库设计、论文、源码、开题报告】

    功能介绍 本系统的功能包括前台和后台两方面,前台的功能为旅游景点信息.拼团信息.旅游资讯信息.论坛信息等,用户可以参与拼团,发起者可以发起拼团和管理拼团订单.参团信息.后台的功能为用户管理.评价管理. ...

  3. H5电商营销系统+微信商城小程序、拼团、砍价、秒杀、优惠券、积分、分销等功能thinkphp二次开发

    H5电商营销系统+微信商城小程序.拼团.砍价.秒杀.优惠券.积分.分销等功能thinkphp二次开发 喜欢的联系我,提供源代码 1.后台应用form-builder PHP快速生成现代化表单:     ...

  4. 小程序登录本地服务器,微信小程序实现用户登录模块服务器搭建

    我选用的是node.js来搭建服务器,没有安装的小伙伴可以参考我的node.js其他博客. 服务器安装与配置 初始化项目,将会自动创建package.json配置文件. npm init -y 安装E ...

  5. 拼团商城小程序高保真原型模板、支付、优惠券、客服、物流、收藏、足迹、优惠券、订单管理、评价、设置、地址、售后、拼团、消息通知、商城小程序、电商小程序、拼团电商、移动端电商、高保真电商、电商app

    主要功能:首页:(轮播图.活动快速入口.商品推荐).搜索 分类: 商品分类(三级显示).商品详情.拼团or单独购买.订单结算.拼团状态  消息:(客服.通知.物流.活动)我的:收藏.足迹.优惠券.订单 ...

  6. Axure电商服务小程序交互原型模板、电商小程序、拼团特惠、积分兑换、LBS电商小程序、活动、订单、会员、购物车、签到、钱包充值、拼团拼单、优惠券、电商原型、rp源文件、Axure原型、移动端电商系统

    Axure电商服务小程序交互原型模板.电商小程序.拼团特惠.积分兑换.LBS电商小程序.活动.订单.会员.购物车.签到.钱包充值.拼团拼单.优惠券.电商原型.rp源文件.Axure原型.移动端电商系统 ...

  7. 拼团小程序服务器配置,拼团小程序的拼团活动怎么设置?

    拼团这种营销方法利用了人性的凑热闹还有贪便宜的心理,不管是线上拼团购买还是线下抱团都有优惠,比如,自己一个人买需要100块钱,而10个人一起买却只有90块,便宜了10块钱,是不是就感觉自己占到便宜了, ...

  8. 微信小程序案例TODO备忘录

    微信小程序案例TODO备忘录 微信小程序案例TODO备忘录 本节展示一个制作todo备忘录的案例讲解 代码:https://github.com/Harryjun/WeChatPrj/tree/mas ...

  9. 微信小程序案例一 成绩计算

    微信小程序案例一 :成绩计算 效果图 2.WXML文件 属性 bindinput 的类型为 handlerEvent 除了date/time 类型的输入框,当键盘输入时触发 input 事件,e.de ...

最新文章

  1. 软件测试技术篇:UI自动化到底是难是易?
  2. TensorFlow 相关 URL
  3. emacs 跳转到指定行
  4. python三维数据转换成二维_5大Python可视化库到底选哪个好?一篇文章搞定从选库到教学...
  5. boot idea无法识别spring_idea搭建springboot项目
  6. mybatis 返回 插入的主键
  7. FZU 2095 水面高度
  8. java按钮陷下去_付费?广告?捐款?如何让开源软件活下去?
  9. atheros有线网卡LINUX驱动,请问有知道atheros无线网卡Linux驱动官方下载地址是什么吗?...
  10. Oracle 创建磁盘组报错ORA-15137的问题分析与解决思路
  11. ~~KMP(数据结构)
  12. hihoCoder - 1075 开锁魔法III
  13. 你用java的swing可以做出这么炫的mp3播放器吗?
  14. 编译OpenJDK8:No CONF given, but more than one configuration found in
  15. Openwrt:icmpv6_send: no reply to icmp error
  16. 计算机为何会自动开机,电脑自动开机是怎么回事 电脑自动开机解决方法
  17. 面试被问“你未来的职业规划是什么”,怎样回答最完美?
  18. android中android:wight详解
  19. 本周(12.23-12.29)半价电子书 1
  20. python修改快捷键_Pycharm快捷键设置 更换或者增添快捷键 设置字体放大缩小快捷键...

热门文章

  1. 2009.4.22 speak2me笔记
  2. #软件# focusky动画演示大师
  3. 2022年全球与中国物联网微控制器市场现状及未来发展趋势
  4. ASP.NET Core 配置和使用环境变量
  5. Python表格专题_openpyxl_一蓑烟雨任平生
  6. NSA的攻击,可以做什么?
  7. web前端面试题及答案
  8. PandoraBox(openwrt通用)无线桥接中继扩展
  9. 请用两种java方式显示今天的日期_日期时间显示格式的两种设置方法
  10. 网页截图 API数据接口