- 小程序卡片分享设为私密消息引发的所有页面都会变为私密消息
https://developers.weixin.qq.com/miniprogram/dev/api/share/wx.updateShareMenu.html 设置某个页面转发为私密消息:isPrivateMessage:true; 只要在设置为私密消息的页面进行过分享后,再去其他未设置私密消息的页面进行分享卡片也会变成私密消息,重新加载小程序后才会恢复正常
2023-09-20 - 为了什么发了一次私密消息了,再分享其他正常页面,这些页面都不能转发了?
我们只在指定页面加了私密分享,但是分享了一次私密消息,后续分享其他都是私密消息了。
2021-03-26 - 我今天更新了下微信开发者工具,然后从hbuild打开我的uniapp微信小程序报错问题?
报错信息为[ project.config.json 文件内容错误] project.config.json: libVersion 字段需为 string,之前是好的 就更新了下之后就报了这个错误,有没有大佬帮忙看下 调整基础库版本还是报这个错 [图片]
01-23 - 小程序之私密消息解码解决方案-解码失败问题
最近在调试小程序私密消息,本人也是第一次用此功能,最后遇到一个比较大的问题,按照官方文档走下来,最后发现最后一步解码不好用,交流社区看了很多社友也遇到同样的问题,官方一直没有答复。 起初我也以为是大家自己问题,但调试下来,我最后发现此问题不是大家没用对,就是官方一个失误,这块官方应该没有做到严格的测试就上线了,好在问题好修复。 进来直接寻求结果同学,可以直接拉到最后,拿走改好的代码文件就可以了,如果关注过程,学习下经验的同学,可以从头看完,其实这事细纠起来,挺有意思,虽然问题好修正,但是这个事情的过程很值得学习,测试上有周全,返回值类型各个接口也没有保持一致。 下面会把这三个方面都剖析出来,如果有腾讯小程序的成员看到,希望能尽快修复此问题。 官方链接 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/private-message.htm 前面的过程都没有问题,问题在于收到消息用户打开消息卡片时,收到了 数据结构如下 { errMsg: 'authPrivateMessage:ok' valid: true, iv: 'xxxx', encryptedData: 'xxxxxx' } 到此一切都是正常,没有问题,就是在解密 encryptedData,解不出来。 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html [图片] 开放数据获取二种方式,这个问题也是很巧合,这两方式在此问题上都行不通。 先说方式二,按理说,这个方式我最希望用,因为实现简单,我后端是结合云开发,解密数据是维护用户登录状态,用code 还得换取session_key 然后手动去解密.... ,这里不多说了,不支持,对于我们来说一点发挥余力也没有,希望官方能早日支持,类getShareInfo 只要一个cloudID 就好了。 这块不了解的同学可能糊涂了,没关系可以略过这一段。 再说方式一,这是本文的重点, 既然方式二不行,只能方式一了, 按照按照文档一步一步走下去,问题这个示例代码上,下载了示例代码, [图片] 经过一段时间苦逼的折腾,把有问题的代码给修复了,程序员就是这么秃的,哎! 修正后,直接解码出来了。 这在云函数里调用的,如下 。 [图片] 终于拿到解密数据,这个其实就是activityID ,(关于转发的activityID 设计上我还觉得还有商榷地方,用着不是很方便, 比如动态消息,转给个人就拿不到shareTicket ,转给群才有,这个很奇怪,做协同应用这个很有用,不是营销那种转发,我觉得这个官方只考虑了那种营销场景,这得另开篇再议) 我将代码重封装一了下,下面是调用示例。需要代码可以找我要,vx:pig9pig 修改后的正确的代码 const WXBizDataCrypt = require('../decrypt/WXBizDataCrypt'); try { const cryptor = new WXBizDataCrypt(APPID, sessionKey); const decryptData = cryptor.decrypt(encryptedData, iv); return decryptData; } catch (e) { console.log(e); } //调用 小结一下,希望官方一是修复下示例代码,另外非常非常期待官方,方式二给实现了, 就是云调用直接获取开放数据。 还有就是动态消息转发给个人拿不到ShareTicket 问题也权衡一下。 感谢小程序团队带来贡献,抱拳!
2023-05-27 - authPrivateMessage 的encryptedData 能用云调用来解密吗?
wx.getWeRunData({ success (res) { // 拿 encryptedData 到开发者后台解密开放数据 const encryptedData = res.encryptedData // 或拿 cloudID 通过云调用直接获取开放数据 const cloudID = res.cloudID } }) 类似获取 getWeRunData ? 得到cloudID 。 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share/private-message.html [图片] wx.authPrivateMessage({ shareTicket: object.shareTicket, success(res) { console.log('authPrivateMessage success', res); //没有这个cloudID ???? }, fail(res) { console.log('authPrivateMessage fail', res) } }) authPrivateMessage 试过,得不到这个CloudID .
2022-05-19 - 小程序获取开放数据CloudID没有返回,或者不存在?
当使用云调用直接获取开放数据时,遇到部分用户或机型不可以正常返回CloudID,导致获取开放数据失败,请按下述说明理解并根据自身业务规避: 微信官方文档中关于开放数据给定的最低基础库版本,只适用于「IOS/Android」平台运行的微信客户端,「WIN / MAC / 企业微信」平台运行小程序的基础库为独立迭代的,所以单纯通过版本号界定对这些平台无效。举个例子:mac平台的基础库2.13.2,虽然远远大于获取真实手机号要求的2.8.0,但仍然不具备获取手机号的能力。 虽然企业微信内置和微信同样的小程序引擎,但是基础库并没有和微信小程序完全对齐,根据自身形态做了部分支持和一些特有能力,具体参见微信小程序API支持情况 目前在企业微信、MAC、WIN平台运行的微信小程序基础库最新版本都不能支持云调用开放数据的获取,在这里建议你做以下两种规避措施: 在这些平台运行时,提示不能获取,请更换手机继续业务。使用正常的加密信息解析方式来补足这一部分空缺(我们很快出相关的模版代码)根据目前支持情况,我们会动态更新此条目的信息和代码,请使用如下代码来判断是否支持开放数据云调用获取方式: // isopen('最低的版本号') function isopen(minVersion = '2.7.0') { const { SDKVersion, platform, environment } = wx.getSystemInfoSync() if (environment == 'wxwork' || compareVersion(SDKVersion, minVersion) < 0 || ['android', 'ios', 'devtools'].indexOf(platform) == -1) { // 不能使用云调用获取开放数据 return false } else { // 可以使用云调用获取开放数据 return true } } function compareVersion(v1, v2) { v1 = v1.split('.') v2 = v2.split('.') const len = Math.max(v1.length, v2.length) while (v1.length < len) { v1.push('0') } while (v2.length < len) { v2.push('0') } for (let i = 0; i < len; i++) { const num1 = parseInt(v1[i]) const num2 = parseInt(v2[i]) if (num1 > num2) return 1 else if (num1 < num2) return -1 } return 0 } 如果你无法确定目标平台的具体系统信息,可以在目标平台访问以下小程序页面,将会展示关键信息,便于你进行排查决策。 [图片] 小程序在提交审核时,由于部分审核同学使用PC端进行体验审核,导致开放数据获取出现问题,无法体验完整业务被拒绝过审。为了防止出现这种问题,建议养成习惯,使用小程序实时日志打印用户关键信息,便于事后排查。 如果因为此问题需要官方同学协助,请提供完整的如下信息: [代码]小程序APPID[代码]、[代码]云开发环境ID[代码]、[代码]获取信息参考的官方文档地址[代码]、[代码]用户的系统信息(最少包括基础库版本号、运行平台)[代码]、[代码]关键的获取代码片段截图[代码]
2021-09-10 - 小程序调试 authPrivateMessage 验证私密消息,valid总是false?
小程序调试 authPrivateMessage 验证私密消息,valid总是false? 测试代码片段 let acid = "1095_uaWIzgXp3nDXq2uCDxX2evTRMDsXqgHfdWFsSt5rkoWRLQtE1AnGqHCtNp1leQ06wtS8GomvRZ4aKyl-" wx.updateShareMenu({ withShareTicket: true, isPrivateMessage: true, activityId: acid, }) onshow里调用authPrivateMessage onShow:function(options){ let that = this console.log(options) if(options.shareTicket){ wx.authPrivateMessage({ shareTicket: options.shareTicket, success(res) { console.log('authPrivateMessage success', res) that.globalData.valid = res.valid // res // { // errMsg: 'authPrivateMessage:ok' // valid: true // iv: 'xxxx', // encryptedData: 'xxxxxx' // } }, fail(res) { console.log('authPrivateMessage fail', res) } }) } }, 调试结果success,valid一直为false [图片]
2021-01-12 - 如何查找微信公众号主页并复制链接
随意复制该微信公众号的一篇文章链接在浏览器打开查看源代码 找到biz=*****编码,(全局搜一下__biz=)例如biz=MzAxMDE1MTk3Nw== https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzAxMDE1MTk3Nw== 将 biz= 后面的*****编码替换成你刚刚找到的编码,就可以获取到该公众号的主页链接啦。
2022-04-01 - 云托管如何使用缓存?
首页推荐功能,需要给每个用户分配推荐池,需要缓存,如Redis。 但云托管中只有mysql,也不支持自己搭一个缓存服务吧? 请问各位有使用云托管实现类似功能的经验吗? 求指教!
2021-08-19 - 小程序真机调试 HTMLCanvasView is not defined?
小程序中使用了lottie miniprogram来展示lottie动画 在开发者工具中使用可以展示部分lottie文件,部分lottie文件会报eval is not a function 错误,如图 [图片] 但是,重要的是,开发者工具可以展示的部分lottie动画,在真机无法展示,提示HTMLCanvasView is not defined,如图 [图片] 请问这个问题如何解决?
2019-09-05 - 提交审核的时候为何没有测试帐号和密码的输入框?
这个小程序刚申请的两周,为何提交审核的没有提供测试帐号的输入框?上午提交了,很可能又会被退回来 [图片] 根本就没有什么备注框之类的东西
2019-09-27 - 小程序10行代码实现微信头像挂红旗,国庆节个性化头像
最近朋友圈里经常有看到这样的头像 [图片] 既然这么火,大家要图又这么难,作为程序员的自己当然要自己动手实现一个。 老规矩,先看效果图 [图片] 仔细研究了下,发现实现起来并不难,核心代码只有下面10行。 [代码] wx.canvasToTempFilePath({ x: 0, y: 0, width: num, height: num, destWidth: num, destHeight: num, canvasId: 'shareImg', success: function(res) { that.setData({ prurl: res.tempFilePath }) wx.hideLoading() }, fail: function(res) { wx.hideLoading() } }) [代码] 一,首先要创建一个小程序 至于如何创建小程序,我这里就不在细讲了,我也有写过创建小程序的文章,也有路过相关的学习视频,去翻下我历史文章找找就行。 二,创建好小程序后,我们就开始来布局 布局很简单,只有下面几行代码。 [代码]<!-- 画布大小按需定制 这里我按照背景图的尺寸定的 --> <canvas canvas-id="shareImg"></canvas> <!-- 预览区域 --> <view class='preview'> <image src='{{prurl}}' mode='aspectFit'></image> <button size='mini' open-type="getUserInfo" bindgetuserinfo="shengcheng" data-k="1">生成头像1</button> <button size='mini' open-type="getUserInfo" bindgetuserinfo="shengcheng" data-k="2">生成头像2</button> <button size='mini' open-type="getUserInfo" bindgetuserinfo="shengcheng" data-k="3">生成头像3</button> <button size='mini' open-type="getUserInfo" bindgetuserinfo="shengcheng" data-k="4">生成头像4</button> <button type='primary' bindtap='save'>保存分享图</button> </view> [代码] 实现效果图如下 [图片] 三,使用canvas来画图 其实我们实现微信头像挂红旗,原理很简单,就是把头像放在下面,然后把有红旗的相框盖在头像上面 [图片] 下面就直接把核心代码贴给大家 [代码]let promise1 = new Promise(function(resolve, reject) { wx.getImageInfo({ src: "../../images/xiaoshitou.jpg", success: function(res) { console.log("promise1", res) resolve(res); } }) }); let promise2 = new Promise(function(resolve, reject) { wx.getImageInfo({ src: `../../images/head${index}.png`, success: function(res) { console.log(res) resolve(res); } }) }); Promise.all([ promise1, promise2 ]).then(res => { console.log("Promise.all", res) //主要就是计算好各个图文的位置 let num = 1125; ctx.drawImage('../../'+res[0].path, 0, 0, num, num) ctx.drawImage('../../' + res[1].path, 0, 0, num, num) ctx.stroke() ctx.draw(false, () => { wx.canvasToTempFilePath({ x: 0, y: 0, width: num, height: num, destWidth: num, destHeight: num, canvasId: 'shareImg', success: function(res) { that.setData({ prurl: res.tempFilePath }) wx.hideLoading() }, fail: function(res) { wx.hideLoading() } }) }) }) [代码] 来看下画出来的效果图 [图片] 四,头像加红旗画好以后,我们就要想办法把图片保存到本地了 [图片] 保存图片的代码也很简单。 [代码]save: function() { var that = this wx.saveImageToPhotosAlbum({ filePath: that.data.prurl, success(res) { wx.showModal({ content: '图片已保存到相册,赶紧晒一下吧~', showCancel: false, confirmText: '好哒', confirmColor: '#72B9C3', success: function(res) { if (res.confirm) { console.log('用户点击确定'); } } }) } }) } [代码] 来看下保存后的效果图 [图片] 到这里,我的微信头像就成功的加上了小红旗了。 [图片] 源码我也已经给大家准备好了,有需要的同学在文末留言即可。 [图片] 后面我准备录制一门视频课程出来,来详细教大家实现这个功能,敬请关注。
2019-09-26 - 小程序内用户帐号登录规范调整和优化建议
为更好地保护用户隐私信息,优化用户体验,平台将会对小程序内的帐号登录功能进行规范。本公告所称“帐号登录功能”是指开发者在小程序内提供帐号登录功能,包括但不限于进行的手机号登录,getuserinfo形式登录、邮箱登录等形式。具体规范要求如下: 1.服务范围开放的小程序 对于用户注册流程是对外开放、无需验证特定范围用户,且注册后即可提供线上服务的小程序,不得在用户清楚知悉、了解小程序的功能之前,要求用户进行帐号登录。 包括但不限于打开小程序后立即跳转提示登录或打开小程序后立即强制弹窗要求登录,都属于违反上述要求的情况; 以下反面示例,在用户打开小程序后立刻弹出授权登录页; [图片] 建议修改为如下正面示例形式:在体验小程序功能后,用户主动点击登录按钮后触发登录流程,且为用户提供暂不登录选项。 [图片] 2.服务范围特定的小程序 对于客观上服务范围特定、未完全开放用户注册,需通过更多方式完成身份验证后才能提供服务的小程序,可以直接引导用户进行帐号登录。例如为学校系统、员工系统、社保卡信息系统等提供服务的小程序; 下图案例为正面示例:校友管理系统,符合规范要求。 [图片] 3.仅提供注册功能小程序 对于线上仅提供注册功能,其他服务均需以其他方式提供的小程序,可在说明要求使用帐号登录功能的原因后,引导用户进行帐号注册或帐号登录。如ETC注册申请、信用卡申请; 如下反面示例,用户在进入时未获取任何信息,首页直接强制弹框要求登录注册ETC,这是不符合规范的。 [图片] 建议修改为如下正面示例所示形式:允许在首页说明注册功能后,提供登录或注册按钮供用户主动选择点击登录。 [图片] 4.提供可取消或拒绝登录选项 任何小程序调用帐号登录功能,应当为用户清晰提供可取消或拒绝的选项按钮,不得以任何方式强制用户进行帐号登录。 如下图所示反面示例,到需要登录环节直接跳转登录页面,用户只能选择点击登录或退出小程序,这不符合登录规范要求。 [图片] 建议修改为下图正面示例形式,在需帐号登录的环节,为用户主动点击登录,并提供可取消按钮,不强制登录。 [图片] 针对以上登录规范要求,平台希望开发者们能相应地调整小程序的帐号登录功能。如未满足登录规范要求,从2019年9月1日开始,平台将会在后续的代码审核环节进行规则提示和修改要求反馈。
2019-07-20 - launchApp接口,官方能否提供一个只读变量判断当前生命周期能否打开app
- 需求的场景描述(希望解决的问题) 业务希望获得打开app能力,但小程序只有在特定的场景下才能打开app,官方文档说明在小程序生命周期内部会有一个状态值来判断小程序是否能够打开app,希望可以将该flag设为只读值并提供给开发,这样我们可以在当前生命周期不允许打开app的时候隐藏该按钮 - 希望提供的能力 提供一个只读变量判断当前生命周期能否打开app
2018-07-20