- 小程序实用npm包推荐
虽然都说不要重复造轮子, 但还是屡见不鲜, 下面给大家推荐几款实用的小程序npm包, 欢迎各位同志评论区继续补充. 1.mobx-miniprogram, mobx-miniprogram-bindings, 小程序状态管理, 类似于vuex; mobx-miniprogram用于创建状态数据, mobx-miniprogram-bindings用于对页面或组件绑定状态数据;使用文档: https://github.com/wechat-miniprogram/mobx; import { observable, action } from 'mobx-miniprogram'; export const store = observable({ // 数据字段 numA: 1, numB: 2, // 计算属性 get sum() { return this.numA + this.numB; }, // actions update: action(function () { this.numA++; }), }); // 页面使用 import{ createStoreBindings }from'mobx-miniprogram-bindings' import{ store }from'./store' Page({ data:{ someData:'...' }, onLoad(){ // 绑定 this.storeBindings = createStoreBindings(this,{ store, fields:['numA','numB','sum'], actions:['update'], }) }, onUnload(){ this.storeBindings.destroyStoreBindings() }, }) 2.dayjs, 时间处理工具, 包含时间解析, 时间格式化, 时间比较等常用功能, 最重要的尺寸较小, 非常适合移动端来使用, 使用文档: https://dayjs.fenxianglu.cn/category/; dayjs().format('YYYY-MM-DD HH:mm:ss'); // 2022-10-27 13:50:12 dayjs().add(7, 'day') // 7天后 dayjs().isBefore(dayjs('2011-01-01')) // 是否在2011-01-01之前 3.mp-html, 富文本解析利器, 小程序提供的rich-text组件虽然可以解析富文本, 但存在若干缺陷: 1. 文字无法选择; 2. 链接无法跳转; 3.图片无法预览和自适应尺寸等, 使用mp-html可以很好解决上述问题, 使用文档: https://www.npmjs.com/package/mp-html; 1.安装npm npm i mp-html 2.在需要使用页面的 json 文件中添加 { "usingComponents": { "mp-html": "mp-html" } } 在需要使用页面的 wxml 文件中添加
2022-10-27 - 被搜索能力何时才能解除封禁?
我们已于4月18日针对ios小程序内的收费项目进行下架处理,目前已完全符合小程序关于虚拟支付的相关规则,但是站内信的申诉入口已使用且未通过,现在应该如何申诉?
2020-04-22 - 小程序"被搜索能力"被封禁,请问如何才能解除封禁?
你好,我的小程序"被搜索能力"被封禁(appid: wx9195593a0675961d),我已删除违规数据并调用文字内容检查接口检测, 现代码也发布,请问如何申诉解除"被搜索能力”封禁?
2020-05-13 - 小程序"被搜索能力"被封禁,请问如何才能解除封禁?
你好,我的小程序"被搜索能力"被封禁),我已删除违规数据并调用文字内容检查接口检测, 现代码也发布,请问如何申诉解除"被搜索能力”封禁?
2022-05-31 - #小程序云开发挑战赛#-吃药小助-大瘤子战队
应用场景: 1、我们吃药的时候有可能经常忘记吃药,或者吃了之后忘记到底吃没吃药,没关系现在这个问题解决了! 2、在药店买药不知道服用方法,店员可以直接使用本小程序生成药物提醒二维码让买家扫码创建服药提醒。 3、家里药物比较多,家人不知道用法,可以生成药物提醒二维码,打印出来贴在药物上,服用该药物的时候直接扫码创建服药提醒。 -------------------------------------------------------------------------------------------------------- 目标用户: 正服用药物或者保健品的人,或者想提请亲人别忘记吃药的人。 -------------------------------------------------------------------------------------------------------- 实现思路: 添加药物信息之后,算出今天的提醒信息,之后的提醒信息每天零点添加到推送列表,每隔一分钟检测一次是否需有要提醒的信息然后推送 -------------------------------------------------------------------------------------------------------- 架构图: [图片] -------------------------------------------------------------------------------------------------------- 效果截图:[图片] -------------------------------------------------------------------------------------------------------- 功能代码展示:第一次开源代码,多多包涵~ https://gitee.com/love-am/chiyao -------------------------------------------------------------------------------------------------------- 体验版二维码: 请扫描效果截图的二维码 -------------------------------------------------------------------------------------------------------- 视频展示: [视频] -------------------------------------------------------------------------------------------------------- 团队简介: 团队共两人:我和我的女朋友,我负责敲代码她负责设计,我们的初衷就是让记性不好的人别忘了吃药~ 保护好自己的身体健康! 健康最重要! -------------------------------------------------------------------------------------------------------- 感谢大家~ 谢谢支持~ 祝你身体健康,永远也不用我提醒你吃药!
2020-09-03 - #小程序云开发挑战赛#-薇科技弹幕墙-单身狗
云开发挑战赛开源作品——薇科技弹幕墙 一、使用说明: 介绍 该小程序是用于晚会等活动,在大屏幕上显示实时弹幕的弹幕墙,且可以自定义活动的名称、审核弹幕等等; 登录 打开小程序后,无论是新建活动还是发弹幕都需要采集头像和昵称,因此需要点击头部的“点击登录”按钮,进入到登录/授权页面; [图片][图片] 管理 登录完成后可以点击下方标签栏中“管理”标签进入到管理页面,该页面可以新建活动、管理已有活动、审核弹幕等操作; [图片] 新建活动 点击管理页面的“新建活动”按钮进入到新建活动/编辑活动页面:输入活动名称后点击新建活动即可迅速新建一个活动,如果需要设置用户可以发送的弹幕长度(字数),可以修改弹幕限制;如果不需要审核弹幕(用于不是很严谨的活动),可以设置弹幕审核为不审核,不审核之后用户发送的弹幕会直接出现在弹幕墙上;新建活动成功后会看到如下内容:(1)如果需要暂停用户发弹幕,可以设置是否启用为停用,点击保存更新后用户再次发弹幕时会提示管理员暂时停用该活动;(2)活动链接是一个web页面,点击复制链接,并通过粘贴到文件传输助手等方法传到电脑上,复制该链接到浏览器打开即可看到弹幕墙;(3)弹幕码和管理码在点击后可放大,放大后长按图片可保存,扫弹幕码后可发弹幕;扫管理码后可审核弹幕或编辑活动的设置; [图片][图片] 弹幕墙 在这个网页中,当有人发送的弹幕通过审核或者发送了不需要审核的弹幕会立即出现在该页面上,并附带次人的头像、昵称、发弹幕时间;头部会显示之前设置的活动名称,左右两侧会显示总弹幕数及弹幕码,用户在扫弹幕码或者并登录之后可以直接发弹幕(或者输入弹幕码下方的活动ID进入活动);(绝大多数浏览器按F11可网页全屏,效果更佳) [图片] 发弹幕 如果通过扫弹幕码进入发弹幕页面,下方的当前活动后会显示该活动的名称,在登录过后可以直接输入内容发送弹幕;如果未扫码而是点击下面标签栏中“弹幕”标签进入,可以输入活动ID加入到该活动中;上方会显示该用户曾经发过的弹幕;如果评论通过了审核或不需要审核则显示绿色的勾号;如果评论待审核或者未通过审核则显示黄色的感叹号; [图片][图片] 审核弹幕 通过扫新建活动/编辑活动页面的管理码进入到管理页面可以审核需要审核的弹幕;点击绿色的勾号表示通过,点击红色的叉号表示不通过;通过审核的弹幕会出现在弹幕墙上; [图片] 关闭活动 在管理页面点击曾经新建的活动如“某某活动”可编辑活动设置;设置是否启用为停用即可关闭该活动的使用; 二、应用场景 这是一款任何人都可以使用的弹幕墙,在登录之后新建活动就可以获得一个独立的弹幕墙链接,并附带小程序码和活动ID,通过扫码或输入ID的方式可以加入该活动并发弹幕,所发弹幕通过审核后会实时显示在弹幕墙链接中的评论区,用于晚会等互动,后续会继续添加抽奖、签到等常用功能; 三、目标用户 活动的组织者如学校的学生会负责人、公司活动负责人等新建活动管理活动审核弹幕;活动的参与者如学校的学生、公司的员工等可参与活动发弹幕; 四、实现思路 基于云开发watcher的强大性能,让我们用简单的代码实现实时数据的功能,一方面用户发送的需要审核的弹幕会实时显示的管理员的管理页面中,另一方面通过审核的弹幕会实时显示在弹幕墙上; 通过动态的生成小程序码来服务于不同的活动,使得一个小程序能为成千上万的活动所服务; 通过cocoscreator实现弹幕上墙的功能,同时混淆了代码,避免弹幕墙链接中暴露的数据安全问题; 通过静态资源托管服务实现弹幕墙链接的访问; 五、架构图 太简单了没啥好架构的; 六、效果截图 见一中的使用说明; 七、功能代码展示 本作品完全开源,代码托管地址:微信开发者-代码管理 代码中小程序首页使用了开源插件wemark实现帮助文档的markdown语法; 云函数中server_newactivity使用wxacode.get生成小程序码是因为小程序还未上线,但该方法生成的小程序码有数量限制,在上线之后要改成wxacode.getUnlimited,同时需要更改原函数中config.json文件中的permissions,将wxacode.getUnlimited加入到openapi中,移除原先的wxacode.get;改完后重新上传函数,大约会有1-10分钟的缓存时间; 代码中的cocoscreator文件夹是生成弹幕墙web的cocoscreator项目源码,使用2.4.0版本可打开并编辑; cocoscreator导出的web使用tcb工具上传到静态资源托管平台:tcb hosting:deploy . -e envId部署当前文件夹内所有文件到托管平台; 八、作品体验二维码(如已上线) [图片] 九、团队简介 两只单身狗
2020-09-18 - 采用云开发的一款图像识别AI -- 开源
SEA-AI >>>> star 模板使用云开发实现,接入百度AI平台API图像识别系统,无需另外搭建服务器,只需修改文件内配置项 识别前 接入百度AI 图片审核,假如对社会有影响或有害的,直接返回失败 识别后可点击查看相应图片获取百度百科中更关键的内容(云函数爬虫百科内容) 项目介绍 一款方便快捷识别AI,可根据您拍摄或相册中照片识别出您所需要知道的物种(植物,动物,图文,菜品类型),相关知识,帮助您了解该物种,打开新世界! [图片] 特别鸣谢 UI设计师 - Rolland罗兰 欢迎各大公众号关联 小程序APPID - wx162fc6bf32f43f7c 效果预览 [图片][图片][图片][图片] 学习本项目 整套前端使用 Wepy 开发,提倡前端组件化工程化,高效的完成前端项目。 使用说明 申请百度AI 获取Appid,secret 找到文件内的appid,secret , 修改为你微信小程序的appid以及secret 安装使用 安装(更新) wepy 命令行工具。 [代码]npm install wepy-cli -g [代码] 安装依赖 [代码]cd sea-ai npm install [代码] 开发实时编译 [代码]npm run dev [代码] 开发者工具导入项目 使用[代码]微信开发者工具[代码]新建项目,本地开发选择项目根目录,会自动导入项目配置。 上传安装云函数 开发者工具中找到云函数目录上传并部署:云端安装依赖(不上传node_modeles) setBaiduToken 需上传触发器(定时器) 每十五天更新一次token 添加数据库字段 [代码]identification-record token baidu-token user [代码]
2019-05-27 - 答题小程序版本汇总
今天是2022年元旦,回顾过去、展望未来是今天该做的,趁机会,好好梳理下今年的一些输出 关于答题小程序这个专题陆续续在社区发过不少帖子,熟悉的人都清楚,我深耕这个赛道也不短了 从最初的学习到开源再陆续推出后面的一系列版本 在线答题小程序V1.0? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/000680e80d00586571f9226395bc13 在线答题小程序V2.0? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/0000c2407544507c7ef97594756413 在线答题小程序V3.0? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/000cc829fdc11065a15a9e91f56813 答题小程序v4.0? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/0008ee047649c06c784d111ae51413 在线答题小程序V5.0? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/000c4ac3010700c2069ce5bf656813 答题小程序V6.0? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/000c24ff9d8cd8823d9cf9c2e51813 答题小程序V7.0,其实近几天也会马上推出 其中V1.0和V2.0是2020年以前开发的,完全开源版本, V1.0是基于PHP开发的,前后端均开源; V2.0是在V1.0 的基础上用云开发重写了,也是带云函数完全开源 目前开源版本的star在500,对于能获得很多同学们的认可是我不曾预料的,这也从侧面反应出答题这个赛道始终是一个有机会的场景,值得日后不断深耕。 在这7个答题小程序版本中,并不是说每个版本都是在前一个版本的基础上迭代而来的,从V3.0开始,每个版本都是独立于以往的版本,以适应不同的答题场景 V7.0部分截图 ~ [图片] ~ [图片] ~
2022-01-01 - 在线答题小程序V5.0
答题小程序 ~ 首先解释下,这里版本不是一个产品的迭代,而是不同的产品序列,也就是是新的答题小程序产品,而不是一个答题小程序产品不断迭代 产品介绍 该答题小程序分为三级 level1,职业考试 level2,科目 level3,章节 总的来说该小程序中规中矩的,没有太多让人眼前一亮的特性,就是包含刷题小程序的一些基本要素,比如 1、目录选择 2、答题,以及查看答题得分,错题解析等等 3、温故知新错题模块 4、收藏 5、排行榜 6、同时答题分为章节练习和真题模拟 产品界面 ~ [图片] ~ [图片] ~ [图片] ~ [图片] ~ [图片] ~ [图片] ~ [图片] ~ 总结 说点体验下来,对我的一点感触吧,该小程序的目录选择相比我之前的答题小程序而言,这里处理的比较优雅,同时题库目录的二级选择实现方式没有使用vant等一些组件,而是自研开发的 总之该小程序中规中矩的,没有太多说的,但是做为一个面向线下培训机构的刷题小程序而言,该小程序又是十分丰富的,该有的都有了 未来可期,成功可盼, 成功就是在正确的方向上坚持下去
2021-08-09 - 如何使用微信小程序·云开发的Node.js云函数生成Word文档(2021-10-15更新)
编者按 近期一个云开发项目有生成Word文档的需求,经过搜索,发现并没有小程序·云开发有关生成word文档的案例,因为本人还是本科生且非科班出身,一路摸着石头过河,遇到了不少困难,期间还试图向社区的大佬们求助;花了两天时间才搞定这一百行代码,现在分享给大家。 代码有些糙,希望大佬们不要嫌弃。 一、安装云函数依赖officegen、fs 工欲善其事必先利其器,我们知道云函数代码运行在云端Node.js环境中,因此,理论上来说,Node.js能做的事情,小程序·云开发的云函数基本上也能做到。officegen是Github上一款生成微软Office文档的工具,包括.docx、.xlsx、.pptx三种文件,由于我只用了.docx,本文将以Word文件为例。 https://github.com/Ziv-Barber/officegen [图片] 1. 首先我们在微信开发者工具中 新建一个云函数 => 右键云函数名 => 在终端中打开 [图片] 2. npm安装依赖officegen和fs,为了方便本地调试云函数,我们这里也安装wx-server-sdk。 [图片] 代码如下,请逐个安装,如果安装有问题,可以自行搜索“npm”或“npm taobao 镜像” ;这里不再赘述。 npm i officegen npm i fs npm i wx-server-sdk 3. 在云函数index.js开头写下以下代码,引用我们刚刚安装的包。 const cloud = require('wx-server-sdk') const officegen = require('officegen'); const fs = require('fs'); const docx = officegen('docx'); 二、创建Word文档的内容 文档地址: https://github.com/Ziv-Barber/officegen/blob/master/manual/docx/README.md 1. 首先我们根据文档定义(Ctrl CV)两个函数 //文档生成完成后调用,后来其实发现没啥用 // Officegen calling this function after finishing to generate the docx document: docx.on('finalize', async function (written) { console.log('Finish to create a Microsoft Word document.') }) //生成文档出现问题时调用 // Officegen calling this function to report errors: docx.on('error', function (err) { console.log(err) }) 2. 创建段落API: docx.createP(options) //声明一个创建段落的变量p0bj let pObj = docx.createP(options) //创建一个段落并插入文本 pObj = docx.createP({ align: 'center' //文字对齐方式,center、justify、right;默认为left indentLeft = 1440; // 段落缩进 Indent left 1 inch indentFirstLine = 440; // 首行缩进 }) pObj.addText('你要插入的文字,这里可以时变量', { bold: true, //是否加粗,默认false font_face: 'KaiTi', //字体,这里以“楷体为例”,如果填写了打开文档的电脑没有安装的字体名称,将使用默认字体。能不能用中文,我没试过。 font_size: 19, //字号 color: '595959' //文字颜色 }); 上述例子外,还可以添加下划线、设置斜体、超链接、分页等;还可以编辑页眉和页脚、插入图片等。详见后续代码示例或officegen文档。 3. 插入图片 这里以插入小程序码为例,直接上代码。 要注意的是officegen似乎不支持以buffer形式插入图片,因此要先将图片保存。 //首先定义一个用于保存小程序码图片的函数 //save QR saveFile = function (filePath, fileData) { return new Promise((resolve, reject) => { const wstream = fs.createWriteStream(filePath); wstream.on('open', () => { const blockSize = 128; const nbBlocks = Math.ceil(fileData.length / (blockSize)); for (let i = 0; i < nbBlocks; i += 1) { const currentBlock = fileData.slice( blockSize * i, Math.min(blockSize * (i + 1), fileData.length), ); wstream.write(currentBlock); } wstream.end(); }); wstream.on('error', (err) => { reject(err); }); wstream.on('finish', () => { resolve(true); }); }); } //要获取小程序码,首先要修改云函数config.json文件中的云调用权限 { "permissions": { "openapi": [ "wxacode.getUnlimited" ] } } //在云函数main中获取小程序码 //https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.get.html const result = await cloud.openapi.wxacode.getUnlimited({ page: 'pages/check/check', //小程序页面地址,必须是线上版本中存在的页面的完整地址 scene: '', //小程序码参数 width: 240, //小程序码的宽度(是个正方形) }) const QRcode = result.buffer await saveFile('/tmp/qr.jpg', QRcode); // 这里的fileData是Buffer类型,关于路径会在第三部分生成Word文件中解释。 //将图片插入到文档中 pObj = docx.createP() //创建段落 pObj.options.indentFirstLine = 440; //首行缩进 pObj.addImage('/tmp/qr.jpg', { //图片文件路径 cx: 140, //长度 cy: 140 //宽度 }); 三、生成Word文件 文档内容完成后,就可以生成文档了。officegen似乎只能生成文件,没有文件buffer的接口,而要上传到小程序·云开发的云存储中,只能使用Buffer或fs.ReadStream,怎么办呢?先把文件保存下来再读取呗。 首先提一下云函数运行环境 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions/mechanism.html 云函数运行在云端 Linux 环境中,一个云函数在处理并发请求的时候会创建多个云函数实例,每个云函数实例之间相互隔离,没有公用的内存或硬盘空间。云函数实例的创建、管理、销毁等操作由平台自动完成。每个云函数实例都在 [代码]/tmp[代码] 目录下提供了一块 [代码]512MB[代码] 的临时磁盘空间用于处理单次云函数执行过程中的临时文件读写需求,需特别注意的是,这块临时磁盘空间在函数执行完毕后可能被销毁,不应依赖和假设在磁盘空间存储的临时文件会一直存在。如果需要持久化的存储,请使用云存储功能。因此,我们将文件保存在/tmp路径下,文件名随便起,这里我取为exampl.docx。生成文档的代码如下: // Let's generate the Word document into a file: let out = fs.createWriteStream('/tmp/example.docx') // Async call to generate the output file: docx.generate(out) 理论上来说,我们文档生成完毕后,通过fs.ReadFileStream读取文件调用cloud.uploadFile()即可上传到云存储 const fileStream = fs.createReadStream('/tmp/example.docx') return await cloud.uploadFile({ cloudPath: '/tmp/example.docx', fileContent: fileStream, }) 而在测试过程中我发现,云端测试时,云函数调用超时。而后使用本地调试查看问题出在何处。 云函数本地调试的方法不再赘述,看这里即可。https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions/local-debug.html 通过本地调试,发现cloud.uplodaFile()的网络请求始终时挂起(pending)状态,没有传输数据。 [图片] 经过一天的调试,通过监听文件,发现officegen生成文件完成,执行了我们开头复制粘贴的生成文档后执行的docx.on("finalize",)函数,打印文档生成成功的日志后,仍有文件变动,也就是说,文件并没有生成完毕。这就导致了后续步骤的失败。 当时调试的界面我没有保存,就贴一下fs监听文件的代码吧。 let watcherObj = '/tmp/example.docx' //eventType 可以是 'rename' 或 'change'; 当改名或出现或消失的时候触发rename; recursive:是否监听到内层子目录,默认false; try { let myWatcher = fs.watch(watcherObj,{encoding:'utf8',recursive:true},(event,filename) => { if(event == 'change'){ console.log("触发change事件") } console.log(event) //encoding:文件名编码格式,buffer、默认:utf8等;filename有可能为空 if(filename){ console.log('filename: ' + filename) } }) //change 事件会触发多次 myWatcher.on('change',function(err,filename){ console.log(filename + '发生变化'); }); //50秒后 关闭监视 setTimeout(function(){ myWatcher.close() },5000); } catch (error) { console.log('文件不存在!!') } 为解决这一问题,我最先想到了await,结果发现await对officegen生成文档的接口并不起作用;最终我用了最原始的笨办法:用setTimeout等一会儿再读取文件,大佬们有更好的解决方案还请赐教。 return new Promise((resolve, reject) => { setTimeout(async function () { let data = fs.readFileSync('/tmp/example.docx'); let bufferData = new Buffer.from(data, 'base64'); console.log(bufferData); setTimeout(async function () { resolve(await cloud.uploadFile({ cloudPath: varpath, fileContent: bufferData, })); }, 1000); //等文件再读1秒 }, 6300); //等文件再写一会儿。根据自己的需求调试后确定等待时长,要预留出一定时间确保文档完全生成完毕。 }) //最终返回内容为文件云存储中的CloudID。 四、完整核心代码 const cloud = require('wx-server-sdk') const officegen = require('officegen'); const fs = require('fs'); const docx = officegen('docx'); cloud.init({ env: '这里填入你的云环境' }) // Officegen calling this function after finishing to generate the docx document: docx.on('finalize', async function (written) { console.log('Finish to create a Microsoft Word document.') }) // Officegen calling this function to report errors: docx.on('error', function (err) { console.log(err) }) //save QR saveFile = function (filePath, fileData) { return new Promise((resolve, reject) => { const wstream = fs.createWriteStream(filePath); wstream.on('open', () => { const blockSize = 128; const nbBlocks = Math.ceil(fileData.length / (blockSize)); for (let i = 0; i < nbBlocks; i += 1) { const currentBlock = fileData.slice( blockSize * i, Math.min(blockSize * (i + 1), fileData.length), ); wstream.write(currentBlock); } wstream.end(); }); wstream.on('error', (err) => { reject(err); }); wstream.on('finish', () => { resolve(true); }); }); } // 云函数入口函数 exports.main = async (event, context) => { var time = new Date() var filePath = 'exportVoluntaryData' var fileName = "zyzm" + Date.parse(new Date()) + '.docx' var varpath = filePath + '/' + fileName //get QRcode const result = await cloud.openapi.wxacode.getUnlimited({ page: 'pages/check/check', scene: item._id, width: 240, }) const QRcode = result.buffer await saveFile('/tmp/qr.jpg', QRcode); // Add a Footer: var footer = docx.getFooter().createP(); footer.addText('XXXX证明_' + item._id, { font_size: 10 }); footer = docx.getFooter().createP(); footer.addText(time.toString(), { font_size: 10 }); //下方开始文档每一页的循环 for (var i in item.volunteerInfo) { //标题 let pObj = docx.createP({ align: 'center' }) pObj.addText('XXX证明', { bold: true,XXX font_face: 'KaiTi', font_size: 19, color: '595959' }); //此处省略了一些正文内容 pObj = docx.createP() pObj.options.indentFirstLine = 440; pObj.addText('微信扫描下方小程序码,可核验此证明。', { font_face: 'FangSong', font_size: 12, color: '595959', italic: true, }); pObj = docx.createP() pObj.options.indentFirstLine = 440; pObj.addImage('/tmp/qr.jpg', { cx: 140, cy: 140 }); pObj = docx.createP() pObj = docx.createP({ align: 'right' }) pObj.addText('落款', { font_face: 'FangSong', font_size: 15, color: '595959' }); if (i != ((item.volunteerInfo).length - 1)){ docx.putPageBreak() //分页 } } // Let's generate the Word document into a file: let out = fs.createWriteStream('/tmp/example.docx') // Async call to generate the output file: docx.generate(out) return new Promise((resolve, reject) => { setTimeout(async function () { let data = fs.readFileSync('/tmp/example.docx'); let bufferData = new Buffer.from(data, 'base64'); console.log(bufferData); setTimeout(async function () { resolve(await cloud.uploadFile({ cloudPath: varpath, fileContent: bufferData, })); }, 1000); }, 6300); }) } 本人非计算机相关专业本科生,且本文大部分内容为手打,难免会有差错和疏漏,还请各位指教。 希望本文对你有所帮助。 Soochow University. HaoChen. 2020年2月 ======= 2021-10-15更新 ======= 经过一段时间的使用,上述内容主要存在两点问题:(1)难以判断文件何时生成完毕;(2)连续调用生成文档时,若上一个云函数实例未被销毁,会出现文件内容重复和错乱的问题。 前一段时间进行了更新,因为工作学习忙碌,此次暂不做详解,代码如下。 入口文件index.js// 云函数入口文件 delete require.cache[require.resolve('officegen')]; const cloud = require('wx-server-sdk') var office = require('office.js'); //https://github.com/Ziv-Barber/officegen/blob/master/manual/docx/README.md cloud.init({ env: 'sudaxmt1900' }) const db = cloud.database() const _ = db.command // 云函数入口函数 exports.main = async (event, context) => { return await office.genWord(event); } office.jsconst cloud = require('wx-server-sdk') const fs = require('fs'); function delDir(path) { console.log("delete Dir") let files = []; if (fs.existsSync(path)) { files = fs.readdirSync(path); files.forEach((file, index) => { let curPath = path + "/" + file; if (fs.statSync(curPath).isDirectory()) { delDir(curPath); //递归删除文件夹 } else { fs.unlinkSync(curPath); //删除文件 } }); // fs.rmdirSync(path); // 删除文件夹自身 } } readDocx_fs = function (path) { return new Promise((resolve, reject) => { fs.readFile(path,(err,data)=>{ resolve(data); reject(err); }) }) } //save QR saveFile = function (filePath, fileData) { return new Promise((resolve, reject) => { const wstream = fs.createWriteStream(filePath); wstream.on('open', () => { const blockSize = 128; const nbBlocks = Math.ceil(fileData.length / (blockSize)); for (let i = 0; i < nbBlocks; i += 1) { const currentBlock = fileData.slice( blockSize * i, Math.min(blockSize * (i + 1), fileData.length), ); wstream.write(currentBlock); } wstream.end(); }); wstream.on('error', (err) => { reject(err); }); wstream.on('finish', () => { resolve(true); }); }); } exports.genWord = async (event) => { let officegen = require('officegen'); let fs = require('fs'); let docx = officegen('docx'); //ini delDir('/tmp') var item = event.item var filePath = 'exportVoluntaryData' var fileName = "21zyzm" + Date.parse(new Date()) + '.docx' var varpath = filePath + '/' + fileName //=========以下建构文档内容========== //get QRcode const result = await cloud.openapi.wxacode.getUnlimited({ page: 'pages/check/check', scene: item.id, width: 140, }) const QRcode = result.buffer await saveFile('/tmp/qr.jpg', QRcode); // 这里的fileData是Buffer类型 timeBottom = time.getFullYear() + '年' + (time.getMonth() + 1) + '月' + time.getDate() + '日' for (var i in item.volunteerInfo) { let pObj = docx.createP({ align: 'center' }) pObj = docx.createP({ align: 'center' }) pObj.addText('志愿服务时间证明', { bold: true, font_face: 'KaiTi', font_size: 19, color: '595959' }); pObj = docx.createP() pObj = docx.createP({ align: 'justify' }) pObj.options.indentFirstLine = 440; if (item.volunteerInfo[i].academy && item.volunteerInfo[i].major && item.volunteerInfo[i].grade) { var txt = item.volunteerInfo[i].academy + ' ' + item.volunteerInfo[i].major + '专业 ' + item.volunteerInfo[i].grade + ' ' + item.volunteerInfo[i].name + ' 同学(学号 ' + item.volunteerInfo[i].idnum + '),于 ' + date + '参加 ' + item.title + ' 工作,志愿服务时间达到 ' + item.hours + ' 小时。' } else { var txt = item.volunteerInfo[i].name + ' 同学(学号 ' + item.volunteerInfo[i].idnum + '),于 ' + date + '参加 ' + item.title + ' 工作,志愿服务时间达到 ' + item.hours + ' 小时。' } pObj.addText(txt, { font_face: 'FangSong', font_size: 15, color: '595959' }); pObj = docx.createP() pObj.options.indentFirstLine = 440; pObj.addText('特此证明。', { font_face: 'FangSong', font_size: 15, color: '595959' }); pObj = docx.createP() pObj.options.indentFirstLine = 440; pObj.addText('证明人:' + event.tea_info.name + ' ' + event.tea_info.phone, { font_face: 'FangSong', font_size: 15, color: '595959' }); pObj = docx.createP() pObj = docx.createP() pObj.options.indentFirstLine = 440; pObj.addText('微信扫描下方小程序码,可核验此证明。核验信息与此证明一致时,此证明不加盖公章仍然有效;若不一致,则以加盖公章的证明为准。', { font_face: 'FangSong', font_size: 12, color: '595959', italic: true, }); pObj = docx.createP() pObj.options.indentFirstLine = 440; pObj.addImage('/tmp/qr.jpg', { cx: 140, cy: 140 }); pObj = docx.createP() pObj = docx.createP() pObj = docx.createP({ align: 'right' }) pObj.addText('XXXXX', { font_face: 'FangSong', font_size: 15, color: '595959' }); pObj = docx.createP({ align: 'right' }) pObj.addText(timeBottom, { font_face: 'FangSong', font_size: 15, color: '595959' }); // Add a Footer: pObj = docx.createP() pObj = docx.createP() pObj = docx.createP() pObj.addText('XXXXX证明_' + item._id, { font_face: 'FangSong', font_size: 10, color: '808080' }); pObj = docx.createP() pObj.addText(time.toString(), { font_face: 'FangSong', font_size: 10, color: '808080' }); if (i != ((item.volunteerInfo).length - 1)) { docx.putPageBreak() } } //=======================建构文档内容结束========================= // Let's generate the Word document into a file: let out = fs.createWriteStream('/tmp/' + fileName) return new Promise((resolve, reject) => { docx.generate(out); out.on('close', async function(){ console.log("文件已被关闭,总共写入字节", out.bytesWritten) // console.log('写入的文件路径是'+ out.path); var fileBuf = await readDocx_fs(out.path); var upd = await cloud.uploadFile({ cloudPath: varpath, fileContent: fileBuf, }); console.log(docx) resolve({ event, upd, size: Math.floor(100*out.bytesWritten/1024)/100 + "KB" }) }); out.on('error', (err) => { console.error(err); reject({ errMsg: err }) }); }) }
2021-10-15 - [开盖即食]九宫格抽奖component组件分享
[图片] 这次继续分享第二个抽奖组件,参考了网上多个版本,本人根据实际工作中进行了一些优化,并将其做成component组件方便大家食用~ [图片] 1、现在上吃的,呸,上代码 页面引用部分: [代码]<!-- 数据是根据外部配置的,同时也修改组件自定义callback返回内容 --> <LuckComponent lucks-data="{{lucksData}}" bind:callBack="luckCb"></LuckComponent> <view class="roll">当前抽奖结果index:{{luck_num}}</view> [代码] [代码]Page({ data: {}, onLoad() { //在这里配置显示数据,未来还能添加图片等等 let lucksData = [{ //这里修改后,可以通过后台请求配置 "key": "baofu", "name": "暴富", "indexli": 1 }...]; this.setData({ lucksData }) }, /** * 结果回调函数 * @param {*} e */ luckCb(e){ console.log(e); if(e.detail){ this.setData({ luck_num:e.detail }) } } }) [代码] Component组件部分 [代码]<view class="luck_box"> <view class="luck"> <view class='li {{amplification_index===item.indexli?"indexli":""}}' wx:key="item" wx:for="{{lucksData}}"> <!-- 开始 --> <view bindtap="startrolling" class="startrolling" wx:if="{{item.indexli === -1}}"> <view class="st1">抽奖</view> </view> <block wx:if="{{item.indexli !== -1}}"> <view class="setup_title"> <view class="txt">{{item.name}}</view> <view class="index">当前index:{{item.indexli}}</view> <view wx:if="{{item.parentsClass}}" class="^parentsClass">{{item.parentsClass}}</view> </view> <view class="indexli_view"></view> </block> </view> </view> </view> [代码] [代码]Component({ /** * 组件的属性列表 */ properties: { lucksData: { type: Array, value: [] }, }, /** * 组件的初始数据 */ data: { amplification_index: 0, //轮盘的当前滚动位置 roll_flag: true, //是否允许滚动 max_number: 8, //轮盘的全部数量 speed: 300, //速度,速度值越大,则越慢 初始化为300 myInterval: "", //定时器 max_speed: 40, //滚盘的最大速度 minturns: 8, //最小的圈数为2 runs_now: 0, //当前已跑步数 luck_num: 0, // 中奖位置!!!!!!!!!!!!!!!!!!!!!!!!! end_amp: 0, //上一次滚动的位置 start_flag: true, lucksData: [], //这里是渲染数据 }, /** * 组件的方法列表 */ methods: { //开始滚动 startrolling: function () { let _this = this; //roll点 let random = parseInt(Math.random() * 8 + 1); if (this.data.start_flag == true) { _this.setData({ luck_num: random, start_flag: false }) //初始化步数 _this.data.runs_now = 0; //当前可以点击的状态下 if (_this.data.roll_flag) { _this.data.roll_flag = false; //启动滚盘, _this.rolling(); } }; //回调行数,把结果传出去 this.triggerEvent('callBack', random); }, //滚动轮盘的动画效果 rolling: function (amplification_index) { let _this = this; this.data.myInterval = setTimeout(function () { _this.rolling(); }, this.data.speed); this.data.runs_now++; //已经跑步数加一 this.data.amplification_index++; //当前的加一 //获取总步数,接口延迟问题,所以最后还是设置成1s以上 let count_num = this.data.minturns * this.data.max_number + this.data.luck_num - this.data.end_amp; //上升期间 if (this.data.runs_now <= (count_num / 3) * 2) { this.data.speed -= 30; //加速 if (this.data.speed <= this.data.max_speed) { this.data.speed = this.data.max_speed; //最高速度为40; } } //抽奖结束 else if (this.data.runs_now >= count_num) { clearInterval(this.data.myInterval); this.data.roll_flag = true; this.setData({ end_amp: _this.data.amplification_index, start_flag: true }) if (_this.data.is_selected == 0) { wx.showModal({ title: '很遗憾', content: _this.data.prize_name, showCancel: false, success(res) { } }) } else if (_this.data.is_selected == 1) { wx.showModal({ title: '恭喜您', content: _this.data.prize_name, showCancel: false, success(res) { } }) } } //下降期间 else if (count_num - this.data.runs_now <= 10) { this.data.speed += 20; } //缓冲区间 else { this.data.speed += 10; if (this.data.speed >= 100) { this.data.speed = 100; //最低速度为100; } } if (this.data.amplification_index > this.data.max_number) { //判定!是否大于最大数 this.data.amplification_index = 1; } this.setData(this.data); }, } }) [代码] 2、食用指南 可以通过 [代码]<slot>[代码] 、 [代码]^class[代码] 和 [代码]~class[代码] 等方法外部配置组件的样式,使其能在多个地方复用 如果还想配置如起始点,速度等,可以统一通过option传参的方式,二次开发下这个组件。 可以通过修改组件让callback返回更多参数 [图片] 3、具体代码片段 地址: https://developers.weixin.qq.com/s/a5NiCwms7gpI 建议将IDE工具升级到 1.03.24以上,避免一些BUG [图片] 如有疑问请留言~ 觉得有用,请点个赞哦,让我继续分享更有动力~
2021-04-13 - 仅限公众号粉丝抽奖的技术实现原理
仅限公众号粉丝抽奖的技术实现原理 ~ 前几天体验了下抽奖助手的付费高级功能,其中有一项就是公众号粉丝抽奖,我对这个功能的技术实现一直没有理清,因为抽奖助手是无法拿到当前参与抽奖用户是否是活动方公众号粉丝的权限,因为属于不同的主体 那么抽奖助手是怎么做到的呢? 带着这个问题我两个晚上没有合眼?就在刚刚,我在看相关文章的时候,想明白了这里面的道道,操作路径和技术原理,现在分析给大家听 ~ ②设置仅公众号粉丝参与 设置添加授权的公众号,再设置回复关键词。此功能不能与组队、表单条件同时设置。 ~ 上面这句话很关键 1 [图片] 1 [图片] 1 [图片] 1 参考文章 1)微信抽奖助手操作流程(全攻略) https://mp.weixin.qq.com/s/X8oUT7ztDnfUxN8IW6GXqA 2)如何设置必须关注公众号,才能参与红包抽奖? https://mp.weixin.qq.com/s/cAiiWZSTKDCGudLkc_C1iA
2021-01-05 - 小程序流量主、小程序广告、分成策略、结算方式介绍
小程序广告分类 小程序广告按照不同的展示形式分为:banner广告、视频广告、激励式广告、插屏广告 小程序banner广告 产品特点 支持多种广告样式与推广目标 与公众号底部广告一致的样式标准,便于在小程序流量场景中高效投放 流量主结合不同小程序特点,自定义广告展现场景,提升广告的场景融合度 适用场景 banner广告展现场景由小程序流量主自定义,根据各自小程序的特点,灵活设置展现页面与位置。banner广告的常见展现场景为:文章页 - 文章末尾、详情页 - 页面底部、信息流 - 信息流顶部或信息流之间。 示例 [图片] 小程序激励式广告 产品特点 视频默认有声播放 支持视频素材(横屏/竖屏)投放 流量主结合不同小程序(包含小游戏类目)特点,涉及与小程序产品流程、小游戏情节及玩法深度结合的互动广告形式,并通过激励合理引导用户查看视频广告 适用场景 激励式广告展现场景由小程序流量主自定义,根据各自小程序的特点,深度结合场景与情节,用户在查看广告后可获得相应激励奖励。 激励式广告的常见展现场景为:积分/金币奖励、解锁新功能、通关/进阶、道具体验。 示例 [图片] 小程序插屏广告 产品特点 插屏广告,是指小程序在特定场景切换时以卡片方式弹出的广告形式 当用户触发流量主指定场景时,插屏广告就会自动向用户展现,同时支持用户随时关闭插屏广告 适用场景 插屏广告展现场景由小程序流量主自定义,无论是竖屏小程序还是横屏小程序,都可以基于用户实际的操作场景接入插屏广告组件。 插屏广告的常见展现场景为:切换tab时、流程结束页面、视频播放停顿页面等。 示例 [图片] 小程序广告分成策略 不同广告类型的分成模式不同具体如下所示 Banner广告的分成模式如下: 根据用户的每一次广告点击,平台收取广告费用并与流量主分成。100W元以下广告流水,按照5:5分成,100W元以上广告流水,按照3:7分成(流量主3成),分成不设封顶。 实际分成以后台“数据统计”页面展示为准 视频广告、插屏广告、激励视频广告 按照每一千次有效的广告曝光,平台收取广告费用并与流量主分成。100W元以下广告流水,按照5:5分成,100W元以上广告流水,按照3:7分成(流量主3成),分成不设封顶 实际分成以后台“数据统计”页面展示为准。 小程序广告收入 小程序广告当天收入会在第二天推送到微信中 [图片] 单个小程序收入明细(mp后台可查看) [图片] [图片] 当天收入汇总(mp后台可查看) [图片] 小程序广告收入结算方式 为提升流量主收入结算效率,从2019年11月收入结算开始,做出以下调整: 1. 流量主收入结算周期从1个月缩短至半个月,即每月结算2次,出具2份结算单。 2. 我们将在次月1号和次月15号之前,分别发送上半月和下半月的结算单。 3. 企业、组织等非个人主体还未开具发票的收入(包括历史月份),须按结算单金额分别开具发票,若是相同月份,则可合并开票。 如:10月结算单500元,11月结算单上半月300元、11月下半月300元。 流量主可按结算单金额开具3张发票,也可按月分别开具500元和600元两张发票,但不可合并开具一张1100元的发票。 备注 以上多参考微信官方 https://mp.weixin.qq.com/promotion/readtemplate?t=notice/detail_page&time=1575340587¬ice_id=634169
2020-04-14 - 小程序流量主以及小程序不同广告位的特点介绍
近期在看微信学院学习的过程中,突然发现一个好的课程,分享给各位 流量主小程序 本课程共四节,将分阶段为开发者展示如何开通流量主功能、如何接入广告组件、不同类型小程序接入的建议,以及如何通过工具调优小程序变现效率。 https://developers.weixin.qq.com/community/business/doc/00088624e144884b71898d5d75440d 第一课,主要为开发者分享什么是微信广告流量主,以及开通流量主后如何进行收入结算,希望帮助开发者更好地理解流量主生态,解决日常广告组件接入与结算过程中的问题。 第二课,主要为开发者介绍什么是小程序广告组件,以及广告组件的操作方式。 第三课,主要为开发者介绍不同小程序广告组件的特点,以及常见的两大类小程序广告组件接入场景建议。 第四课,主要为开发者介绍数据看板调优工具的使用方式,以及如何借助数据看板优化小程序变现效率,希望帮助开发者获得更好的广告收入。另外也介绍了如何在微信广告进行广告投放的流程,为开发者提供用户增长助力。 [图片]
2020-02-28 - 小程序流量主、广告位类型和广告收益分析
小程序流量主、广告位类型和广告收益分析 ## 本文介绍 最近在小程序的几个微信群,经常有朋友问到以下几个问题 1、小程序怎么盈利 2、小程序流量主是什么以及怎么开通 3、小程序广告有哪些类型,哪种广告类型相对收益最大 4、 ## 小程序如何盈利 目前对个人小程序开发者而言,只有通过开通流量主,并且按照官方规范要求添加广告位,才能获取收益,当然打赏除外。 ## 什么是流量主如何开通 流量主是微信对外提供的一个服务,通过开通流量主,就可以在小程序合适的位置引入广告位,进而实现收益 登录公众号后台( https://mp.weixin.qq.com/ )在左侧菜单中,找到 推广-流量主,点击进去会看到如下截图 [图片] 小程序流量主: 1.开通条件:小程序累计独立访客(UV)1000以上,且无违规记录,即可开通流量主功能。 温馨提示:如满足条件仍无法开通,可能是数据同步问题,建议等待1-2个工作日后再试。 2.申请方法:进入微信公众平台小程序后台,点击左侧面板“流量主”,满足开通门槛的小程序开发者点击“开通”,提交财务资料,待审核通过后成功开通流量主功能,即可创建相应的广告位。 3.广告接入指引: 广告接入可查看: 微信小程序广告接入指引 在开通流量主的过程中,会绑定个人银行卡,以方便进行后续的广告收益结算,目前结算每月两次,具体官方公告可以查阅 [流量主结算周期及开票规则调整说明][2019-12-03发布] https://mp.weixin.qq.com/promotion/readtemplate?t=notice/detail_page&time=1575340587¬ice_id=634169 ## 广告类型有哪些 Banner激励式视频插屏视频广告前贴视频 以下为各广告类型,截图示例, [banner广告] [图片] [插屏广告] [图片] 视频广告 [图片] 由于插屏广告会影响用户体验,所以不建议放太多场景使用。 具体不同类型广告体验,可以扫码 [图片] 首页模块-->>插屏广告使用说明-->>视频广告关于我们-->>banner广告 ## 哪种广告类型收益相对最大 [图片] 在10月30号,将banner广告同一替换为激励式视频广告和视频广告,收益很明显从30元上升到90元、150元 可以看到视频广告相对于banner广告,对于收益增加是有用的。 下图是某小程序12月4号一天的收益数据 [图片] 12月4号一天,不同广告类型,收益分析 总收益 194.74+23.27+147.82=365.83 具体分拆来看 广告类型点击量总收益单个点击收益(元)banner1956194.740.099插屏广告6223.270.375激励式视频广告152147.820.972 通过上图我们对比分析,不难得出以下结论:激励式视频广告单个点击的收益最大、 当然我们不能通过单一维度来了解哪种收益最好,还要综合考虑,比如哪种广告对用户影响最小,毕竟不管哪种方式,广告的接入肯定会带来交互体验上的障碍, 我们必须在交互体验和广告收益这两者之间做好权衡。 ## 系统公告 激励式广告于7月31日支持30秒视频素材,广告流量将逐步放开,MP后台-广告位管理模块可支持选择6-15秒视频或6-30秒视频素材的功能,请流量主根据产品进行调整。程序视频广告已于9月4日正式全量上线,开通后即按广告曝光获得分成收入,进一步提升流量变现收益。小程序视频前贴广告组件已于8月30日正式全量上线,开通后即按广告曝光获得分成收入,进一步提升流量变现收益。## 官方文档 小程序广告组件流量主操作指引https://wximg.qq.com/wxp/pdftool/get.html?id=BJSyDkLqz&pa=14&name=miniprogramAds_supplier_manual应用规范https://wxa.wxs.qq.com/mpweb/delivery/legacy/pdftool/get.html?id=rynYA8o3f&pa=10&name=miniprogramAds_supplier_guidance小程序流量主应用规范https://wximg.qq.com/wxp/pdftool/get.html?id=rynYA8o3f&pa=10&name=miniprogramAds_supplier_guidance处罚标准https://wxa.wxs.qq.com/mpweb/delivery/legacy/pdftool/get.html?id=BkTGkbs2G&pa=1&name=miniprogramAds_supplier_regulation小程序视频广告流量主指引https://wximg.qq.com/wxp/pdftool/get.html?post_id=1317小程序视频前贴广告流量主指引https://wximg.qq.com/wxp/pdftool/get.html?post_id=1318## 总结三点 从纯收益的角度来讲,在各种广告类型中,视频广告(包含激励式视频广告、视频广告、视频前贴广告)要比banner广告要好,而且好很多从用户体验来讲,插屏广告是首次打开带插屏广告的页面强制弹出的,但是广告过后,在页面是不占空间的,这是区分与其他广告的地方,banner广告、激励式视频广告、视频广告、视频前贴广告都是在页面中占固定的空间的,这一点要小程序运营同学权衡。Banner广告是按点击,激励式视频、视频广告、插屏广告都是按照曝光来收取广告费用的,这一点非常重要,难怪我每次手工点击我的视频广告没有见流量的增加[哭脸.jpg]。[感谢 @ 仙森 补充于2019年12月9号] 虽然对个人开发者而言,我们开发小程序的目的是为了收益(当然也有为了情怀而开发),在了解如何收益的情况下,我们还是应该尽量把精力放在小程序本身的开发上面。 感谢 在此特别感谢,小程序运营讨论群的两位小伙伴,微信号中间两位已打码 1、@迭戈 (yang_##chun) 2、@风猫 (cs##26)
2020-12-25 - 抽奖助手小程序v2
本文背景 开发抽奖助手小程序已有一段时间了,前期开发主要基于某开源抽奖小程序,后面慢慢迭代,核心逻辑基本都已重写,目前已适应用户较大的抽奖,可支持3000-5000用户参与抽一个奖,每天释放20个抽奖活动,就是5000*20=100000的抽奖记录 本文内容 近期又对该抽奖助手小程序进行前端界面的迭代,给大家释放一个目前版本的小程序截图, [图片] 功能介绍 v2版本的抽奖小程序支持以下三种开奖方式 [图片] 为了更好的方便小程序嵌入公众号,参考了抽奖助手的以下设计 [图片] [图片] 本文总结 在前端界面开发过程中,主要参考的就是目前的抽奖助手小程序,由于我个人开发的抽奖小程序适合于个人主体运营,所以在小程序内不提供抽奖活动的发布功能,但是其他界面在提供功能能跟抽奖助手靠就要靠一些。 我要做的是一个个人精简版的抽奖助手小程序
2020-11-07 - 开源成语答题小程序
开源成语答题小程序采用云开发,无需搭建服务器,无需域名即可使用云端能力。目前小程序集成微信banner广告,视频广告,插屏广告,激励视频广告等功能,方便运营者赚取广告收益.。 本开源成语答题小程序模仿成语答题赚小程序,首先感谢成语答题赚小程序作者能开发出如此好的作品,可以让我们更好的借鉴和学习。 猜成语答题小程序一直被很多人休闲娱乐,成语小秀才更是占据整个小程序榜单首位,成语简单又可以学习,让很多人都钟情于它。 本开源答题小程序代码有几大特点: 开发过程中考虑到云开发的免费额度,所以开发设计中以减少数据请求次数,减少云函数调用为特点,用更少的调用次数服务更多的用户。让免费额度可以服务更多的用户。 图片展示:[图片] [图片] [图片] 成语答题已完成功能 成语答题小程序成语答题发放红包(可设置几题发放红包,每题设置红包数额)观看激励视频获取金币(限制每天观看次数)成语答题小程序排行榜红包兑换物品设置更多软件推广集成banner 视频广告,插屏广告,激励视频广告等 开源成语答题小程序:https://gitee.com/yingwuniao/chengyu 开源闯关答题小程序:https://gitee.com/yingwuniao/chuangguan
2020-10-25 - 腾讯的一小步,开发者的一大步:说一说Cloud.CDN
最近在文档中偶然发现了这么一段,测试完之后,居然情不自禁的想要夸一下腾讯: [图片] 故事是这样的: 很久之前,我们小程序上有图片上传前做安全检测的需求,选择的是云函数的实现方案,图片压缩后直接以Buffer的形式传递。刚上线的几个月,一切运行正常,可是突然某一天(几个月前)开始,陆续有用户反馈上传会失败,当然也不是100%失败,个别幸运儿还是可以成功的。排查发现,是小程序在调用云函数的时候报错了(为了写文章,异常都是最新截图的), 第一种形式的异常(安卓):errCode: -404012 polling exceed max timeout retry. 说“ 超过了超时重试的最大次数”,如果真的以为是暂时的网络不好或者云函数那边临时出了什么状况,等待你的将是现实的沉痛一击,因为它从此再也没有好过: [图片] 第二种形式的异常(iOS):errCode: -1 | errMsg: cloud.callFunction:fail Error: data exceed max size. 说“数据超限了”,意思是嫌弃传的图片太大了,恐怕这也是导致安卓上报超时的原因: [图片] 以前都是好的,突然从某一天开始就不行了,后来,终于在等待中明白,应该是腾讯收紧了cloud.callFunction的数据大小限制,再也没有放宽... 由于这个功能比较次要,用得也少,就一直没改,直到最近才腾出手来。本来已经决定要采取图片先临时传到COS,再把COS URL传给云函数的方案了,但是在做之前想搞明白callFunction的数据大小限制上限到底是多少,居然几十K的图片都传不了,以前的文档是啥也没写的,但出于习惯,我又翻了下文档,于是看到了那段让人惊喜的文字,它的意思是,我们准备要做的这个功能,腾讯用"wx.cloud.CDN"已经提供了!!! 跳到对应的文档链接,说是从2.12.0也就是最新版的基础库开始支持,虽然2.12.0现在占比只有60%多,但会一天天增加。 [图片]https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/utils/Cloud.CDN.html 那就来看看它的效果如何吧,调用超级简单: [图片] 调用结果如下,图片会先传到CDN,然后再拿返回的临时图片URL传给cloud.callFunction: [图片] [图片] 完美!callFunction的传输上限我已经不再关心了~
2020-07-19 - 图片安全鉴定,传什么图返回的都是ok,审核也不给通过,怎么回事呢?
各种图片都测试了
2020-08-26 - 通过security.imgSecCheck实现图片安全识别
1.云函数 1.1配置config.json,需要做一个授权的配置。 "permissions": { "openapi": [ "security.imgSecCheck" ] } 1.2编写云函数代码 // 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 云函数入口函数 exports.main = async (event, context) => { try { const checkImgResult = await cloud.openapi.security.imgSecCheck({ media: { header:{'Content-Type':'application/octet-stream'}, contentType: 'image/png', value: Buffer.from(event.value) } }) return checkImgResult } catch (err) { return err } } 2.本地js调用 2.1选取需要检测的图片 //选取需要检测的图片 checkImage(){ let that = this wx.chooseImage({ count: 1, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], success(res) { let tempFilePaths = res.tempFilePaths console.log(tempFilePaths) that.getFileBuffer(tempFilePaths[0]) }, fail(err) { console.log(err) } }) } 2.2获取临时文件的buffer 注意事项:图片security.imgSecCheck 方法只可以接收buffer,所以需要把临时图片转化为buffer的形式进行传递,因此需要用到 getFileSystemManager 的方法 //获取临时图片buffer getFileBuffer(tempFilePaths){ let that = this wx.getFileSystemManager().readFile({ filePath: tempFilePaths, success: res => { console.log('getFileBuffer执行成功',res.data) that.cloudCheckImage(res.data) }, fail:err => { console.log('getFileBuffer执行失败',err) } }) } 2.3调用云函数检测图片 注意事项:需要注意的是用微信自带API做图片安全检查,图片大小不能超过1MB //调用云函数检测图片是否违规 cloudCheckImage(buffer){ wx.cloud.callFunction({ name: 'checkImage', data: { value: buffer }, success(res) { console.log('cloudCheckImage执行成功', res) if (res.result.errCode == 87014) { wx.showToast({ title: '图片有违法违规内容', icon: 'none' }) } else { wx.showToast({ title: '图片通过审核', icon: 'success' }) } }, fail(err) { console.log('cloudCheckImage执行失败',err) } }) }
2020-05-08 - #小程序云开发挑战赛#-萌宠创造营-我是咸鱼
1 应用场景及目标用户 “萌宠创造营”微信小程序的主要为想养宠物却暂时没有条件实现的人群提供一个虚拟养宠场景,使用户先在虚拟场景中体验养宠生活,然后获取一定养宠知识后再去养宠物。 该小程序通过提供虚拟领养萌宠、AR躲猫猫、虚拟喂食以及与宠物对话等功能让用户真切体验养宠物的过程,通过培养用户的陪伴觉知、增加养宠知识来培养用户的养宠责任心,对领养宠物承担一定的职责。本小程序主要针对人群为没有经验而不敢养宠物或者只是想“虚拟”体验养宠等因为各种原因暂时无法真正养一只宠物的爱宠人士。 2 创新点(1)“AR躲猫猫”是一个创意与技术方面都具有创新的功能模块。在创意方面,打开摄像头之后宠物的位置是未知的,用户带着好奇心探索宠物位置是一个有趣的体验,同时在现实意义上提醒用户与宠物进行肢体互动。在技术方面,基于webgl的threejs在小程序平台上运行对模型的要求很高,模型制作与threejs适配的方法也是创新点之一。 (2)“宠物说话”的语音由开发者使用“小黄人”特效变声器录制,两条必做语音之后是四条循环语音,新颖有趣。 (3)“遛弯”结合微信步数API,步数大于100才可以打卡,步数的范围不同,宠物有话说的内容也不同,这样个性化的设置具有创新性。 (4)参加“结业考试”并获得绿卡是升华整个小程序重要的部分,不仅在小程序里可以休闲娱乐、学到养宠知识,还能通过测试检验是否具备养宠的基本知识,使用户有清晰的认知。正如平时谈到原生家庭道“做父母的应该有个考试”,谈到养宠道“做一个合格的铲屎官应该有个考试”,本小程序实现了这一想法,是一个创新。 3 架构图 [图片] 模块图 [图片] 业务流程图 4 实现技术(1)AR技术:本小程序在“AR躲猫猫”中使用的AR技术是用threejs技术将gtlf格式的3d模型显示在canvas组件中,并且开启摄像头,实现AR效果。 (2)获取微信步数:执行wx.getWeRunData,将cloudID传给云函数,获取近30日步数信息。 (3)生成海报:绘制canvas,将用户头像和昵称绘制上去之后将canvas转换为图片用canvasToTempFilePath方法保存到本地。然后将图片路径传给image图片的src。 (4)养宠考试:所有题目用json文件存储,随机打乱显示题目,完成一题就将加得分,错误就将题号加入错题数组。 (5)宠物说话:判断投喂与遛弯的状态,根据状态调取语音内容,用户调用wx.createInnerAudioContext().src设置播放路径,wx.createInnerAudioContext().play()播放语音。 5 运行截图 [图片] 欢迎页面 [图片] 创造专属萌宠 [图片] 进入小窝 [图片] 点击嘴巴或者点击“投喂” [图片] 遛弯打卡 [图片] 养宠饲养指南列表 [图片] 指南详情页 [图片] AR躲猫猫-等待萌宠出现 [图片] 找到萌宠 [图片] 图5-6 生成海报 [图片] 图5-7 积分达到100分时的提醒 [图片] 点击“永不提醒”,用户需手动点击绿字进入考试 [图片] 答题界面 [图片] 超过80分可以点击领取绿卡 6 团队简介 我是咸鱼队是由 北京邮电大学的两小只程序媛组成。佛系参赛,多多关照。
2020-09-16 - #小程序云开发挑战赛#-流浪猫速查手册-猫
项目背景 今年5月中下旬,作者在网上发现了一款非常有爱的小程序,叫做《燕园猫速查手册》,因为作者本身也参与流浪猫的救助工作,流浪猫的管理主要是靠记忆,非常不方便管理,于是用业余时间参考《燕园猫速查手册》开发了《流浪猫速查手册》小程序,主要针对的是社会上的流浪猫信息的管理。后续也会开放 [代码]领养[代码] 等模块,致力于倡导大家关爱流浪猫,领养代替购买。 6月1日上线了 [代码]1.0.0[代码] 版本,小程序中只有查看功能,配套也开发了一个 [代码]PC[代码] 管理端,上线后发现志愿者和救助站等人员不习惯使用 [代码]PC[代码] 端操作,也发现了很多细节问题,如流浪猫的隐私保护等。 8月中旬本作者和《燕园猫速查手册》的作者 circle 在微信中聊了聊,重新梳理的整个小程序的功能模块,也趁此机会报名参加了 [代码]云开发挑战赛[代码],重构了 [代码]1.0.0[代码] 版本的代码,并迭代了 [代码]2.0.0[代码] 版本。 应用场景 为了方便管理流浪猫的信息,把流浪猫的信息分享给喜爱猫咪的小伙伴,流浪猫信息的上报等。 目标用户 所有喜欢猫的用户 功能模块 [图片] 实现思路 本项目前端采用 uni-app 框架开发,后端完全采用 微信小程序云开发 实现 业务流程图 [图片] 功能演示 腾讯视频:https://v.qq.com/x/page/w3153x67dxh.html 效果截图 [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] 代码链接 GitHub: https://github.com/zhiiee/cats 开源许可 《流浪猫速查手册》的源代码基于 [代码]GPL-3.0[代码] 协议全网开源,可用于商业用途,如果您使用了《流浪猫速查手册》的源代码,那么您的项目必须遵守 [代码]GPL-3.0[代码] 协议进行全网开源,点击 LICENSE 查看许可协议。 体验二维码 线上版本 最新版本还在审核中 可以扫描下面的体验版本申请访问 [图片] 体验版本 同步最新的开发进度(生产环境) [图片] 团队/作者简介 Stephen: 一个热爱宠物,兼职创业,想获得一次天使轮投资,在宠物行业闯出一片天的程序员。
2020-09-20 - #小程序云开发挑战赛#-古老的API小工具-归藏易文化
连山阁小工具库用常见的API组合成一个小程序,其中包含了约40条API功能。除去集合在小程序上的小图片代码,代码大小约为80K之内。使用API与使用腾讯云数据库展示的前端展示方法其实基本是一致的,区别只在于数据放在哪里,从哪里去调用数据。 [图片] 在小程序上的主要表现为: 实时刷新:获取服务器数据之后,实时更新页面状态 [图片] 专项查询:分类数据,搜索后返回页面结果 [图片] 问答展示:服务器获得数据之后,客户端采用问答的形式展现 [图片] 使用小程序云数据库的功能为: 为用户提供简单的收藏移除小工具[图片] 由于每个企业可能制作很多不同的小程序,根据推广的需求,在小工具的底部配置了根据不同的参数跳转到不同的小程序。 提供三种不同的展示模式: 1、不展示默认的底部 [图片] --------------------------- 扫码查看案例 ---------------------------- [图片] 2、需要展示的名称在页面顶部和底部出现 [图片] --------------------------- 扫码查看案例 ---------------------------- [图片] 3、展示企业LOGO和文案,并在底部展示跳转 [图片] --------------------------- 扫码查看案例 ---------------------------- [图片] 开源地址:https://git.weixin.qq.com/it-v/kz
2020-09-26 - #小程序云开发挑战赛#-心灵鸡汤大全-小斌
应用场景 在这个压力巨大的社会,每个人都有自己的负面情绪、迷茫以及不知所措,因此,拯救心灵的 心灵鸡汤小程序 诞生啦~ 功能 点赞、收藏、评论、搜索、通告、生成海报、后台管理、定时爬取数据 效果截图 首页(tab 、搜索、分页) [图片] 详情页(收藏、点赞、评论、生成海报、复制文案、保存图片) [图片] 海报 [图片] 个人中心 [图片] 后台管理 [图片] 可用订阅消息数量 [图片] 公告管理 [图片] 评论管理 [图片] 收藏点赞 [图片] 关于 [图片] 代码链接https://gitee.com/wuxuebin/chicken-soup 扫码体验[图片] 视频地址 https://www.iqiyi.com/v_247r8nfgogo.html 团队简介 个人开发
2020-09-22 - #云开发挑战赛#-CEnews-关于我啥也不懂来比赛这档事
作品简介作品介绍CE双语新闻,中英无门槛快速阅读,文章点击自动翻译,最新资讯随时看,陌生单词一点明。应用场景本作品提供优质正规新闻,使用中英双语呈现内容,随时收藏分享;遇见陌生单词,点击即可查询,支持添加至单词本,随时复习。当您空闲下来掏出手机想阅读最新资讯,又不想被“震惊”标题党轰炸时,当您想要学习英文,但又被生涩难懂的原文阻扰时,本作品便是您使最好的选择。目标用户想要阅读到优质新闻的群体;想要入门英文阅读的群体实现思路[图片] 架构[图片] 应用截图首页 [图片] 新闻页(收藏,分享) [图片] 翻译查词(点击单词即可)[图片] 频道(新闻分类) [图片] 查词[图片] 个人页(需登录) [图片] 我的收藏(文章) [图片] 我的单词 [图片] 浏览记录 [图片] 问题反馈 [图片] GitHub 开源地址https://github.com/1660745802/CEnews 欢迎大佬们指点!
2020-09-01 - #小程序云开发挑战赛#-人脸识别虚拟仿真实验-科学探索小队
项目封面[图片] 项目背景 目前,人工智能是一个极其热门的专业,但是对于一些刚入学的大一新生或者刚接触计算机行业的人来说,人工智能的说法过于抽象,不能很好的理解人工智能的具体概念。在此次实验中,我们以人脸识别为例,通过对卷积过程的可视化展现对他们进行一个基础入门学习的引导。首先需要登陆我们的学号来进行实验,本实验的数据集是由100张人脸组成,其中80张为训练集,训练人脸识别模型;剩余20张作为测试集,测试模型分类效果。通过基于主成分分析(Principle Component Analysis,PCA)的卷积神经网络PCANet进行图片特征提取,然后送入大间隔分类器(Large Margin Classifier,LMC)进行训练最终得出训练结果。通过对于人脸识别过程的可视化,增强用户对人工智能,尤其是卷积神经网络和主成分分析中相关概念的理解。 项目原理流程[图片] 项目页面介绍[图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] [图片] 项目后端服务1. 技术选型在本小程序中,后端服务采用了以下主要技术及框架: GolangGingorm 2. 接口集合查找题目请求路径:/crmProblems/findCrmProblems请求方式:Get 学生登录请求路径:/base/login请求方式:Post 获取图形验证码请求路径:/base/captcha请求方式:Post Token 失效请求路径:/jwt/jsonInBlacklist请求方式:Post 获取实验结果请求路径:/crmFaceRecognitionResult/findCrmFaceRecognitionResultByOptions请求方式:Get 提交实验记录请求路径:/crmUsersExperiments/createCrmUsersExperimentsFromUser请求方式:Post二、小程序服务1. 技术选型 在本小程序中,采用了以下主要小程序相关技术及框架: JavascriptTaroD.VA2. 关于目录2.1 组件目录[图片] 组件目录基于原子性原则,针对页面抽离了不同的组件,以便于后期的复用与维护。 2.2 页面目录[图片] 页面目录包含了所有用户可视的源代码文件。 2.3 工具目录[图片] 工具目录包含了所有辅助小程序稳健运行的工具函数。 项目体验二维码[图片] 项目团队/分工 此次参赛团队共分有两人,分别是耿雪纯、陈鹏宇。具体分工如下: 耿雪纯 • 后端python编程实现PCANet人脸识别整个可视化 • python编程搭建LMC分类器 • 调参提高识别准确率 陈鹏宇 • 前端 • 后端 • 后端管理界面 • 小程序 • 服务器部署 • 服务器维护。 其他GitHub:https://github.com/polichan/Palette-taro 部署教程:https://github.com/polichan/Palette-taro/blob/master/deployment.md 部署教程PDF:链接:https://pan.baidu.com/s/1aXvnJRvvlWb9_nn3Vd1Dew 提取码:5llw 视频介绍链接:https://v.qq.com/x/page/t3153s85vi0.html 小程序文档介绍(含PCANet,LMC分类器原理介绍):链接:https://pan.baidu.com/s/1p8VvnHs1BedCb0lQNMHAvw 提取码:s5al
2020-09-20 - #云开发挑战赛#-预约班车-为了T恤
预约班车小程序扫描以下小程序码体验,密码6个0。 [图片] 介绍 预约班车小程序是个人开发的云开发小程序。专门为有班车业务的公司,使用的班车预约小程序。 乘客可以通过该小程序预约未来7天的班车。司机可以查看班车的预约记录。 云开发后台功能 数据库主要分为线路、用户与订单等集合。订单集合冗余了线路的信息和预约用户的信息,查询时无需联表查询,提高查询效率。 因为需要判断预约当周是否有节假日,所以在云函数中调用第三方接口,请求获取该日期节假日的状态,并将日期数据缓存到数据库,避免多次反复请求被加入黑名单。 云开发中碰到的问题 日期转换问题,服务器使用时区为+0时区,开发调试中使用的+8时区,获取当前的时间往往还需要时区判断,再加减8小时,加大云开发难度。建议官方提供选择服务器时区功能。 通用功能需要开发成通用服务,建议提供BasS平台,便于云开发使用第三方的服务,加强云开发的能力。 截图 [图片][图片] [图片][图片] 团队简介 个人开发
2020-09-16 - #小程序云开发挑战赛#-QSCamera-Incas
QSCamera ——求是潮器材借还系统 By Incas 文章概述:本篇文章共分12部分内容,首先从应用场景、目标用户、实现思路、产品架构、小程序截图、部分核心功能代码展示六个方面对小程序做了大致的介绍,然后给出了小程序的Github地址、详细开发文档地址、详细使用指南地址以及介绍视频地址方便读者对我们的小程序进行进一步的了解。最后我们给出了小程序的体验二维码与Incas团队简介,方便大家对我们的小程序能够上手体验并对我们的团队有所了解。感谢您花费宝贵的时间阅读本篇文章,希望您能够有所收获! 1、应用场景: 该小程序面向浙江大学求是潮校级学生组织的摄影部及视频团队两个部门,用于部门内或跨部门的器材借还登记、借用记录查询、当前器材状态查询等场景。 2、目标用户 浙江大学校级学生组织求是潮摄影部及视频团队部门成员、 3、实现思路 QSCamera利用用户openid识别用户,前端90%以上内容使用组件化开发,相关组件定位明确,便于后续版本迭代更新。同时,二次封装了wx.request请求,使用async和await完美处理了异步调用问题,提高整体程序并发度与性能。同时,拥有全局网络请求异常机制,拥有良好的边界测试结果。另外,UI采用Color-UI组件库以及自写wxss进行样式设计。 后端采用纯云开发,使用云函数与云数据库进行信息存储与查询。 4、产品架构图 [图片] 5、小程序部分效果截图: [图片] [图片] [图片] [图片] 首页 / 器材借用 / 器材查询 / 当前出借记录 (从左至右) [图片] [图片] [图片] [图片] 后台管理系统 / 后台记录查询 / 后台用户信息 / 后台器材管理(从左至右) 6、部分核心功能代码展示(具体详见源代码与开发文档) 1)核心网络请求类实现(所有业务模型的父类) class HTTP { request({ name, data = {}, }) { return new Promise((resolve, reject) => { this._request(name, resolve, reject, data) }) } _request(name, resolve, reject, data = {}) { wx.cloud.callFunction({ name: name, data: data, success: res => { console.log("CloudFunction_"+name+"_Called Success") resolve(res) }, fail: err => { reject() console.log("CloudFunction_"+name+"_Called Failed") wx.showToast({ icon:'none', title: '很抱歉,出现了一个错误,请重试', }) } }) } } 2)高并发借用器材实现 (大致思路如下: 1、校验用户是否登录 2、校验表单是否符合要求 3、并发向云端请求校验借用器材是否已经被人借用 4、并发向云端更新每一个器材的状态 5、创建借用记录 6、显示成功提示(或已经在以上任一步中失败即会中止并显示失败提示) ) 注:由于正常情况下,器材借用处只会显示当前尚未出借的器材。然而当两个人同时登录小程序借用同一个器材时,容易导致数据库数据不一致的情况发生。 故做上述第三步,从而成功避免了两个人同时借用一个器材时,容易导致某器材被两个人同时借走的问题。 async FormSubmit(e) { if (!app.globalData.IsLogin) { wx.showToast({ icon: 'none', title: '请先登录', }) return } let FormCheck = this.checkEquip() && this.checkTime() && this.checkPurpose() && this.checkEquipCanbeBorrowOut() if (FormCheck) { //向云端请求时再一次确认这些器材未被借用 let EquipCheck = true; let VideoChoosed_listLength = this.data.VideoChoosed_list.length this.setData({ loadModal: true }) var temp = [] //视频团队器材校验 for (var i = 0; i < VideoChoosed_listLength; i++) { temp.push(equipModel.CheckEquip(this.data.VideoChoosed_list[i]._id)) } //摄影部器材校验 let PhotographyChoosed_listLength = this.data.PhotographyChoosed_list.length if (PhotographyChoosed_listLength != 0) { for (var i = 0; i < PhotographyChoosed_listLength; i++) { temp.push(equipModel.CheckEquip(this.data.PhotographyChoosed_list[i]._id)) } } //等待校验完成进行下一步借用: Promise.all(temp).then(async res => { for (var i = 0; i < VideoChoosed_listLength + PhotographyChoosed_listLength; i++) { EquipCheck = EquipCheck && res[i] } const BorrowManInfo = wx.getStorageSync('userInfo') const that = this //借用器材 if (EquipCheck) { //借用视频团队器材 for (var i = 0; i < VideoChoosed_listLength; i++) { equipModel.BorrowEquip(this.data.VideoChoosed_list[i]._id, that.data.EndDate, that.data.EndTime, BorrowManInfo) } //借用摄影部器材 for (var i = 0; i < PhotographyChoosed_listLength; i++) { equipModel.BorrowEquip(this.data.PhotographyChoosed_list[i]._id, that.data.EndDate, that.data.EndTime, BorrowManInfo) } this.setData({ Msg1: "创建租借记录中", }) //创建租借记录 await recordModel.CreateBorrowRecord(this.data.VideoChoosed_list, this.data.PhotographyChoosed_list, this.data.StartDate, this.data.StartTime, this.data.EndDate, this.data.EndTime, this.data.Purpose, BorrowManInfo) this.setData({ loadModal: false }) wx.showToast({ title: '租借成功', }) this.ClearPageInfo() wx.switchTab({ url: '../myrecord/myrecord', }) } else { this.setData({ loadModal: false }) wx.showToast({ icon: 'none', title: '有器材已被别人抢先一步借走啦,请下拉刷新后重新进入该页面再进行选择', duration: 3000 }) that.ClearPageInfo() } }) } }, 7、小程序详细开发文档 https://github.com/Fantast416/WxApp_QsCamera/blob/master/QSCamera%E5%BC%80%E5%8F%91%E6%96%87%E6%A1%A3V1.3.docx 8、小程序详细使用指南 https://github.com/Fantast416/WxApp_QsCamera/blob/master/QscCamera%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3V1.3.docx 9、小程序Github源码地址 https://github.com/Fantast416/WxApp_QsCamera 10、小程序介绍视频地址 https://v.qq.com/x/page/l31514ixels.html 11、作品体验二维码 (重要!由于该小程序目前已经上线并投入使用,且仅面向求是潮内部部门同学,所以仅向已注册用户开放功能,所以如需体验,需进行注册,注册时注意如下事项: 1、体验注册时部门请选择“视频团队”,部门内部邀请码为“ZjuQscSptd”。 2、如需进一步体验管理员功能,请注册成功进入首页后,点击中管认证按钮,视频团队中管认证码为:“Admin” ) (注:由于摄影部和视频团队邀请码不同,所以如果选择”摄影部“,则会显示部门邀请码错误!!目前仅开发视频团队体验权限,以便赛后清除无关人员数据,避免影响正常使用) [图片] 12、团队简介 指导老师:陈建海 Incas团队由两名来自浙江大学的本科生组成。团队简介如下: 沈吕可晟:浙江大学数字媒体技术大三学生,求是潮视频团队成员,负责小程序前后端逻辑、数据库开发、与产品设计。 寿佳涵:浙江大学应用生物科学大三学生,负责小程序UI设计。
2020-09-15 - #小程序云开发挑战赛#-简约约拍-自习社
一、项目设计发明的目的 随着微博,微信等交际圈兴起、网红的各种美照的渗透、旅游等增多。传统影楼无法提供便捷拍摄服务及多元潮流的拍照风格,而相机价格较贵且使用学习成本高,消费者对拍照的需求,约拍小程序应运而生。为消费者和热爱拍摄的摄影师构建一个联通的平台,消费者和摄影师提供一个进行拍摄的服务平台、而且用户可以在上面分享自己拍摄的照片、拍摄的方法分享等等的一些动态分享,打造一个关于摄影爱好人群的社交圈子。同时基于OTO商业模式,“线上到线下”,约拍小程序的出现,用户线上可随时随地约拍符合自己风格的摄影师、摄影师可以利用空闲时间提供线下的约拍服务,成为移动的新型的影楼。 二、项目的创新点 ① 目前关于线上摄影的应用在市场上较少,且为是pc端或app端,使用到微信小程序平台随时可用,无需安装卸载,实现跨平台。又能低成本构建私域流量利用微信生态引流推广,打造线上摄影平台及摄影爱好者的交流平台。 ② 建立在微信平台,借助微信流量,进行推广更简单有效、成本低。小程序立即使用等优势可以快速吸引流量的引入。除此之外,基于020模式的约拍小程序不仅规范约拍服务和保障用户与摄影师的利益,而且还提供用户与用户之间的交流的平台。增加用户粘合程度的同时,激起约拍服务的流行,打造移动的新型影楼。 ③ 线上摄影平台,给摄影师和需要摄影的用户打造移动端的影楼,除了自身选择适合的摄影师、摄影风格等等,用户可以更加自由的去找到适合自身的风格和摄影师、可以随时随地的记录属于自身的美好 三、实现思路 前端开发使用原生代码,功能的实现充分利用云开发,提使用平台提供的 API 进行核心业务开发构建。 四、系统构架图以及前后端功能分析图 [图片] 五、目前所实现功能 作品:作品发布、作品展示、作品点赞动态:发布动态、动态点赞、动态评论约拍信息:发布约拍、约拍展示、约拍收藏、约拍下单 订单:订单详情展示、订单完成、订单评价 用户:关注、查看关注、查看关注用户、查看用户信息、用户实时聊天搜索功能 :展示搜索收藏功能:收藏后,打开收藏页面消息:实时通知功能 六、效果截图 [图片][图片][图片] [图片][图片][图片] [图片][图片][图片] [图片][图片] [图片][图片] 七、体验码 [图片] 八、开源地址 https://github.com/bigyellow19/bigyellow
2020-09-19 - #云开发挑战赛#-速派递-快速便利的智慧化校园物流小程序
介绍 软院外送站(速派递)是一个为大学智慧物流生活而创作的一个小程序,它不仅解决了学生拿快递慢且累的问题,还解决了快递驿站因为每天都有大量学生没空去拿快递,导致驿站可存储空间爆满的问题。并且疫情期间本小程序可以起到至关重要的作用,能够减少学生聚集拿快递,和寄快递难的问题。 应用场景 各大高校及周边快递驿站 目标用户 高校师生 实现思路 订单内容部分:利用云开发将前台统计的到用户信息和快递取件码图片上传到云存储中,相应的快递驿站根据给予的对应标识符查看自身订单,并进行取消、接单、送达等对应操作,用户也可以实时取消订单。 查快递部分:由于查询快递是自己利用快递鸟搭建的一个接口,没有https协议,于是利用云开发调试完美解决没有证书问题,可以快速查询当前自己快递的进度和位置。 取件码图片上传:图片上传也是利用云开发访问我自己搭建的一个接口然后返回图片链接并存储本地,提交的时候提交到云存储后端去。 效果截图 [图片][图片][图片] 作者简介 队长:郑运杰 学校:泉州师范学院 座右铭:做自己感兴趣的事,不要害怕失败,想做就去做。
2020-09-16 - #小程序云开发挑战赛#-(高校联盟-快递代取)-云小白
(一)应用场景 为了方便大学生收取快递,以及想要兼职的同学能够方便的代取快递,特推出了 高校联盟-快递代取,用户可以在平台上微信授权登录后进行发布任务,设置一定的佣金以及保险费用来进行发布任务,平台通过自身的资源或者通过其他被认证的用户来进行接单派送,接单前需要支付一定的保证金,送达后来获取佣金(暂未接入微信支付接口) (二)目标需求用户 在校学生,教师等校园内用户 (三)功能实现过程 (1)使用 Vue.js ,跨平台的前端框架uni-app,进行开发,配合开发组件、云开发API,云数据库的学习,进行应用开发. (2)对目标群体进行需求分析和调研,设计数据库结构,展开功能分为:定位系统;发布订单;接取任务;提交任务等其他功能模块. (3)进行云环境配置,测试数据写入云数据库,进行开发编写基础功能的云函数接口,并部署到云开发平台,使用微信开发者工具进行调试测试. (4)为进行同步开发与代码存储,使用腾讯工蜂GIT代码仓库,进行提交与审核, (5)提交发布测试版小程序,寻找小部分用户进行测试.初步完成平台预期基本功能 (6)上线版本,记录问题,改进后进行代码周期性迭代升级. (四)架构图 [图片] (五)效果图 体验二维码 [图片] [图片] 主页:[图片][图片] [图片] (六)代码地址 Github: https://github.com/ZxZWindstorm/bfmzdx_express.git 腾讯工蜂:https://git.code.tencent.com/2265865006/bfmzdx_express.git 微信开发者仓库:https://git.weixin.qq.com/ZxZWindstorm/bfmzdx_express.git (七)演示视频: https://v.qq.com/x/page/l3149h2bt7h.html?pcsharecode=MB0KsmUE&sf=uri&source (八)团队介绍 小程序云开发爱好者,来自北方民族大学的两个帅气阳光大男孩 张广凌风,史连强
2020-09-08 - #小程序云开发挑战赛# -校拍-所以爱会消失团队
一、应用场景: 每个人拍照都有他的目的性,无论是分享还是收藏还是记录,最终目的都是想要保留此时此刻的那一瞬美景。但是照片拍好后存在哪里?分享到哪里?怎样与大家去讨论?或许QQ空间、朋友圈或微博是个不错的选择,可终究都是一个小圈子的人,无法分享给更多的人。所以我们校拍的小程序出现了,大家的照片有了分享的地方,还都是志同道合的人。而我们也可以更好的宣传每个用户的学校,让更多的人了解到用户的学校。 二、目标用户: 面向的主体用户是在校的大学生,但是我们也接受更多的人参与进来,不仅仅是大学生,大家都可以分享查看,也可以指出别人拍照时是否有些细节没有处理到位,互相借鉴互相进步。 三、实现思路: 1.架构图 如下图: [图片] 2.开发思路 聊天功能实现思路: [图片] 四、效果截图 壁纸页: [图片] 广场页: [图片] 话题页: [图片] 个人中心页: [图片] 技巧页: [图片] 历史页: [图片] 视频页: [图片] 详情页: [图片] 详情页-单条消息: [图片] 消息页: [图片] 主题页: [图片] 发布视频页: [图片] 发布照片页: [图片] 我的关注页: [图片] 我的喜欢页: [图片] 五、功能演示 视频链接:https://v.qq.com/x/page/t3154swfv55.html 代码链接:https://github.com/1377283509/CampusShooting.git 六、团队简介 队名:所以爱会消失 队长:李超超(负责项目的开发设计与整体布局、前后端的设计、非常熟悉小程序开发) 队员:张砚耕(负责公众号内容的编写、功能测试、小程序的介绍文档) 七、二维码 1.小程序 如下: [图片] 2.公众号 如下: [图片]
2020-09-20 - #小程序云开发挑战赛#-民大新生助手-梦的开始
应用场景 当大一新生录取时,刚到学校或者还没到学校时,对学校的概况是一无所知。每当开学季,群里面会出现新生问各种问题,如学校宿舍怎样、食堂如何、环境如何、校园卡在哪里领等问题。虽说群里会有热心的学长学姐回复,但是回复的内容也不是很完全,所以这款民大新生助手的主要功能就是展示宿舍、食堂、校园风景、视频、美食、商品转卖、各院群号,各社团群号,各省群号等信息,为大二大三的也提供了一定的服务,如上传社团、工作室、二手物品、电子商品、新生解答等服务。 目标用户西北民族大学每一届新生 实现思路 微信小程序的框架包含两部分View视图层、App Service逻辑层,View层用来渲染页面结构,AppService层用来逻辑处理、数据请求、接口调用,它们在两个线程里运行。视图层使用WebView渲染,逻辑层使用JSCore运行。视图层和逻辑层通过系统层的JSBridage进行通信,逻辑层把数据变化通知到视图层,触发视图层页面更新,视图层把触发的事件通知到逻辑层进行业务处理。 功能结构图 [图片] 架构图 [图片][图片] 效果截图 首页 [图片][图片][图片][图片][图片] 民大页 [图片][图片][图片][图片] 校园页 [图片][图片][图片] 推荐页 [图片][图片][图片][图片][图片][图片] [图片] 注:管理员认证功能是审核发布的话题,通过则显示,不通过,则删除。 功能代码展示 订阅消息 [图片] [图片] [图片] 点赞云函数 [图片] 检测内容合法性 [图片] [图片] 作品二维码 [图片] 团队简介 个人独自完成。
2020-09-15 - 个人对于参赛作品的简单总结
引言: 由微信小程序与腾讯云云开发产品团队联合举办的小程序云开发应用编程竞赛,目前已经进行到了初赛评审阶段,今天晚上24:00为期45天的小程序云开发挑战赛的初赛评审环节将会落下帷幕。 一:挑战赛初赛投票计算方式 初赛采用专家评审+投票方式进行,结果计算公式为:专家评分(80%)+ 投票(20%)= 初赛总分。 公投平台:微信开放社区指定板块(公投小程序已上线); 投票方式:作品介绍文章进行点赞,根据点赞进行排名; 公投计算公式为:100 -[ (点赞数排名-1)/该赛道全部参与作品 * 100]; 投票方式:微信开放社区作品介绍文章上点赞,点击参与投票 初赛评选结果公布时间为9月30日,每个赛道将评选出10支队伍进入复赛。 二:参赛作品分类及概括 经过大赛组委会评委评审,一共有374支队伍的作品进入到初赛阶段。 将374支队伍的参赛作品按照作品类别进行分类,一共分为42类,分别对应下表: 注:由于表格宽度展示有限,故将右侧无法展示的队伍作品在下方表格中进行展示 记账与备忘 《大学生记账本》 《咸鱼记账》 《KrisQin记账本》 《MY备忘》 《家庭多用记事本》 《ygjtools》 《乐考吧》 《日程管家》 《YAccount记账助手》 《随变记账》 《待办事项工具》 《小婷和小天一起记账》 《初心日历》 《寝记账》 失物招领 《爱心收发室》 《帮寻小站》 《月见》 《长大寻物》 《悦寻失物招领》 《校园寻回》 《失全拾美》 健身类 《健身助手力量日记》 《活力健身房》 《RedPoint红点》 《健身小程序简介》 音乐影视 《云享Music》 《king电影》 《無音不泉》 《电影周周荐》 AI识别 《鹦鹉AI端侧识别》 《ai视觉测试》 《图文识别》 《AI物以类聚》 《AI写诗》 医疗健康 《人体生理指标》 《吃药小助》 《己目》 《体重MM》 《菲特日记》 《医医查》 《全国核酸检测资质医院查询》 《糖友饮食助手》 《每日戒糖》 《自助心理成长》 《预约挂号小程序》 《蓝医先生》 社团活动 《阮薇薇点名啦》 《山大clubs》 《素拓百分百》 《小小微距》 《娱乐投票小程序》 《活动栏》 《薇科技弹幕墙》 《头马报名》 《滑伴》 《科联答题》 《招新Plus》 《文艺比赛小行家》 《布告》 《BJUT活动助手》 学习工具 《错题小本本》 《为高考加分》 《分录英雄》 《口算助手》 《答案sou》 《教资易取》 《快刷题库answer question》 《拾一英语》 《魅力单词》 《魔方训练计时器》 《focusair》 《Y计算器》 《高级工匠心录》 《成长课程表》 教育培训 《来这儿学》 《微学堂(在线学习平台)》 《大学生资源共享平台》 《袋鼠培培》 《宝贝积分管理》 时间管理 《西瓜清单》 《语音倒计时器》 《西红柿时间管理》 《Do More打卡小程序》 《倒计时》 《tomato clock》 《step by step》 《BT清单》 《tusake Today》 《叮咚倒数日》 《FTodoList》 校园管理 《班级价值分》 《校园缺勤录》 《教务小助手》 《工程课表》 《云迎新》 《CAN课程表》 《简单的课表小程序》 《运动会管理系统》 《重邮课后小程序》 《高校信息共享平台》 《校园简单易》 《中北请假助手》 《知侬》 《ITD智慧校园》 校园介绍 《阿里嘻嘻》 《民大新生助手》 《北邮宣讲通》 《志愿校园》 《浙里淘志愿》 《云校知》 《校拍》 校园社区 《北院守夜人》 《校园墙》 《AIB校友会》 《校园小唤》 《xcu许院生活》 物流快递 《高校联盟-快递代取》 《速派递》 《物流小程序》 预约与邀请 《天翊图书馆预约》 《农大饭食》 《课室助手》 《会议邀请函》 《weSport》 《哪天约》 《定约》 《易约行》 《自闭间预定》 《简约约拍》 《实验室设备预约助手》 《QSCamera》 《预约班车》 《心暖农侬》 情侣婚礼 《趣婚礼》 《小酒馆》 《恋人小清单》 《云表白》 《情侣券》 《旅梦恋爱》 《快表白》 《恋爱空间》 购物商城 《微信云商城》 《吃否CHIFOU》 《云端商城小程序》 《购物》 《柠檬商城》 《武冈微商城》 《狗头的店,狗头管理》 《林林的妙妙屋》 《芳甸鲜花商城》 《优鲜配送联盟》 《汇尤e家》 《云开发带后台商城系统》 《预付费机票销售小程序》 《微购收单》 知识普及 《科普小程序》 《百词百科》 《BOSS百科》 《球员搜搜》 《火查查》 《急速查病》 《趣答星球》 《铁路生涯》 《趣酿》 《吃吃等你》 《男人买菜》 《诗华社》 《天天诗词》 《心跑道》 程序员 《sentry 小程序客户端》 《GitPark》 《码农SHOW营》 《OTP动态验证码》 《微源库》 《LE编程》 《一起来学计组叭》 《统一运维平台》 《见字如面》 图像处理 《莉龙美颜工具》 《图像复原微信小程序》 《Hi头像》 《我是主角》 《修补匠》 《祥云》 《抽屉表情》 《人脸识别虚拟仿真实验》 《照片时光机》 语言翻译 《CEnews》 《多源在线翻译》 《汉泰小词典》 《识译小程序》 社区周边 《社区速修》 《虚拟社区》 《简物业》 《租户在线》 《美今管家》 《顾家》 《雨中送伞》 《盲小鹿》 树洞与留言 《海豚时光瓶》 《树洞》 《苦海匿舟》 《深大小树洞》 《LMSH7TH》 简历与工作 《个人简历Plus》 《快速找工作》 《猿宝典》 《云线名片》 《InterviewHub》 《企业招聘》 《JF校园云招聘平台》 《普罗名特》 《校园招聘》 资讯与娱乐 《Killkinfe》 《开心小杜》 《旅小布短视频》 《心灵鸡汤大全》 《轨道nighty night》 《拯救不开心》 《大宗交易数据查询分析助手》 《糗事》 旅行 《我的旅行箱》 《云航助手》 《宝塔出行》 《PicGo图旅》 城市宣传与服务 《数字余杭》 《哏儿通》 《联系群众客户端》 《城市预警系统》 《郑州限行查询》 《佤山行》 商业工具 《软著助手》 《义思丽代办平台》 《契约farm》 办事工具 《省计数字监理》 《OA外勤管家》 《报工小助手》 《make的测评程序》 《实验室管理小程序》 《星河意见箱》 《梦凡云OA》 《微助helper》 《群消息公示》 《安全帽智慧监控小程序》 地图打卡 《高级打卡鸡》 《摄影地图游客版》 《同学在哪儿》 《每日步数打卡》 《生活智打卡》 《打卡日历》 《Mayday Online》 《嘿!我在这儿!》 《心里有树》 《地图留言》 《印纪》 天气与日历 《一眼天气》 《历史日历》 《7日天气》 《历史上的今天TIH》 《实用小工具》 游戏娱乐 《趣味游乐城》 《假如生命很短暂》 《磁力积木3D预览》 《MusicColorBlock-Detail》 《消灭癌细胞》 《红小包抽奖》 《大师请提笔》 《画画的北鼻》 《东方小游戏》 存储与分享 《酷传CoolTran》 《我存》 《次元乌托邦云网盘》 《闪加》 《悦分享》 《云享坊》 生活工具 《WiFi生成码》 《古老的API小工具》 《日常工具box》 《柠檬收纳》 《买它or not》 《我车呢》 《微信小程序工具箱》 《小记易》 《电魔方智能家居》 《缸中之鱼导购系统》 《格式转换工厂》 《小神助手》 《我家的WIFI》 二手交易与租赁 《大学校园闲置物品交易平台》 《宝宝约玩》 《精简之校园二手交易平台》 《学辰ing》 《二手市场》 《虾麦》 《校园二手购》 《零工哥》 《易珠》 《瓜大e拼车》 外卖点单收银 《来一杯a》 《美食屋》 《外卖系统》 《便利下单助手》 《云智慧收银》 《超市Boss助手(零售助手)》 《为特餐饮助手》 《Holly食刻》 《微信自助点餐小程序》 《餐饮流水记账》 《seven取餐小程序》 《校内外卖》 《秀食餐饮小程序》 《校云通》 日记博客论坛 《博客系统》 《天天读书》 《myVlog》 《红推》 《论坛小程序》 《一瞬相册》 《席博》 《一只书匣》 《社交平台》 《图迹圈》 《MallBook》 《青存纪》 《酒肆 家谱》 《比斯兔u》 垃圾分类 《垃圾问问》 《垃圾分类小程序》 《垃圾分类赢好礼》 宠物 《萌宠创造营》 《宠幸治疗》 《宠物营地》 《流浪猫速查手册》 《泊宠》 物联网 《lononiot》 《LoRa智能家居管理》 《温湿度实时监控及开关控制小demo的设计》 《HomeAssistant》 《流量计设备性能测试平台》 疫情防控 《行程助手Plus》 《每天都要上报体温》 《校园疫情管理小程序》 《CUMTB疫情管控期间学生外出申请系统》 《疫简签》 地摊 《地摊生活》 《逛逛地摊》 《迷你小摊》 承接上图表格中未完全展示的队伍的作品 记账与备忘 《智慧账本》 失物招领 健身类 音乐影视 AI识别 医疗健康 社团活动 《准到聚餐》 学习工具 《“倾听者”综合型语音评价系统》 《小青考证》 《IAI CDS》 教育培训 时间管理 校园管理 《We广油》 《江大电服》 校园介绍 校园社区 物流快递 预约与邀请 《书香长大》 《私约团课》 情侣婚礼 购物商城 知识普及 程序员 图像处理 语言翻译 社区周边 树洞与留言 简历与工作 资讯与娱乐 旅行 城市宣传与服务 商业工具 办事工具 地图打卡 天气与日历 游戏娱乐 存储与分享 生活工具 二手交易与租赁 外卖点单收银 日记博客论坛 《校园书友》 《CC交个朋友》 《点滴互助》 《广大搜搜》 《社交点评》 《迷你论坛》 《Simple Note 短记》 垃圾分类 宠物 物联网 疫情防控 地摊 以上类目整理皆来自于社区热心朋友"青寒",感兴趣的朋友可以前往他发表的文章中进行详细查看,他写的关于参赛文章的笔记非常不错,值得推荐,此处附上文章链接地址:《个人项目学习笔记》 三:目前的作品评选情况 由于目前参赛作品较多,现官方已经将所有参赛作品和作品初赛的公投情况上传至"挑战赛全作品收录"小程序中: [图片] "挑战赛全作品收录"小程序是由杨泉开发并授权社区使用,在此非常感谢杨泉大佬,真是为了比赛操碎了心,同时也欢迎广大朋友积极参与到投票活动中,为你喜爱的队伍头上宝贵的一篇 因参赛作品较多,此处仅附上职业赛道和校园赛道两支赛道点赞量前十的情况(表中的数据为:截止到今天25号的下午17:10),仅供大家参考(表下方附上“同时刻参赛队伍获赞情况”的截图): 职业赛道 第一名 第二名 第三名 第四名 第五名 第六名 第七名 第八名 第九名 第十名 队伍编号 303 146 232 90 243 22 252 33 106 306 参赛队伍 虾麦 我存 AI写诗 快速找工作 每日戒糖 吃否HUIBUR 小记易 GitPark Hi头像 抽屉表情 阅读量 4523 4191 2372 3771 2712 1545 1614 1398 1678 1071 点赞量 719 646 432 345 325 130 127 115 108 92 — — — — — — — — — — — 校园赛道 第一名 第二名 第三名 第四名 第五名 第六名 第七名 第八名 第九名 第十名 队伍编号 107 121 246 198 109 296 105 175 314 75 参赛队伍 QSCamera 天翔图书馆预约 Holly食刻 蓝医先生 施小布短视频 CUMTB疫情管控期间学生 深大小树洞 长大寻物 校园二手购 雨中送伞 阅读量 2611 3216 2574 1769 1938 7133 1509 1474 1823 206 点赞量 508 398 357 341 249 248 213 212 206 147 [图片] 图一:职业赛道 [图片] 图二:校园赛道 注:因未到初赛评选截止时间(截止到今天25号的晚上24:00),此时(表中的数据为:截止到今天25号的下午17:10)数据不代表最终结果,望大家在今天晚上尽快投出自己手里宝贵的一票,为你喜欢的队伍加油打气!!! 四:复赛阶段(10月19日) 复赛采用线上路演答辩形式开展 。 参与复赛的队伍需要在10月17日之前提交指定路演材料;10月19日进行复赛的线上直播路演。 复赛评选结果在10月21日公布,每个赛道评选出5支队伍进入决赛,大赛会为每支队伍安排专家进行一对一指导,持续进行产品的深度打磨直到决赛前。 五、决赛阶段(10月底) 决赛采用线下路演方式开展。 决赛队伍将被邀请至腾讯深圳总部进行线下展演,角逐赛道Top3。 具体决赛时间以实际情况为准,将会在企业微信以及官方社区公布。 六、评分标准 校园赛道更偏重于创新和实践,以及对应用的边界把握和理解;职业赛道更偏重于场景应用、功能完备性、性能以及部署优势等。 具体评判标准如下: 解决方案定位【校园赛道30分、职业赛道25分】 需求明确:具有明确需要解决的现实问题,有明确的目标客户和使用场景; 概念创新:解决方案的产品形态或对传统产品形态的互联网化改造方面有所创新等; 贴近实际:为行业发展带来便利或具有商业价值。 解决方案技术【校园赛道15分、职业赛道25分】 合理性:结合产品特点运用合适的技术解决问题; 可靠性:充分考虑各种边界条件,具有良好的可靠性; 云开发:充分使用云开发优势特性来打造应用服务; 性能:产品性能符合实际需求,并且能够提供有说服力的测试数据。 解决方案执行【校园赛道15分、职业赛道20分】 易部署:可以很容易进行产品或服务的应用部署; 低成本:应用达成时各个成本较低,不存在无用的成本投入; 高风控:对部署之后的产品形态的各个风险有很好的把控处理。 方案产品体验【校园赛道30分、职业赛道20分】 使用体验:流程逻辑清晰,用户易懂易用,用户体验出色; 设计美观:UI设计规范统一、美观精致; 运营规范:具有系统化和合适的运营方案,不存在过度营销现象。 参赛过程表现【校园赛道10分、职业赛道10分】 资料齐全:大赛规定的作品提交材料详细完整; 资料质量:资料格式规范,论述条理清晰,语言通顺,重点突出。 在复赛和决赛时中,按照以下原则评分: 汇报展示:在定位说明、产品设计、技术方案、应用分析等方面介绍条理清楚,重点突出; 回答问题:现场回答问题正确,简明扼要。 七:奖项设置和规则详细说明 关于此次小程序云开发挑战赛的章程说明,请参考官方文档:“小程序云开发挑战赛——大赛规程”。
2020-09-25 - [致富经]开发小程序月入100万,小程序如何让Ta逆袭的?
首先声明:本人与被曝光之人无任何利益关系,彼此不认识、没有任何经济关联。所收集资料均为网络公开资料。 最初注意到这个小程序黑产开发者,是看到了一个帖子:《小程序上线19日,日广告收入稳定在3000 +》,这让我很好奇,我们都知道流量是需要获取,获取流量是需要成本的,这位开发者身上一定有值得我们去学习的。但当我仔细查阅其小程序及运营手段后,令我震惊,这完全就是黑产,涉及的金额之大已经足以判刑。 1、以砍价手法吸引流量,拒绝发货直接退款。 其首次试水这种操作手法的小程序叫“铺子优品”,就是利用各种电子产品,如iPhone、小米;口号化妆品,如Dior、YSL等,以多少次砍价免费拿或低价拿吸引消费者进行转发砍价,转发砍价完成后以“无货”等理由拒绝发货并强制退款。消费者已经在多个平台进行曝光,目前这个小程序已经被微信官方封禁。投诉链接 [图片] [图片] [图片] 2、部分发货的,发的是假冒伪劣产品。 其中一小部分,例如YSL,直接发假到不能再假的仿品给消费者,消费者砍完价后付的钱可能还能买数根这样的假口红。如果第一条行为只是涉嫌不诚信,那么这一条行为,直接触犯“销售假冒伪劣产品罪”、“诈骗罪”。这样的行为,已经是属于黑产而非灰产。曝光链接 [图片] <以上两条,就是这名“开发者”的所作所为> 但是今天我想说的远不止这些,更让我震惊的是这位本能闷声赚大钱的骗子,竟然做出了以下不可思议的举动—— 1、贼喊捉贼,上官方社区说自己很冤,还妄图申诉小程序。 这名小骗子,在欺诈了数千甚至上万名消费者,遭到消费者大量投诉后,竟然到了官方社区,发帖《日流量3万人遇到用户恶意投诉该如何解决?@所有开发者》,不仅贼喊捉贼,还带上了@所有开发者,我想说的是,正因为你的这篇帖子,我今天才要扒你,我相信绝大多数的小程序开发者不屑与你为伍,你这种人渣,就应该去监狱里蹲着。 [图片] 2、开始出售教程,建立黑产产业链,意图扩散传播。 在官方明确拒绝申诉后,这名小骗子开始在官方社区发帖子《电商小程序月入50万》、《小程序上线19日,日广告收入稳定在3000+》,意图通过高额的利润驱动更多底层开发者去找他交学费、买课程,让这种毒瘤黑产蔓延整个小程序。现在暂不知道有多少人交了学费,开始了一样的行为,在此我还是郑重警告这些人——小程序都是实名的,进去是分分钟的! [图片] <以上为小骗子的迷之操作> 根据我的观察,这名小骗子很明显不懂法律,在屡屡犯罪后竟然还敢堂而皇之的出现,当然官方在迅速封禁其首个小程序后,也许也没想到这个人竟然敢继续大张旗鼓的推进。目前据测算,这个人从腾讯拿走的流量主分成应该在大几十万元,加上假冒伪劣产品收的电商支付金额,应该是超过百万元。在此我希望,微信官方以此人为反面教材,出动腾讯法务予以报案、立案,保障消费者权益,净化小程序环境。 我整理了小骗子目前使用的公司主体与新的小程序信息: 公司主体:贵州火马科技有限公司 目前仍在运营的类似小程序:19严选、十元铺、是心选(更多小程序官方请查询主体信息) 希望得到微信官方的重视,小程序的生态健康关乎着每一位开发者。 -------------------------------------------------------------- 另附上其社区主页:查看这个小骗子的社区主页 相关举报内容通过搜索引擎搜索“铺子优品”即可查看。 题外话:这个小骗子还是很聪明的,铺子优品舆论爆炸后,使用的小程序名称以大牌傍名为主,比如19严选的搜索引擎,出来的基本都是网易严选,这样更多人就发现不了其作恶的真相了。 -------------------------------更新于0714-------------------------------- 在阿拉丁小程序看到了其新小程序19严选和十元铺的卖量广告,日UV都是万起步的。此贴我会每日更新,记录诈骗生活~ [图片]
2020-07-14