背景

去年年末,离过年的时间还剩几天,产品部的突然跑过来问能不能年前做完然后上线一个小程序,利用过年的流量,引流一波。

时间紧,任务急。并且公司还在开源节流,精简服务器。这个项目也就过年这段时间跑跑的,过后就是废弃状态。综合种种,于是提出试试小程序的云开发。

小程序云开发优势

无需搭建服务器,快速构建小程序,免登录、免鉴权调用微信开放服务,按量计费,还有内容管理(CMS),小项目用云开发在适合不过了。

这个项目除了正常的展示外,还用到以下功能

  1. 静态网站 H5 跳小程序任意页面
  2. 客服消息自动回复
  3. 订阅消息推送

以上结合小程序云开发不用后台参与进来,前端也能很容易的实现起来。

先看看大家比较关心的费用问题

左边是费用,右边是访问人数,
可以看到每天大概800-1000人数的访问,费用也就几分钱,这还是在开通了内容管理(CMS)情况下的数据。所以对于费用这一块完全可以打消这个顾虑

静态网站 H5 跳小程序任意页面

老规矩先看文档 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/staticstorage/jump-miniprogram.html
能力
可以在微信内部浏览器的 H5 跳转小程序,也可以在微信外部浏览器或其他部分 App (如企业微信、QQ 等)跳转微信小程序。
根据文档我这里改成了可以跳首页以及任意详情页面

