- 小程序备案有很多不明白的地方,有没有关于小程序备案客服的电话,想相关咨询一下?
麻烦知道的宝子们,在线提供一下,谢谢!或者平台的在线客服都帮帮忙,谢谢!感谢家人们!
2023-12-26 - APP可以和小程序共用微信的云数据库吗?
因为一些功能在小程序里无法实现,所以需要开发移动端APP进行补充,看了一些文档,貌似可以使用服务端api进行实现,只是需要管理access token,很多内容不太了解。所以有下几个问题需要确认: 1、为了降低开发周期,确保APP和小程序的数据、内容、功能等实时同步,APP是否可以和小程序共用微信云数据库? 2、如果可以共用,是否有并发数、延时或功能权限的差异或限制? 3、如果不可以,是否有其他的解决方案? 新手小白,没有开发过APP,请各位大神指点。
2022-05-08 - 营业执照变更了法人,小程序怎么备案?
11月份营业执照变更了法人,小程序还是原来的信息,现在想备案,该怎么操作?
2023-12-06 - 云函数线上环境new Date() 有时差的问题 请问如何解决?
环境变量肯定是设置了的: [图片] 代码是这样的: [图片] 执行结果是这样的: [图片] 日期不对 但是时间戳又是对的。我都蒙了 为什么会这样? 我存数据库字段的时候 用的是 db.serverDate()。所以我查询的时候 要传递时间对象进去。好像查询却是对的? 请问大佬们 我要怎么写才对呢?
2022-06-16 - 云函数写md5加密?(已解决)
[图片] index.js? [sm]:37 Error: cloud.callFunction:fail Error: errCode: -504002 functions execute fail | errMsg: Runtime.ImportModuleError: Error: Cannot find module '../getsetzcm/md5.js' 请问错在哪里么?谢谢。 在需要使用到的云函数安装npm install md5..... --------------
2022-11-23 - 同样的代码,云函数中使用where语句查询数据,导出excel表中无数据,不使用where则有数据?
代码1:使用where查询 // 云函数入口文件 const cloud = require('wx-server-sdk'); cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境 const xlsx = require('node-xlsx'); let db = cloud.database(); const comd = db.command; // 云函数入口函数 exports.main = async (event, context) => { try{ //let userdata = await db.collection('Data_cj').get(); let start_time = event.start; let end_time = event.end; let khbm = event.khbm; let userdata; if(khbm == ""){ userdata = await db.collection('Data_cj').where({ cj_pdrq:comd.gte(start_time).and(comd.lte(end_time)) }).get(); }else{ userdata = await db.collection('Data_cj').where({ cj_pdrq:comd.gte(start_time).and(comd.lte(end_time)), cj_khbm:khbm, }).get(); } console.log(userdata); //定义excel表格名 let dataCVS ='test.xlsx'; let alldata = []; //表属性 let row = ['客户姓名','客户编码','商品条码','商品包码','商品名称','单包零售价格','条装零售价格','市场批发价','订货电话','经营地址','盘点日期','当前库存量','断货天数']; alldata.push(row); console.log(alldata); for(let i=0;i<userdata.data.length;i++){ let arr =[]; let key="data"; arr.push(userdata[key][i].cj_khxm); arr.push(userdata[key][i].cj_khbm); arr.push(userdata[key][i].cj_tiaoma); arr.push(userdata[key][i].cj_baoma); arr.push(userdata[key][i].cj_spmc); arr.push(userdata[key][i].cj_dbjg); arr.push(userdata[key][i].cj_tzjg); arr.push(userdata[key][i].cj_pfjg); arr.push(userdata[key][i].cj_dhdh); arr.push(userdata[key][i].cj_jydz); arr.push(userdata[key][i].cj_pdrq); arr.push(userdata[key][i].cj_dqkc); arr.push(userdata[key][i].cj_dhts); alldata.push(arr); }; console.log(alldata); //把数据保存到excel let buffer = await xlsx.build([ { name:"test", data:alldata } ]); //把excel文件保存到云存储里 return await cloud.uploadFile({ cloudPath:dataCVS, fileContent:buffer,//excel二进制文件 }) }catch(e){ console.error(e); return e; } } 代码2:不使用where查询 // 云函数入口文件 const cloud = require('wx-server-sdk'); cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境 const xlsx = require('node-xlsx'); let db = cloud.database(); const comd = db.command; // 云函数入口函数 exports.main = async (event, context) => { try{ let userdata = await db.collection('Data_cj').get(); // let start_time = event.start; // let end_time = event.end; // let khbm = event.khbm; // let userdata; // if(khbm == ""){ // userdata = await db.collection('Data_cj').where({ // cj_pdrq:comd.gte(start_time).and(comd.lte(end_time)) // }).get(); // }else{ // userdata = await db.collection('Data_cj').where({ // cj_pdrq:comd.gte(start_time).and(comd.lte(end_time)), // cj_khbm:khbm, // }).get(); // } console.log(userdata); //定义excel表格名 let dataCVS ='test.xlsx'; let alldata = []; //表属性 let row = ['客户姓名','客户编码','商品条码','商品包码','商品名称','单包零售价格','条装零售价格','市场批发价','订货电话','经营地址','盘点日期','当前库存量','断货天数']; alldata.push(row); console.log(alldata); for(let i=0;i<userdata.data.length;i++){ let arr =[]; let key="data"; arr.push(userdata[key][i].cj_khxm); arr.push(userdata[key][i].cj_khbm); arr.push(userdata[key][i].cj_tiaoma); arr.push(userdata[key][i].cj_baoma); arr.push(userdata[key][i].cj_spmc); arr.push(userdata[key][i].cj_dbjg); arr.push(userdata[key][i].cj_tzjg); arr.push(userdata[key][i].cj_pfjg); arr.push(userdata[key][i].cj_dhdh); arr.push(userdata[key][i].cj_jydz); arr.push(userdata[key][i].cj_pdrq); arr.push(userdata[key][i].cj_dqkc); arr.push(userdata[key][i].cj_dhts); alldata.push(arr); }; console.log(alldata); //把数据保存到excel let buffer = await xlsx.build([ { name:"test", data:alldata } ]); //把excel文件保存到云存储里 return await cloud.uploadFile({ cloudPath:dataCVS, fileContent:buffer,//excel二进制文件 }) }catch(e){ console.error(e); return e; } } 不使用where查询则导出excel有数据: [图片] 使用where查询则导出excel无数据: [图片] 同样的查询条件,不知道为什么会这样,请各位大神协助,不胜感激!
2023-06-28 - 基础库超过2.30.2以上的就报unexpected loadSdkSubPackage case?
工具是最新的1.06版本 只要超过2.30.2基础库 就会 报一下的错 2.30.2版本 组件有问题 每次修改组件都有强制刷新工具 [图片][图片]
2023-04-27 - 首页模拟隐私弹窗
官方demo1基础上改的,用模拟隐私接口,省得还要配置,甚至后台开通的接口。复制到实际应用中,再改成用到的接口。 然后还用了手机号获取的按钮,这个不需要审核,体验方便些。 [图片] 有人担心拒绝后,后续无法再调涉及隐私的接口: [图片] 其实拒绝是需要调用api来设置的,你不要设置就好啦。没调用过不同意的api,后续其他时机再同意隐私后,就能用啦。 // this.resolvePrivacyAuthorization({ event:'disagree' }); 如果通过按钮类型的隐私接口来触发回调,会有bug。你等同意隐私后再点获取手机号按钮,会报频繁使用的错误。实际应用中,就都用模拟接口来触发隐私弹窗,同意后在回调里使用具体api,或者引导用户点击按钮。 [图片]
2023-08-25 - 一个组件解决隐私授权:小程序用户隐私保护授权弹窗组件
项目链接:https://github.com/94xy/miniprogram-privacy 效果预览: [图片] 使用方法: 1、复制项目 [代码]component[代码] 文件夹中的 [代码]privacy[代码] 文件夹到小程序项目中的组件目录; 2 、在 page.json 中引入组件 { "usingComponents": { "Privacy": "/component/privacy/privacy" } } 3 、在 page.wxml 中使用组件,需要授权显示弹窗,不需要不显示 <Privacy /> 4 、可以在所有使用了隐私接口的页面都加上该组件,授权一次之后使用所有隐私接口不再需要授权 跳过阅读: 可以不阅读就点击“同意”按钮 <Privacy skipRead="{{true}}" /> 流程: 页面显示时使用 wx.getPrivacySetting 接口查询是否需要授权,需要授权则显示组件;用户点击“拒绝”直接退出小程序,用户点击“同意”关闭弹窗并同步给微信,之后可以正常使用所有隐私接口。 注意事项: 2023 年 9 月 15 号之前,默认不会启用隐私相关功能,所以检测不到需要弹窗的情况,可以在 app.json 中配置 "__usePrivacyCheck__": true 之后,接口才可以检测到是否需要弹窗。个人实际情况:我在开发者工具中配置了 "__usePrivacyCheck__": true ,needAuthorization 无论如何返回的都是 false,但在真机模拟的情况下可以返回 true自动打开隐私保护指引界面需在「小程序管理后台」配置《小程序用户隐私保护指引》,官方用户隐私保护指引填写说明。 取消授权: 微信中「微信下拉-最近-最近使用的小程序」中删除小程序可取消授权。 开发者工具中「清除模拟器缓存-清除授权数据」可取消授权。
2023-08-28 - Skyline|长列表也可以丝滑~
[图片] [图片] 对于长列表出现的白屏、卡顿、界面跳动等问题,小程序提供了新 scroll-view 来解决这一系列问题。我们先来看看效果~ 快速滚动效果对比我们通过一组长列表来展示新旧 scroll-view 在快速滚动下的效果对比。 当长列表快速滚动时,旧 scroll-view 容易出现白屏的情况,新 scroll-view 则不会出现白屏。 左:旧 scroll-view、右:新 scroll-view [视频] 在安卓机器快速滚动过程中,旧 scroll-view 反应卡顿,容易出现手指离开操作时,滚动动画还在进行。 而新 scroll-view 则可以保持界面滚动效果跟随手指,停止滚动则缓慢结束动画效果。 左:旧 scroll-view、右:新 scroll-view ,测试机型:Xiaomi MIX 3 [视频] 反向滚动效果对比在对话等场景下,反向滚动是常见的功能,旧 scroll-view 并没有提供反向滚动的能力,我们来看看旧 scroll-view 下是怎么完成反向滚动的~ 在对话数据在加载的时候,对话列表需要在更新完列表数据之后,再使用 scroll-into-view 或者 scroll-top 来保持当前滚动位置,因为设置滚动位置会有延迟,所以容易出现 界面跳动 的情况。 // .js // scroll-view 滚动到顶部时触发 bindscrolltoupper() { // 先更新列表数据 this.setData({ recycleList: getnewList() }, () => { // 更新完数据后再设置滚动位置 this.setData({ scrollintoview: scrollintoview }) }) } 为了解决界面跳动的问题,社区上也有通过翻转的方法来解决,将 scroll-view 与 scroll-view 的子元素进行翻转。 // .wxss .reserve { transform: rotateX(180deg); } // .wxml 然而进行翻转之后,会遇到手指滚动方向与列表滚动方向相反、scroll-into-view 属性无效等问题。 为了帮开发者们解决反向滚动类列表的一系列问题,新 scroll-view 直接提供了 reverse 属性支持反向滚动的能力,滚动效果更加顺滑。 左:旧 scroll-view、右:新 scroll-view(图片加载期间,GIF 渲染较慢) [视频] 怎么接入新 scroll-view ?新的 scroll-view 使用起来很简单,主要有以下两个步骤: 修改小程序配置scroll-view 增加 type="list"// app.json // "renderer": "skyline" 开启之后所有页面会变成自定义导航,可参考 https://developers.weixin.qq.com/s/Y5Y8rrm37qEY 实现自定义导航 // 也可在 page.json 中配置 "renderer": "skyline" 逐个页面开启 { ... "lazyCodeLoading": "requiredComponents", "renderer": "skyline" } // page.json { ... "disableScroll": true, "navigationStyle": "custom" } // page.wxml ... // 反向滚动 新的 scroll-view 从安卓 8.0.28 / iOS 8.0.30 开始支持,如需兼容低版本需要进行兼容处理。 wx.getSkylineInfo({ success(res) { if (res.isSupported) { // 使用新版 scroll-view } else { // 使用旧版 scroll-view } } }) 如需体验长列表效果,可在微信开发者工具导入该代码片段即可体验:https://developers.weixin.qq.com/s/Y5Y8rrm37qEY 更多接入详情请参考文档 怎么做到的?大家肯定好奇为什么新 scroll-view 可以解决这个头疼的问题呢? 我们来对比一下新旧 scroll-view 有什么区别就可以知道答案啦~ 旧 scroll-view 逻辑层与渲染层的通信需要通过 JSBridge 进行转换,需要一定的时间开销渲染采用异步分块光栅化,当渲染赶不上滚动的速度,来不及渲染则会出现白屏渲染大量节点内存占用高,需要开发者自行优化只渲染在屏节点,开发成本高新 scroll-view 逻辑层与渲染层的通信无需通过 JSBridge 进行转换,减少了大量通信时间开销渲染采用同步光栅化,滚动与渲染在同一线程,不会出现白屏针对长列表进行优化,只渲染在屏节点,内存占用低,减少了一些渲染耗时,且开发接入成本低[图片] 除此之外,新 scroll-view 后续将提供 type="custom" 支持 sticky 吸顶效果、网格布局、瀑布流布局等能力便于开发者接入使用~
2023-08-03 - 云函数中,能多个函数互相调用?
[图片] 图1 [图片] 图2 想要实现如图1的,执行完第一个函数,然后执行第二个,第三个。。要怎么来写呢?
2022-02-17 - 云开发免鉴权H5跳转小程序errCode: -501023 permission denied?
企业小程序,买了一个云开发环境,静态空间权限已经开启了:未登录用户访问云资源权限设置。 手机浏览器打开后无法唤起小程序:cloud.callFunction:fail Error: errCode: -501023 permission denied [图片] 翻不到正确的解决方案。有谁踩过坑的,指导一下
2022-08-31 - 云开发通过时间戳按月统计时出现的奇怪问题?
//此处两个时间戳转化为时间是 2022-01-01 00:00:00 2022-12-31 23:59:59 match.createTime = _.and(_.gte(1640966400000), _.lte(1672502399000)) const result = await collection .aggregate() .match(match) .project({ year: $.dateToString({ format: '%Y-%m', date: $.add([new Date(0), '$createTime']), }), }) .group({ _id: `$year`, value: $.sum(1), }) .sort({ _id: -1, }) .limit(35) .end() 此处返回的应该是从2022年一月开始到年末按照月份统计的数据 但是在返回体中却出现了2021年12月的统计数值 { "requestId": "183bb7768df_2", "data": [ { "_id": "2022-10", "value": 861 }, { "_id": "2022-09", "value": 3182 }, { "_id": "2022-08", "value": 3107 }, { "_id": "2022-07", "value": 3111 }, { "_id": "2022-06", "value": 2804 }, { "_id": "2022-05", "value": 2891 }, { "_id": "2022-04", "value": 2331 }, { "_id": "2022-03", "value": 2611 }, { "_id": "2022-02", "value": 3456 }, { "_id": "2022-01", "value": 4394 }, { "_id": "2021-12", "value": 15 } ] }
2022-10-09 - 如何批量下载云开发存储文件到本地
有人说打开云开发,存储点击文件有下载地址,这对于少量资源是可以的,下面的方法是下载上万文件的方法: 通过访问官方:https://docs.cloudbase.net/cli-v1/install [图片] [图片] 第四步、云存储文件路径:/qrcode/20220311 ==》需要下载到本地:如 E:\qrcode 1、首先在本地: E:\qrcode\文件内创建一个名为:cloudbaserc.json 的json文件。 { "envId":"你的云开发环境的id" } 2、通过命令访问E盘: e: 3、访问需要下载到本地文件路径 cd qrcode 4、开始下载云端文件到本地,执行命令,对于云端文件路径有子目录可以通过 / 进行访问。 tcb storage download qrcode/20220311 . --dir 5、等等文件下载中,直至文件全部下载。
2022-03-11