H5页面
<html><head><title>打开小程序</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1"><script>window.onerror = e => {console.error(e)alert('发生错误' + e)}</script><!-- weui 样式 --><link rel="stylesheet" href="https://res.wx.qq.com/open/libs/weui/2.4.1/weui.min.css"></link><!-- 调试用的移动端 console --><!-- <script src="https://cdn.jsdelivr.net/npm/eruda"></script> --><!-- <script>eruda.init();</script> --><!-- 公众号 JSSDK --><script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script><!-- 云开发 Web SDK --><script src="https://res.wx.qq.com/open/js/cloudbase/1.1.0/cloud.js"></script><script>function getQueryVariable(variable) {var query = window.location.search.substring(1);var vars = query.split("&");for (var i = 0; i < vars.length; i++) {var pair = vars[i].split("=");if (pair[0] == variable) { return pair[1]; }}return (false);}let id = getQueryVariable('id') || ''function docReady(fn) {if (document.readyState === 'complete' || document.readyState === 'interactive') {fn()} else {document.addEventListener('DOMContentLoaded', fn);}}docReady(async function () {var ua = navigator.userAgent.toLowerCase()var isWXWork = ua.match(/wxwork/i) == 'wxwork'var isWeixin = !isWXWork && ua.match(/micromessenger/i) == 'micromessenger'var isMobile = falsevar isDesktop = falseif (navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|IEMobile)/i)) {isMobile = true} else {isDesktop = true}if (isWeixin) {var containerEl = document.getElementById('wechat-web-container')containerEl.classList.remove('hidden')containerEl.classList.add('full', 'wechat-web-container')var dom = document.getElementById('wxOpenInAPP') let path ='/pages/index/index';if(id){path = '/pages/detail/index?id='+id}console.log('path',path)dom.innerHTML = '<wx-open-launch-weapp id="launch-btn" username="gh_adf5777ca9be" path="'+path+'"><template><button style="width: 200px; height: 45px; text-align: center; font-size: 17px; display: block; margin: 0 auto; padding: 8px 24px; border: none; border-radius: 4px; background-color: #07c160; color:#fff;">打开小程序</button></template></wx-open-launch-weapp>'var launchBtn = document.getElementById('launch-btn')launchBtn.addEventListener('ready', function (e) {console.log('开放标签 ready')})launchBtn.addEventListener('launch', function (e) {console.log('开放标签 success')})launchBtn.addEventListener('error', function (e) {console.log('开放标签 fail', e.detail)})wx.config({// debug: true, // 调试时可开启appId: '你的appId', // <!-- replace -->timestamp: 0, // 必填,填任意数字即可nonceStr: 'nonceStr', // 必填,填任意非空字符串即可signature: 'signature', // 必填,填任意非空字符串即可jsApiList: ['chooseImage'], // 必填,随意一个接口即可 openTagList: ['wx-open-launch-weapp'], // 填入打开小程序的开放标签名})} else if (isDesktop) {// 在 pc 上则给提示引导到手机端打开var containerEl = document.getElementById('desktop-web-container')containerEl.classList.remove('hidden')containerEl.classList.add('full', 'desktop-web-container')} else {var containerEl = document.getElementById('public-web-container')containerEl.classList.remove('hidden')containerEl.classList.add('full', 'public-web-container')var c = new cloud.Cloud({// 必填,表示是未登录模式identityless: true,// 资源方 AppIDresourceAppid: '你的appId', // <!-- replace -->// 资源方环境 IDresourceEnv: '你的环境ID', // <!-- replace -->})await c.init()window.c = cvar buttonEl = document.getElementById('public-web-jump-button')var buttonLoadingEl = document.getElementById('public-web-jump-button-loading')try {await openWeapp(() => {buttonEl.classList.remove('weui-btn_loading')buttonLoadingEl.classList.add('hidden')})} catch (e) {buttonEl.classList.remove('weui-btn_loading')buttonLoadingEl.classList.add('hidden')throw e}}})async function openWeapp(onBeforeJump) {var c = window.cconst res = await c.callFunction({name: 'public',data: {action: 'getUrlScheme',id: id},})console.warn(res)if (onBeforeJump) {onBeforeJump()}location.href = res.result.openlink}</script><style>.hidden {display: none;}.full {position: absolute;top: 0;bottom: 0;left: 0;right: 0;}.public-web-container {display: flex;flex-direction: column;align-items: center;}.public-web-container p {position: absolute;top: 40%;}.public-web-container a {position: absolute;bottom: 40%;}.wechat-web-container {display: flex;flex-direction: column;align-items: center;}.wechat-web-container p {position: absolute;top: 40%;}.wechat-web-container wx-open-launch-weapp {position: absolute;bottom: 40%;left: 0;right: 0;display: flex;flex-direction: column;align-items: center;}.desktop-web-container {display: flex;flex-direction: column;align-items: center;}.desktop-web-container p {position: absolute;top: 40%;}</style>
</head><body><div class="page full"><div id="public-web-container" class="hidden"><p class="">正在打开 “你的小程序名称”...</p> <!-- replace --><a id="public-web-jump-button" href="javascript:" class="weui-btn weui-btn_primary weui-btn_loading"onclick="openWeapp()"><span id="public-web-jump-button-loading" class="weui-primary-loading weui-primary-loading_transparent"><iclass="weui-primary-loading__dot"></i></span>打开小程序</a></div><div id="wechat-web-container" class="hidden"><p class="">点击以下按钮打开 “你的小程序名称”</p> <!-- replace --><!-- 跳转小程序的开放标签。文档 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html --><div id="wxOpenInAPP" class="wexin-launch-btn"></div></div><div id="desktop-web-container" class="hidden"><p class="">请在手机打开网页链接</p></div></div>
</body></html>
云函数
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({env: 'id'
})// 云函数入口函数
exports.main = async (event, context) => {const wxContext = cloud.getWXContext()switch (event.action) {case 'getUrlScheme': {return getUrlScheme(event)}}return 'action not found'
}async function getUrlScheme(event) {let path = '/pages/index/index'let query = ''if (event.id) {path = '/pages/detail/index'query = 'id=' + event.id}return cloud.openapi.urlscheme.generate({jumpWxa: {path: path, // <!-- replace -->query: query,},// 如果想不过期则置为 false,并可以存到数据库isExpire: false,// 一分钟有效期expireTime: parseInt(Date.now() / 1000 + 60),})
}

把云函数部署上去,静态H5页面上传到云开发的静态网站里

网站配置里找到域名,就可以H5跳小程序了。

效果预览

这里放个官方的栗子
https://postpay-2g5hm2oxbbb721a4-1258211818.tcloudbaseapp.com/jump-mp.html

其他的下期再来肝

换工作?找面试题? 来前端面试题库 wx搜索 进阶的大前端

记录一次年前三天紧急上线一个小程序过程相关推荐

  1. 制作一个查询信息程序_三步学会制作一个小程序

    小程序在刚出现的时候简直是惊艳了整个业界,不管什么内容,光是那酷炫的交互效果就足以篇篇刷屏了,再加上"用完即走",不用安装.不占用内存.入口众多等特性.不过早期由大厂商的专业程序员 ...

  2. 三步学会制作一个小程序

    小程序在刚出现的时候简直是惊艳了整个业界,不管什么内容,光是那酷炫的交互效果就足以篇篇刷屏了,再加上"用完即走",不用安装.不占用内存.入口众多等特性.不过早期由大厂商的专业程序员 ...

  3. GPU 编程入门到精通(三)之 第一个 GPU 程序

    博主由于工作当中的需要,开始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程,因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...

  4. 高德打车上线支付宝小程序,持续发力一站式出行!

    9月25日,高德地图在北京举行第二届"十一全民出行节",宣布与支付宝达成深度合作,双方将在在产品.技术.生态等方面融合,为用户提供一站式的移动出行体验.据悉,双方的合作目前已经有了 ...

  5. 【超直白】三分钟创建一个小程序

    让我们花三分钟创建一个小程序! 注册账号 访问微信公众平台网站:https://mp.weixin.qq.com 鼠标放到小程序上 发现图案变成了,下面这样,点击[查看详情],进入小程序注册页面. 拉 ...

  6. 修改已经上线的小程序名称

    需求:修改已经上线的小程序的名称 ps: 修改名称的费用为300RMB,参考链接 https://developers.weixin.qq.com/ 解决办法: 1.登录[微信公众平台] https: ...

  7. 行业:美团将在快手开放平台上线美团小程序

    12月27日,快手与美团宣布达成互联互通战略合作.双方将基于快手开放平台,打通内容场景营销.在线交易及线下履约服务能力,共同为用户创造"一站式"完整消费链路.双方基于服务零售供应链 ...

  8. 1.下架已上线的小程序;2.设置不允许被用户搜索到

    下架已上线的小程序: 登录微信开发者后台[设置]-[功能设置]-[暂停服务设置]-[暂停服务],如图 设置小程序不允许被用户搜索到: 登录微信开发者后台[设置]-[功能设置]-[隐私设置]-[关闭], ...

  9. 做好这三步,你的小程序离“爆款”就不远了

    随着"猜画小歌""腾讯小经费"等爆款小程序在朋友圈掀起又一波高潮,我尝试根据已研究过的数百个小程序,总结一份小程序三步自检清单,通过这份自检清单,希望你重新审视 ...

最新文章

  1. java 启动加载顺序_Java 程序的加载运行过程 | 学步园
  2. FATFS配置长文件名,为何跟编码转换有关
  3. mysql搜索规则_MySQL基于规则优化
  4. Java数据结构和算法:哈夫曼树
  5. I don't have an E-mail 我没邮箱
  6. 阿里高级技术专家:整洁的应用架构“长”什么样?
  7. Windows Server 2008 R2忘记密码导致无法修改密码
  8. python字典中的键是什么_在python字典中作为键的对象
  9. 素数和 c语言慕课,第五周 素数和问题
  10. 冲刺个税递延,第三批养老目标基金正式获批!合计已达40只
  11. Linux定时任务-定时锁屏
  12. 资深影迷不可不知的宽高比:Aspect Ratio 电影画面比例
  13. 电气EPLAN电气图纸设计
  14. mbp touchbar设置_MacBook 个性化你的 Touch Bar
  15. 数独解法-变形数独(第一讲:介绍)
  16. python表达式3or5的值为_Python表达式10+5%3-True+False的值为____。
  17. Java虚拟机部分知识点
  18. javascript 生成汉字和拼音对照
  19. 海康摄像头opencv实时回调
  20. 《python编程:从入门到实践》文件和异常——百万圆周率,pi_million_digits.txt

热门文章

  1. 使用Python制作的词云图
  2. 使用ORACLE OCI V8版本编程,在执行PL/SQL块时,不能同时绑定标量变量和数组变量......
  3. 如何在 XAMPP 中使用 不同的 PHP 版本
  4. 常用的数学古希腊字母 读法
  5. 解决报错:java: You aren‘t using a compiler supported by lombok, so lombok will not work and has been dis
  6. 程序员PS技能(一):PS2017基本框架使用
  7. 计算机会不会把一个汉字误认为两个西文字符,计算机会不会把一个汉字误认为是两个西文字符...
  8. 好程序员大数据教程分享超详细大数据学习路线
  9. CiteSpace文献共被引图谱含义详细解析
  10. 【开发日常】【cpu负载】 -- 一行命令让所有CPU负载跑满100%