- 网页登录,部分用户未关注服务号,一直返回一个 “微信用户” 并且unionId为同一个人的情况?
我们的项目在线上跑了2年多了。2022年7月12号及以后,突然出现一种情况,有几个用户在未关注服务号的情况下,网页登录始终返回同一个人的信息,并且昵称始终未“微信用户”(关注服务号后,用户重新网页登录就正常了)。此用户与其他用户没有任何关系。这几个用户可以正常登录APP和小程序。 接入流程是按照文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 前端获取coderedirect 到后端二部曲,根据code获取access_token,在获取用户信息(主要获取unionId)。请问这个是什么原因,因为代码都2年没动过了,排查了一天没有思路,来社区看看有没有同样情况的同学。
2022-07-29 - 微信网页授权能力调整公告
微信网页授权 能力是为了优化用户在微信内登录网站应用的体验而设计的。为进一步规范能力使用,保障用户合法权益,平台将对能力进行调整。 当开发者在网页中在不规范使用发起 snsapi_userinfo 网页授权时,微信将默认打开网页快照页模式进行基础浏览。能力调整将于 2022 年 7 月 12 日 24 时生效。 网页快照页模式介绍快照页将会默认对用户屏蔽网页授权弹窗,用户在快照页中仅可进行滑动浏览操作,其他交互将被限制,并提示用户 “该网页需获取个人信息才可使用完整服务,当前仅可浏览部分内容”。用户如需要使用完整网页服务,可轻触右下角 “使用完整服务” 按钮触发授权弹窗,用户确认后进入原网页。 开发者在快照页内所获取的头像、昵称、openId、unionId 均为虚拟账号数据;快照页与正常页面不共用缓存,快照页的缓存会在用户离开快照页时被清理;快照页内也无法使用微信其它 JS-SDK 的能力。 [图片] 微信网页授权规范授权流程需引导清晰、准确:在申请获取用户信息的弹窗出现前,应该清晰、准确地告知用户获取信息的范围及获取信息的目的;必要场景申请:在必须获取用户信息时才申请,而不是用户尚未了解服务前就强制弹窗。如使用医院挂号时才需要获取用户信息;不强制登录:提供游客模式,供用户了解网页提供的基础服务,不强制用户允许网页获取用户信息后才能使用网页服务。 常见的微信网页授权不规范使用案例强制登录:在用户打开网页时立即要求用户授权,用户拒绝后无法使用网页提供的服务;违规收集个人信息:未在网页提前告知使用个人信息的目的、方式和范围;非必要收集:非必要获取用户信息的网页,如文章、视频等,要求用户在浏览内容前登录;差别对待微信用户:同样的网页在浏览器内可以无需登录直接访问,在微信内却要求用户先登录才可访问。 微信团队 2022年5月9日
2022-05-10 - 多个input输入完成自动切换到下一个输入框
需求: 一个input输入完回车,切换到下一个input。 思路: JS里声明2个变量: focus是否获得焦点,focusIndex需要焦点的序号。wxml中给input设置id,设置focus属性由这两个变量来控制。在JS的输入完成监听事件里获取下一个input的id序号并修改变量。 js: [代码]Page({ /** * 页面的初始数据 */ data: { ... // 是否获取焦点 focus: false, // 需要获取焦点的序号 focusIndex: 0 }, // 输入完成事件 confirmListener (event) { let currentIndex = event.currentTarget.dataset.categoryIndex if (currentIndex < input的数量 - 1) { this.setData({ focus: true, focusIndex: currentIndex + 1 }) }else { this.setData({ focus: false }) } }, // 输入时事件 inputListener(event) { ... let currentIndex = event.currentTarget.dataset.categoryIndex if (this.focusIndex != currentIndex) { this.setData({ focusIndex: currentIndex }) } }, }) [代码] wxml: [代码]<input id="input{{index}}" data-category-index="{{index}}" bindinput="inputListener" bindconfirm="confirmListener" focus="{{focus && focusIndex == index}}" [代码]
2021-10-28 - 短信链接如何跳转小程序?
公司要进行短信营销,如何让用户点击短信中的链接直接跳转到微信小程序呢?二维码的方式很不方便啊
2020-04-16 - [填坑手册]小程序Canvas生成海报(一)--完整流程
[图片] 海报生成示例 最近智酷君在做[小程序]canvas生成海报的项目中遇到一些棘手的问题,在网上查阅了各种资料,也踩扁了各种坑,智酷君希望把这些“填坑”经验整理一下分享出来,避免后来的兄弟重复“掉坑”。 [图片] 原型图 这是一个大致的原型图,下面来看下如何制作这个海报,以及整体的思路。 [图片] 海报生成流程 [代码片段]Canvas生成海报实战demo demo的微信路径:https://developers.weixin.qq.com/s/Q74OU3m57c9x demo的ID:Q74OU3m57c9x 如果你装了IDE工具,可以直接访问上面的demo路径 通过代码片段将demo的ID输入进去也可添加: [图片] [图片] 下面分享下主要的代码内容和“填坑现场”: 一、添加字体 https://developers.weixin.qq.com/miniprogram/dev/api/canvas/font.html [代码]canvasContext.font = value //示例 ctx.font = `normal bold 20px sans-serif`//设置字体大小,默认10 ctx.setTextAlign('left'); ctx.setTextBaseline("top"); ctx.fillText("《智酷方程式》专注研究和分享前端技术", 50, 15, 250)//绘制文本 [代码] 符合 CSS font 语法的 DOMString 字符串,至少需要提供字体大小和字体族名。默认值为 10px sans-serif 文字过长在canvas下换行问题处理(最多两行,超过“…”代替) [代码]ctx.setTextAlign('left'); ctx.setFillStyle('#000');//文字颜色:默认黑色 ctx.font = `normal bold 18px sans-serif`//设置字体大小,默认10 let canvasTitleArray = canvasTitle.split(""); let firstTitle = ""; //第一行字 let secondTitle = ""; //第二行字 for (let i = 0; i < canvasTitleArray.length; i++) { let element = canvasTitleArray[i]; let firstWidth = ctx.measureText(firstTitle).width; //console.log(ctx.measureText(firstTitle).width); if (firstWidth > 260) { let secondWidth = ctx.measureText(secondTitle).width; //第二行字数超过,变为... if (secondWidth > 260) { secondTitle += "..."; break; } else { secondTitle += element; } } else { firstTitle += element; } } //第一行文字 ctx.fillText(firstTitle, 20, 278, 280)//绘制文本 //第二行问题 if (secondTitle) { ctx.fillText(secondTitle, 20, 300, 280)//绘制文本 } [代码] 通过 ctx.measureText 这个方法可以判断文字的宽度,然后进行切割。 (一行字允许宽度为280时,判断需要写小点,比如260) 二、获取临时地址并设置图片 [代码]let mainImg = "https://demo.com/url.jpg"; wx.getImageInfo({ src: mainImg,//服务器返回的图片地址 success: function (res) { //处理图片纵横比例过大或者过小的问题!!! let h = res.height; let w = res.width; let setHeight = 280, //默认源图截取的区域 setWidth = 220; //默认源图截取的区域 if (w / h > 1.5) { setHeight = h; setWidth = parseInt(280 / 220 * h); } else if (w / h < 1) { setWidth = w; setHeight = parseInt(220 / 280 * w); } else { setHeight = h; setWidth = w; }; console.log(setWidth, setHeight) ctx.drawImage(res.path, 0, 0, setWidth, setHeight, 20, 50, 280, 220); ctx.draw(true); }, fail: function (res) { //失败回调 } }); [代码] 在开发过程中如果封面图无法按照约定的比例(280x220)给到: 那么我们就需要处理默认封面图过大或者过小的问题,大致思路是:代码中通过比较纵横比(280/220=1.27)正比例放大或者缩小原图,然后从左上切割,竟可能保证过高的图是宽度100%,过宽的图是高度100%。 在canvas中draw图片,必须是一个(相对)本地路径,我们可以通过将图片保存在本地后生成的临时路径。 微信官方提供两个API: wx.downloadFile(OBJECT)和wx.getImageInfo(OBJECT)。都需先配置download域名才能生效。 三、裁切“圆形”头像画图 [代码]ctx.save(); //保存画图板 ctx.beginPath()//开始创建一个路径 ctx.arc(35, 25, 15, 0, 2 * Math.PI, false)//画一个圆形裁剪区域 ctx.clip()//裁剪 ctx.closePath(); ctx.drawImage(headImageLocal, 20, 10, 30, 30); ctx.draw(true); ctx.restore()//恢复之前保存的绘图上下文 [代码] 使用图形上下文的不带参数的clip()方法来实现Canvas的图像裁剪功能。该方法使用路径来对Canvas话不设置一个裁剪区域。因此,必须先创建好路径。创建完整后,调用clip()方法来设置裁剪区域。 需要注意的是裁剪是对画布进行的,裁切后的画布不能恢复到原来的大小,也就是说画布是越切越小的,要想保证最后仍然能在canvas最初定义的大小下绘图需要注意save()和restore()。画布是先裁切完了再进行绘图。并不一定非要是图片,路径也可以放进去~ 小程序 canvas 裁切BUG [代码]ctx.setFillStyle("#fff"); ctx.fillRect(0, 0, 320, 500); //第一个填充矩形 wx.downloadFile({ url: headUri, success(res) { ctx.beginPath() ctx.arc(50, 50, 25, 0, 2 * Math.PI) ctx.clip() ctx.drawImage(res.tempFilePath, 25, 25); //第二个填充图片 ctx.draw() ctx.restore() ctx.setFillStyle("#fff"); ctx.fillRect(0, 0, 320, 500); ctx.draw(true) ctx.restore() } }) [代码] clip裁切这个功能,如果有超过一张图片/背景叠加,则裁切效果失效。 错误参考:http://html51.com/info-38753-1/ 四、将canvas导出成虚拟地址 [代码]wx.canvasToTempFilePath({ fileType: 'jpg', canvasId: 'customCanvas', success: (res) => { console.log(res.tempFilePath) //为canvas的虚拟地址 } }) res: { errMsg: "canvasToTempFilePath:ok", tempFilePath: "http://tmp/wx02935bb29080a7b4.o6zAJswFAuZuKQ5NZfPr….cGnD1a02PlVC0b3284be3a41d08986c2477579a5fd8e.jpg" } [代码] 这里需要把canvas里面的内容,导出成一个临时地址才能保存在相册,比如: http://tmp/wx02935bb29080a7b4.o6zAJswFAuZuKQ5NZfPr5UfJVR4k.cGnD1a02PlVC0b3284be3a41d08986c2477579a5fd8e.jpg 五、询问并获取访问手机本地相册权限 [代码]wx.getSetting({ success(res) { console.log(res) if (!res.authSetting['scope.writePhotosAlbum']) { //判断权限 wx.authorize({ //获取权限 scope: 'scope.writePhotosAlbum', success() { console.log('授权成功') //转化路径 self.saveImg(); } }) } else { self.saveImg(); } } }) [代码] 判断是否有访问相册的权限,如果没有,则请求权限。 六、保存到用户手机本地相册 [代码]wx.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: function (data) { wx.showToast({ title: '保存到系统相册成功', icon: 'success', duration: 2000 }) }, fail: function (err) { console.log(err); if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny") { console.log("当初用户拒绝,再次发起授权") wx.openSetting({ success(settingdata) { console.log(settingdata) if (settingdata.authSetting['scope.writePhotosAlbum']) { console.log('获取权限成功,给出再次点击图片保存到相册的提示。') } else { console.log('获取权限失败,给出不给权限就无法正常使用的提示') } } }) } else { wx.showToast({ title: '保存失败', icon: 'none' }); } }, complete(res) { console.log(res); } }) [代码] 保存到本地需要一定的时间,需要加一个loading的状态。 七、关于组件中引用canvas [代码]let ctx = wx.createCanvasContext('posterCanvas',this); //需要加this [代码] 在components中canvas无法选中的问题: 在components自定义组件下,当前组件实例的this,表示在这个自定义组件下查找拥有 canvas-id 的 <canvas> ,如果省略则不在任何自定义组件内查找。
2021-09-13 - [填坑手册]小程序新版订阅消息+云开发实战与跳坑
[图片] 老版本的订阅消息在2020年1月10日就下线了,相信不少人在接入新版本订阅系统的时候,或多或少会遇到一些问题,这里智库君跟大家介绍下新版订阅的机制和不需要node/后端的情况下 独立完成功能开发。 一、新版订阅的机制 其实开发过程不难,但是要理清楚它里面的机制,智库君还是花了一些时间的,也踩了不少坑 先来看下官方介绍: [图片] 可以设置多个订阅选项 感叹号里面可以看到详情 有个默认不被选中的“总是”选项 这些就是新不同的地方,智库君在开发的时候也有很多疑问,点了“总是”再点“取消”按钮会怎样?部分选择订阅会怎样?下面为大家一一梳理 (1)部分选中 [图片] 比如现在有三个选项 A,B,C,用户**“部分选中”**返回的情况: [图片] 这里用真机调试可以看到,有个返回值状态为“reject”。 如果我们反复几点点击同一个订阅后,这些值是如何计算的呢? 举例: [图片] 从这里看出,微信系统会自动记录用户点击的次数,并且做累加记录,如果用户只允许2次发送,而开发者发送了3次,最后一次将会被拒绝。 (2)点击“总是保持以上选择,不再询问”的情况 [图片] 当用户点击“总是”之后,同一个类型的订阅将不再弹出,那如果有多个订阅选项呢? 举例 订阅AAA 三个订阅模板为 X Y Z 订阅BBB 二个订阅模板为 Y W 这时候如果“订阅AAA”按钮选择了“总是”,那么再点击“订阅BBB”按钮,将只会弹出一个选项“W”,不会有 “Y” 的模板,因为在之前 “订阅AAA” 按钮中已经包含了。 [代码]wx.requestSubscribeMessage({ tmplIds: ["MECDDOdhbC3SrQmMY5XrfqiIGbMTzpEN8Z7ScXJfcd0", "iSb2NIlNnnO60wlI-8Wx5Pe82jR7TRdwjotSXtM1-ww"], success(res) { console.log(res); } }) [代码] 显示内容仅一个选项: [图片] 这里需要注意,“总是”选项是全局有效,不区分页面,选中“总是”的 W,X,Y,Z的模板,在全局任意页面中再次调用,再次调用将不再会显示! [图片] 返回值无提示用户是否选中“总是”。 (3)用户点击“总是”后,获取状态 [图片] [代码]wx.getSetting({ withSubscriptions: true, success(res) { console.log(res.authSetting) // res.authSetting = { // "scope.userInfo": true, // "scope.subscribeMessage": true // } console.log(res.subscriptionsSetting) // res.subscriptionsSetting = { // SYS_MSG_TYPE_INTERACTIVE: 'accept', // SYS_MSG_TYPE_RANK: 'accept', // zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', // ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban', // } } }); [代码] [图片] 这里可以调用wx.getSetting方法,但是需要注意:如果用户第一次选“总是”后点击“取消”按钮或者订阅模板全部是未选中/reject的,那将获取不到状态(这里可能是BUG,期待官方未来修复)。 (4)用户点击“总是”后,让用户手动修改 前面说到用户点击“总是”后,系统将不再弹窗,但是我们可以通过**“wx.openSetting”**引导用户手动修改。 [代码]wx.openSetting({ success(res) { console.log(res.authSetting) // res.authSetting = { // "scope.userInfo": true, // "scope.userLocation": true // } } }) [代码] [图片] [图片] 当然用户自己也可以修改 [图片] 总结 【重点】选择“总是”,很多人认为就可无限发送订阅消息,这个是错误的,勾选和不勾选唯一的区别就是每次触发订阅的时候会不会弹授权窗口!!! 用户点击次数系统会自动累加,直接影响后台发送通知的次数。 用户选择“总是”后,小程序界面不再弹窗,但仍然有回调/callback。 任意订阅模板在用户选中“总是”(包括接受/拒绝2个状态)后,全局有效,就算其他订阅包含“此模板”也不再显示/弹出 当用户选择“总是”中“accept/选中/接受”的状态后,可以在wx.getSetting查询到用户是否选择“总是”。 当用户选择“总是”中“reject/未选中/拒绝”的状态后,返回值“无感知”(这里可能是BUG) 二、功能开发 使用微信自带的云开发,可以在没有node/后端开发支持下,完成整个订阅流程的开发。 (1)微信后台设置订阅模板和获取模板ID 1、打开小程序后台,找到订阅消息设置 [图片] 2、在公共模板库找模板或者自己申请新模板,建议能用现成模板用现成的,因为申请周期可能较长,且容易被拒 [图片] 3、选好模板后,点击详情 [图片] 4、查看模板内容和发送DATA的结构 [图片] 5、复制模板ID (2)配置云函数 [图片] [图片] 1、新建getOpenId云函数,用于获取用户的openID [代码]// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函数入口函数 exports.main = async (event, context) => { const wxContext = cloud.getWXContext() return { event, openid: wxContext.OPENID, appid: wxContext.APPID, unionid: wxContext.UNIONID, } } [代码] 2、新建订阅推送通知云函数 [代码]// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() //订阅推送通知 exports.main = async (event, context) => { try { const result = await cloud.openapi.subscribeMessage.send({ touser: event.openid, //接收用户的openId page: 'pages/my/index', //订阅通知 需要跳转的页面 data: { //设置通知的内容 thing1: { value: '小程序订阅填坑' }, thing2: { value: '智库方程式' }, thing3: { value: '一起学习,一起进步' } }, templateId: '5Efr7IqIooYO9nPw047Iggxbm9Ge2Km10GQ4amGOUac' //模板id }) console.log(result) return result } catch (err) { console.log(err) return err } } [代码] 写完云函数记得右键部署下!!! (3)小程序代码部分 [代码]<!------------html -------------> <button bindtap="getOpenId" type='primary'>获取openId</button> <view class="subBtn" catch:tap="sub">订阅AAA</view> <view class="subBtn" catch:tap="send">订阅推送测试</view> <view class="subBtn" catch:tap="setting">设置“总是”后,跳转修改</view> [代码] [代码]//JS 部分 //获取用户的openid getOpenId() { wx.cloud.callFunction({ name: "getOpenId" }).then(res => { let openid = res.result.openid console.log("获取openid成功", openid) }).catch(res => { console.log("获取openid失败", res) }) }, //发送模板消息给指定的openId用户 send(openid){ wx.cloud.callFunction({ name: "sendSub", data: { openid: openid } }).then(res => { console.log("发送通知成功", res) }).catch(res => { console.log("发送通知失败", res) }); }, //消息订阅 sub: function () { wx.requestSubscribeMessage({ tmplIds: ["5Efr7IqIooYO9nPw047Iggxbm9Ge2Km10GQ4amGOUac"], success(res) { console.log("订阅授权成功:"+res); }, fail(res){ console.log("订阅授权失败:" + res); } }) }, //帮助用户跳转修改订阅状态 setting:function(){ wx.openSetting({ success(res) { console.log(res.authSetting) // res.authSetting = { // "scope.userInfo": true, // "scope.userLocation": true // } } }) }, [代码] (4)测试流程 点击发送通知后,获得这样的效果: [图片] [图片] 获得对应返回值: [图片] 当errCode为0时,即发送通知成功。 当errCode为43101,说明用户只授权了一次,但是你发送了2次,超过用户授权次数。 [图片] 三、进阶与思考 1、当你有多个订阅模板同时需要用户选择时,你可以通过以下代码记录,用户哪些选了,哪些没选。 [代码]wx.requestSubscribeMessage({ tmplIds: ["5Efr7IqIooYO9nPw047Iggxbm9Ge2Km10GQ4amGOUac", "OBB_Z10eh_Inm9p8EU6Ml_NS_mijXgTz3T07cxgKvX0","5Efr7IqIooYO9nPw047Iggxbm9Ge2Km10GQ4amGOUac"], success(res) { //console.log(res); if (res.errMsg == "requestSubscribeMessage:ok") { let acceptArray = []; //用户授权模板列表 for (let i = 0; i < tmplIds.length; i++) { const element = tmplIds[i]; if (res[element] == "accept") { acceptArray.push(element); } }; console.log(acceptArray); if (acceptArray.length > 0) { //执行下一步函数 } } } }) [代码] 2、一个关于是否需要记录用户对某个“订阅模板授权的次数”,以控制后台“发送的次数”,智库君在实战中认为,其实没有必要,顶多就是你发送返回一个错误码,微信之所有记录用户授权次数,也是为了保护用户不被骚扰。 3、你只需要记录用户点击了哪些需要授权的模板就行,为了是用户点击订阅后,改变按钮的状态,避免订阅按钮反复弹窗的问题,同时当检测到用户点错“总是”按钮后,可以自动跳转到“设置”界面。 4、这次智库君主要给大家简单介绍了下订阅全流程。后面大家可以根据自己的需要,添加和改进这些代码。比如: 配置云函数中的node函数,实现定时发送 配置云函数中的数据库,实现内容的自定义发送 最后,希望这篇文章能帮助到大家,一起学习,一起进步! (官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html) 往期回顾: [打怪升级]小程序自定义头部导航栏“完美”解决方案 [填坑手册]小程序Canvas生成海报(一) [拆弹时刻]小程序Canvas生成海报(二)
2021-09-13 - (新版)微信小程序推送订阅消息分享
背景 微信小程序把模板消息改为订阅消息后,推送方式有一些区别,以下是过程分享 推送消息配置 请求URL:https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=您的access_token 请求类型:POST 请求数据格式:JSON { "touser": "05Z7o5CbuJMgLdTfkvHjuQKpFz88", "template_id": "wR1Pq5wHQ00iWTvkEQrbpkNtW-VQGzjuYCIwlZGj2Z0", "data": { "thing6": { "value": "上海正大广场店" }, "thing5": { "value": "汽车养护" }, "time4": { "value": "2021-09-10 10:00:00" }, "thing2": { "value": "请您在预约时间之前赶到门店哦" }, "thing7": { "value": "驾车请注意安全" } } } !!!特别注意:data对象中的thing5、thing7、thing6、time4等这些参数是微信小程序后台-订阅消息中的你申请的模板消息-详情中的参数,一定要严格按模板消息来配置。 返回结果: 推送成功后,会返回ok并且有msgid表示推送成功。 { "errcode": 0, "errmsg": "ok", "msgid": 2039470940832497665 } 推送成功的订阅消息,会出现在”服务通知“栏目里面,如下所示: [图片] 代码分享 代码使用C#开发,仅供参考 public void Send() { // 模板消息发送接口,https调用 string URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="; // 您的access_token string access_token = "48_IEirsN-XWv_stoaR8_xGcH_2Kc_fU5NsAt7LnCcH7Ba0S1ySdkDxAEPDrbuDSYo7_AJLPhAFASUY"; // 构造参数对象 var param = new { touser = "o5Z7o5Cbu35t3LdTfkvHjuQKpFzM8", template_id = "wR1Pq5wH666666QrbpkNtW-VQGzjuYCIwlZGj2Z0", data = new { thing6 = new { value = "上海正大广场店" }, // 服务门店 thing5 = new { value = "汽车养护" }, // 服务项目 time4 = new { value = "2021-09-10 10:00:00" }, // 日期 thing2 = new { value = "请您在预约时间之前赶到门店哦" }, // 保养说明 thing7 = new { value = "驾车请注意安全" } // 温馨提示 } }; // 拼接access_token string url = URL + access_token; // 转化为json string postData = DataHelper.ObjectToJson(param); // 开始请求 TemplateSendResultModel content = HttpHelper.Post(url, postData); WSPLog.Info("发送模板消息", content.errmsg); }
2021-09-09 - 一眼告诉你什么是订阅消息了,看完就懂订阅消息。
消息通知有两种: 一、A的动作后,发消息给A自己,这种容易解决,不多说明; 二、A动作后,发消息给B(比如管理员、店家、楼主),如何保证B收到消息?这种是本方案要解决的问题。 一张图片一眼告诉你什么是订阅消息,产品经理的设计UI居然让人一眼就知道订阅消息是什么玩意。 [图片] 用户 B (管理员、商家、组长、楼主)在知道订阅数不足后,打开小程序来续订阅数,否则没法收到订阅消息。 [图片] 补充一: 关于勾选按钮,请注意话述是:“总是保持以上选择,不再询问”,而不是:“总是同意接收订阅消息”,不要幻想就成了永久性订阅消息; 相当于你打电话订外卖,对店家说“老样子”,店家只会马上送一次外卖,而不是会以后每天自动给你送外卖了。 勾选和不勾选的区别是什么呢? 区别仅仅是:不勾选时,必须点击订阅10次,弹窗10次;勾选后,仍然必须点击订阅10次,但是不弹窗。无论如何“订阅”这个点击n次的动作少不了。 补充二: 一旦勾选后,就不可逆了,没有任何办法恢复或取消勾选了,除非你小程序MP后台换一次消息模板号(删除模板,重新添加一次)。 补充三: 关于如何保存订阅数。 保存在数据库中,笔者用的是云开发,数据库表user结构如下: { _id:'openid1', nickName:'老张', msg:{ "tempId1":5, "tempId2":7, } } 补充四: 关于如何获取订阅数。两种方式: 一、wx.requestSubscribeMessage的回调success里获取; 二、消息推送机制获取;https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push.html
2022-09-21 - 微信公众号后台点击电子发票提示“发生错误”,是怎么回事?
如下图,一直出错。 [图片]
2019-12-31 - 根据开票平台提供的电子发票开票文档向开票平台发送开票请求
https://developers.weixin.qq.com/doc/offiaccount/WeChat_Invoice/E_Invoice/Vendor_and_Invoicing_Platform_Mode_Instruction.html 8 根据开票平台提供的电子发票开票文档向开票平台发送开票请求,之前在第4步时传入的order_id需作为其中一个参数传递给开票平台,以便开票平台在电子发票开具成功后将发票插入用户微信卡包 上边说的这一步到底在哪里?
2021-01-11 - 微信电子发票“自建平台”模式,开票后,发票插入卡包报72038?
微信电子发票 开票失败 {"errcode":72038,"errmsg":"invoice order never auth hint: [E0XJ5a0129e653]"} 参数为:{"card_ext":{"user_card":{"invoice_user_data":{"fee":1,"billing_time":"1607579129","check_code":"222222","s_pdf_media_id":"4324363860661076972","tax":1,"fee_without_tax":1,"title":"个人","billing_no":"033002000611","billing_code":"77131931"}},"nonce_str":"2012101310d15941bf45439685c078cd2c988d4c"},"appid":"wx7b5a1d818c9f8c8e","order_id":"20201130100115445sru","card_id":"peKFBxBpaPM8nuHapcxh3_UfYQyU"}
2020-12-10 - 公众平台电子发票功能
一、电子发票的申请条件 1、需通过公众平台微信认证(资质审核通过); 2、帐号类型:服务号、订阅号; 二、申请步骤 进入公众平台->添加功能插件->电子发票功能->申请开通。 温馨提示:符合申请条件,点击“申请开通”勾选“同意协议”后,功能立即开通成功。 三、电子发票购买方式 一个公司对应一个税号,可根据公司的具体情况选择对应的开票平台以及对应的套餐。进入公众平台->电子发票功能->套餐购买及管理。 购买流程: 第一步:选择套餐 选择开票平台:分别有百望、用友、瑞宏3个平台可供选择(套餐金额也不等); 填写门店数量; 资证上传;(根据套餐不同,页面有模板下载填写完后再上传) 第二步:资料填写 填写办税联系人信息 注:申请时需要填写办税联系人是由于电子发票发行需CA签章,签章需填写办税联系人信息。 填写企业资本、证照信息 温馨提示:资质提交完后,在3-5个工作日留意审核结果,审核通过即可进行支付。
2019-11-21 - 客服消息接口能力调整后,当连续发生不同规则事件时发送限制如何覆盖?
[图片] 当连续发生多个事件时,客服消息发送限制将如何计算 情况1:扫描二维码 -> 用户发送消息,当前发送限制是1分钟内可发送3条,还是48小时内可发送20条? 情况2:用户发送消息 -> 使用客服消息接口下发了3条消息 -> 扫描二维码,当前发送限制是1分钟内可发送3条,还是48小时内可发送17条? 情况3:用户发送消息 -> 使用客服消息接口下发了3条消息 -> 取消关注公众号 -> 关注公众号,当前发送限制是1分钟内可发送3条,还是48小时内可发送17条?
2021-05-25 - 请问如何区隔售前消息和客服消息?
目前我们测试了下服务号对话能力,添加了在线顾问,通过扫码建立了用户(客户)与顾问的关系 但是目前在公众号界面回复消息,新的在线顾问手机端能得到消息然后去回复,但是原来设置的在线客服也能看到这个消息,也能回复消息 而且互相还能看到对方回复的消息历史 如果是售前处理售前消息(在线顾问到处跑手机回复方便),售后处理售后消息(在线客服可以在电脑面前回复),消息要互相隔离,目前可以实现么
2020-11-18 - 安卓系统下设置手机字体大小会改变小程序的字体大小,导致样式错乱?
安卓系统下设置手机字体大小会改变小程序的字体大小,导致样式错乱? 错乱的[图片] 正常的[图片]
2020-04-07 - 微信字体大小改变导致H5页面布局错乱,如何解决?
改变微信默认字体大小,导致公众号内开发的H5页面布局错乱
2020-05-07 - 关于微信安卓端网页字体适配的通知
为了提供给用户更好的阅读体验,微信安卓版 7.0.10 版本起,网页的字体会跟随微信设置里的字体大小更改而变化。 若调整字体变大或变小后,部分未适配网页的排版会出现显示错乱,建议未进行适配的开发者尽快完成对“ 字体大小” 的适配。 查看网页在字体不同大小下展示效果的方法: 方法1:"设置">"通用">“字体大小">进行字体大小修改后查看对应网页显示效果。 方法2:在微信内访问对应网页右上角”…">底部菜单栏选择调整字体">进行字体大小修改后查看对应网页显示效果。 另外,对于现有的显示问题,我们提供以下方案让开发者临时将字体还原标准大小。同时,开发者可以在页面中提示用户在右上角”…”更多菜单中修改字体到合适的大小。 下列方案可以将字体还原标准大小,但我们仍然建议后续做字体适配来提高用户的阅读体验。 『字体还原标准大小』方案: 我们提供了一个 JSAPI 用于设置字体大小,只需将字体大小等级设置为 2 (标准)即可,代码示例如下: document.addEventListener("WeixinJSBridgeReady", function () { WeixinJSBridge.invoke("setFontSizeCallback", { fontSize: '2' }); }, false); 此外,若页面是用 rem 单位进行排版的(目前该做法更容易导致页面不可用),可以反向重置 font-size 的数值达到还原字体标准大小的目的,此方法在效果上也比较理想。代码示例如下: // 以下代码思路来源网络。同时代码放在 body 标签开头位置效果最佳 var $dom = document.createElement('div'); $dom.style = 'font-size: 10px'; document.body.appendChild($dom); // 计算出放大后的字体 var scaledFontSize = parseInt(window.getComputedStyle($dom, null).getPropertyValue('font-size')); document.body.appendChild($dom); // 计算原字体和放大后字体的比例 var scaleFactor = 10 / scaledFontSize; // 取 html 元素的字体大小 var originRootFontSize = parseInt(window.getComputedStyle(document.documentElement, null).getPropertyValue('font-size')); // 由于设置 font-size 后实际会变大,故 font-size 需设置为更小一级 document.documentElement.style.fontSize = originRootFontSize * scaleFactor * scaleFactor + 'px';
2020-01-14 - 服务号订阅通知灰度测试延期公告
服务号订阅通知自2021年1月27日0:00正式上线开启灰度测试,应商家和开发者需求,灰度测试期延期,期间服务号模板消息可正常使用。 灰度测试期结束时间及后续策略将另行公布,届时以官方信息为准。 开发者使用订阅通知功能时,需遵循运营规范,不可用奖励或其它形式强制用户订阅,不可下发与用户预期不符或违反国家法律法规的内容。具体可参考文档:《微信公众平台运营规范》。 微信团队 2021年4月29日
2021-04-29 - onMenuShareTimeline和onMenuShareAppMessage没有回调了?
公众号页面,旧的分享wx.onMenuShareTimeline和wx.onMenuShareAppMessage,success、complete都没回调了?
2020-02-13 - wx.updateTimelineShareData方法无法在分享成功后执行回调了吗?
wx.updateTimelineShareData 使用该方法进行微信公众号分享到朋友圈功能。分享后无法执行回调,而且初始化的时候就执行了success,这是怎么回事呢?也没看到微信官方相关的公告啊。
2020-09-16 - jssdk 1.6.0 为什么页面初始化就会执行分享成功的回调?
jssdk 1.6.0 ;wx.updateTimelineShareData 为什么页面初始化就会执行success, 不是用户点击右上角分享才会执行吗?
2021-03-29 - 请问接入顾问码后还需要关键词回复怎么办?
我使用这个系统主要是做班主任服务学员的,一方面学生关注服务号学习会自动分配给对应班主任服务,另一方面也需要API关键词触发服务,比如学生回复成绩查询,要通过API自动查询学生成绩。现在接入顾问后,关键词失效了,这就问题大了。
2021-05-13 - 小程序模板消息能力调整通知
小程序模板消息能力在帮助小程序实现服务闭环的同时,也存在一些问题,如: 1. 部分开发者在用户无预期或未进行服务的情况下发送与用户无关的消息,对用户产生了骚扰; 2. 模板消息需在用户访问小程序后的 7 天内下发,不能满足部分业务的时间要求。 为提升小程序模板消息能力的使用体验,我们对模板消息的下发条件进行了调整,由用户自主订阅所需消息。 一次性订阅消息 一次性订阅消息用于解决用户使用小程序后,后续服务环节的通知问题。用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。 [图片] (一次性订阅示例) 长期性订阅消息 一次性订阅消息可满足小程序的大部分服务场景需求,但线下公共服务领域存在一次性订阅无法满足的场景,如航班延误,需根据航班实时动态来多次发送消息提醒。为便于服务,我们提供了长期性订阅消息,用户订阅一次后,开发者可长期下发多条消息。 目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。 调整计划 小程序订阅消息接口上线后,原先的模板消息接口将停止使用,详情如下: 1. 开发者可登录小程序管理后台开启订阅消息功能,接口开发可参考文档:《小程序订阅消息》 2. 开发者使用订阅消息能力时,需遵循运营规范,不可用奖励或其它形式强制用户订阅,不可下发与用户预期不符或违反国家法律法规的内容。具体可参考文档:《小程序订阅消息接口运营规范》 3. 原有的小程序模板消息接口将于 2020 年 1 月 10 日下线,届时将无法使用此接口发送模板消息,请各位开发者注意及时调整接口。 微信团队 2019.10.12
2019-10-13 - 小程序分享及用户信息授权等接口能力的调整通知
针对近期部分小程序接口能力使用不合理的情况,微信公众平台将对下列能力进行调整。开发者可在最新版开发者工具内,选择最新基础库版本体验。调整方案具体如下,请开发者尽快完成适配。 1、分享监听接口 10月10日起新提交的版本,用户从小程序、小游戏中分享消息给好友时,开发者将无法获知用户是否分享完成,也无法在分享后立即获得群ID。请参考调整指引 2、getUserInfo接口 10月10日起新提交的版本,用户在小程序、小游戏中需要点击组件后,才可以触发登录授权弹窗、授权自己的昵称头像等数据。请参考调整指引 3、openSetting接口 10月10日起新提交的版本,用户在小程序、小游戏中需要点击行为后,才可以跳转打开设置页,管理授权信息。请参考调整指引
2018-09-12 - jssdk 1.4版本里设置分享去掉了分享成功或失败的回调?
自定义“分享给朋友”及“分享到QQ”按钮的分享内容(1.4.0)[代码]wx.ready(function () { //需在用户可能点击分享按钮前就先调用 wx.updateAppMessageShareData({ title: '', // 分享标题 desc: '', // 分享描述 link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: '', // 分享图标 }, function(res) { //这里是回调函数 }); }); [代码] 自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容(1.4.0)[代码]wx.ready(function () { //需在用户可能点击分享按钮前就先调用 wx.updateTimelineShareData({ title: '', // 分享标题 link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: '', // 分享图标 }, function(res) { //这里是回调函数 }); });[代码] 参考文档,里面的“这里是回调函数”,应该是设置成功之后的回调函数,不是分享成功或者失败的回调函数,入参里也没有success,fail字段,之前官方公布的不管是否用户真的分享了 都会触发success,现在是直接去掉了回调?请官方的解释一下
2018-10-30 - 微信网页开发 jssdk新分享接口,可以获取用户点击分享按钮的事件吗?(不需要知道是否分享成功)
网页开发,jssdk 新分享接口 updateAppMessageShareData 、updateTimelineShareData,有什么办法可以监听到用户点击分享按钮了,不需要知道是否分享成功,只想知道用户点击了分享按钮弹出朋友列表界面这个事件,请问可以监听到吗?目前success 以及 complete 回调测试出来都是设置的时候就返回了,分享的时候并不会触发
2020-11-13 - 订阅消息 什么样才是不一样场景还有用户怎么删除已订阅的消息ID?
现在官方说用户一次性可以订阅最多3条订阅消息,不一样场景可以订阅再最多3条 那么什么样子的才算一个场景? 是同一个小程序不一样页面订阅3条。 2个页面就是可以订阅6条,以此类推吗? 还有就是 用户怎么删除自己订阅的消息呢,我测试貌似只能勾选收到和不收到删除按钮怎么搞?
2021-03-15 - 如何设置关键词自动回复?
1、关键词自动回复功能的介绍 在微信公众平台设置关键词自动回复,可以通过添加规则(规则名最多为60字数),订阅用户发送的消息内如果有您设置的关键字(关键字不超过30字数,可选择是否全匹配如设置了全匹配则必须关键字全部匹配才生效),即可把您设置在此规则名中回复的内容自动发送给订阅用户。 2、关键词自动回复设置方法 登录微信公众平台->功能->自动回复->关键词自动回复->添加规则,即可添加相应的关键词自动回复信息。 温馨提示: 1)文字中可以输入网页链接地址,但不支持设置超链接; 2)关注用户发送消息命中设置关键字回复规则后会有5秒钟的响应时间; 3)规则名称自己设定(主要起区分作用); 4)关键词配置(作为粉丝发来命中的关键字); 5)回复信息(命中关键字后自动回复的信息内容); 6)勾选了“回复全部”,只要粉丝命中关键字就会自动回复该规则内的所有回复;若未勾选,会随机回复; 7)建议在一个规则里设置一个关键字,以便粉丝获得想要的答案。 3、关键词自动回复的规则 1)字数限制: 微信公众平台认证与非认证用户的关键词自动回复设置规则上限为200条规则(每条规则名,最多可设置60个汉字),每条规则内最多设置10条关键词(每条关键字,最多可设置30个汉字)、5条回复(每条回复,最多可设置300个汉字)。 2)规则设置: 您可通过微信公众平台设置多个关键词,如订阅用户发送的信息中含有您设置的关键词,则系统会自己回复。 同一规则中可设置5条回复内容,如您设置了“回复全部”,粉丝发送信息中含有您设置的关键词,会将您设置的多条回复会全部发送,若未设置“回复全部”,则会随机回复。 4、关键词设置 1)每个规则里可设置10个关键词,若设置了相同的关键字,但回复内容不同,系统会随机回复。 2)每个规则里可设置5条回复内容,若设置了多个回复内容(没有设置“回复全部”),系统会随机回复。 3)多条回复设置方法:点击关键词自动回复=》添加规则=》输入关键词匹配内容后,再添加内容,然后选择“回复全部”即可。 4)关键词在设置时使用回车来分隔, 输入回车可添加多个关键字,每个关键词少于30个字符,请勿使用逗号“,”分号“;”,顿号“、”句号“。”进行区分。 温馨提示:关键词设置不支持使用空格和字符隔开,只能使用回车键添加多个关键字。 5、完全匹配功能设置 1)若选择了全匹配,在编辑页面则会显示“已全匹配”(如图): 对方发送的内容与设置的关键词须完全一样,才会触发关键字回复,不能多一个字符也不能少一个字符。比如设置“123”,仅回复“123”才会触发关键词回复。 [图片] 2)若没有选择全匹配的情况下,编辑页面则会显示“未全匹配”(如图): 只要对方发送内容包含设置的完整关键词,就会触发关键词回复给对方。比如设置“123”,回复“1234”会触发,但回复不完整的关键词“12”则不会触发关键词回复。 [图片]
2020-01-08 - 用户标签管理下的批量为用户打标签,批量为用户取消标签和获取标签下粉丝列表接口调用上限次数是多少?
用户打标签,批量为用户取消标签和获取标签下粉丝列表接口调用上限次数是多少
2021-02-04 - 求解?批量为用户打标签,45011错误、45159错误?
调用批量打标签的功能,一次打50个用户,268000用户需要打五千多次,开始调用不报错,后续接口报45011(接口频率太高)的错误,继续打标签就报45159(标签非法),求解?
2020-03-18 - “客服消息”功能介绍与开发指引
产品简介:小程序客服消息帮助你释放人力运营成本,拉近你与用户的服务频次,提升服务质量。 优势:低成本,随时随地为用户提供咨询服务。 接入方式:需开发。 关键词:服务窗口,营销运营。 01 客服多种消息类型 用户可在小程序中便捷地打开客服会话界面,与客服人员进行实时沟通。客服消息提供了多种消息类型:文本、图片、公众号图文、小程序卡片。 [图片] 02 多种使用场景 1)网页版客服工具 我们提供了网页客服工具,可满足简单的客服咨询场景,商户无需开发即可使用。使用前需在小程序管理后台配置客服人员。 [图片] 2)后台接入客服消息 为满足更多个性化的客服场景,我们提供了后台接入客服消息的能力,接入后用户的客服消息将被转发至商户的服务器。这需要商户有一定的开发能力。 3)小程序客服子商户 对“电商平台”类目小程序,我们提供了客服子商户能力,一个小程序可创建多个客户账号。在用户客服会话列表中每个客服账号彼此独立,可为用户提供更优质的客服体验。 03 运营建议 小程序客服消息建议使用场景 售前咨询/售后服务:完善小程序商城客服能力,结合售前/售后场景,提升转化率和用户体验。售前咨询入口建议在商品详情页内露出,售后服务入口建议在订单流程或个人中心露出。 04 开发指引 开发指引内容较长,建议使用电脑详细查阅。点击打开文档 以上案例素材,整理自试点小程序。
2020-01-15 - 公众号里的模板消息和订阅消息有什么区别么,公众号的模板消息会下架么?
1.从推送给用户形式上:模板消息和订阅消息都是什么形式啊?
2021-02-05 - 公众号菜单栏如何跳转到历史消息?
想要保存发布,总是提示请设置当前菜单栏内容 [图片] [图片]
2020-11-14 - 微信公众号订阅通知网页订阅,组件和通知数量限制是多少?
微信公众号订阅通知服务上线后,每篇文章最多插入10个订阅通知组件(每个组件至多包含5条通知,每个组件不能同时包含一次性订阅和长期订阅),那么每个网页页面最多可以插入多少个订阅通知组件,每个组件至多可以包含多少条通知?
2021-03-05 - 微信公众号中模板消息和订阅消息有什么区别呢?
我的理解如下: 1.模板消息和订阅消息都是卡片形式的。如下:[图片] 2.订阅消息显示在服务通知里面,模板消息显示在公众号里面。 3.模板消息权限比较大,不需要订阅,就可以发送消息;而订阅消息需要一次订阅或者长期订阅,才能发送消息。 4.有人说公众号没有订阅消息,但我看微信开放文档里面有订阅消息的模块,所以说公众号也有订阅消息的吧? 5.公众号模板消息可能4月30号下线。 在线等,求dalao解答下,感谢。
2021-04-10 - 服务号订阅通知灰度测试
服务号模板消息能力的设计初衷,旨在帮助开发者实现及时通知,但存在一些问题,如: 1. 部分开发者在用户无预期的情况下,发送与用户无关的信息,对用户造成了骚扰。 2. 模板消息是用户触发后的通知消息,不支持营销类消息,不能满足部分业务需求。 为提升微信用户体验,我们开始灰度测试服务号订阅通知功能。 能力说明 开发者可在服务号图文消息、网页等场景设置订阅功能,用户自主订阅后,开发者可按需求下发一条对应的订阅通知。 [图片] 用户可在图文订阅通知 [图片] 用户可在网页订阅通知 灰度测试计划 服务号订阅通知功能即日上线,已认证的境内主体服务号可前往 MP 后台开通使用,详见说明。 1. 服务号订阅通知灰度测试期自2021年1月27日0:00至4月30日24:00,期间服务号模板消息可正常使用;灰度测试期结束后服务号订阅通知的策略将另行公布,届时以官方信息为准; 2. 开发者使用订阅通知功能时,需遵循运营规范,不可用奖励或其它形式强制用户订阅,不可下发与用户预期不符或违反国家法律法规的内容。具体可参考文档:《微信公众平台运营规范》 微信团队 2021年1月27日
2021-01-29 - 订阅消息和公众号模板消息区别?
订阅消息和公众号模板消息区别,
2020-10-20 - 一次性订阅消息,点击了“总保持以上选择,不再询问”情况下,后台发送超过了最大发送次数,如何重置次数?
一次性订阅消息,已点击“总保持以上选择,不再询问”,后台报错“user refuse to accept the msg",查找后发现一次性订阅消息有次数限制,提问:在这种情况下怎样才能再次发送订阅消息呢? 附报错时前台授权截图: [图片]
2021-02-08 - 针对新手很容易出现理解误区的微信小程序订阅消息模块
1. 写在前面 微信小程序下架了模板消息功能,取而代之的是订阅消息功能。这个订阅消息目前又分为「一次性订阅」和「永久订阅」。使用订阅消息也有一段时间了,感觉对新手订阅消息很容易让新开发者进入一个理解的误区,这里觉得有必要说出来 2. 理解误区 很多新手认为,只要用户勾选了小程序端订阅消息弹出时底部的「总是保持以上选择…」后,就可以「为所欲为」的不限次数的推送订阅消息给用户了。如下图: [图片] 3. 正确理解 如果你使用的「一次性订阅」模板(目前发现绝大多数开发者都是只能用一次性的,因为永久性的订阅消息申请门槛太高),那么勾选底部的「总是…」这个并不代表以后可以直接推送了。官方原话wx.requestSubscribeMessage的介绍里是这样写的: 3.1 官方说明 wx.requestSubscribeMessage(Object object) 基础库 2.8.2 开始支持,低版本需做兼容处理。 调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态。 注意事项 一次性模板 id 和永久模板 id 不可同时使用。 低版本基础库2.4.4~2.8.3 已支持订阅消息接口调用,仅支持传入一个一次性 tmplId / 永久 tmplId。 2.8.2 版本开始,用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。 2.10.0 版本开始,开发版和体验版小程序将禁止使用模板消息 fomrId。 3.2 重点关注 这里重点关注第7条:「用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。」这就意味着你需要在用户主动点击某个组件是触发调用wx.requestSubscribeMessage方法再次订阅,订阅后,你才可以「为所欲为」推送一次模板消息,注意只能一次。下次再想推送时,需要用户再次点击触发wx.requestSubscribeMessage。 4. 破局方案 目前订阅消息功能,就是这么个情况,所以针对这个情况的替代方案有以下 4.1 永久性订阅消息 如果能达到申请「永久性订阅」消息的模板的门槛,那自然是极好的,直接用永久性模板「为所欲为」。 4.2 使用服务号的模板消息替代 比较常用的是使用公众号服务号的模板消息代替小程序的订阅消息功能,公众号的模板消息功能限制就比订阅号好多了,基本上可以「为所欲为」的推送。但是这个方案有个致命的运营成本:必须要用户关注公众号,还有小程序要跟公众号同一主体并绑定在开放平台下。同时开发成本有所增加,要采用unionId机制来打通小程序跟公众号的openId。这个具体的实现方案,大家有兴趣的话可以讨论下。笔者目前就是用这种方案的。 5. 几个注意点 5.1 官方提示 订阅消息如果选择选择‘总是保持以上选择,"不再询问"后的设置问题: 目前是选择‘总是保持以上选择,"不再询问"后,可以在设置中开启或拒绝接收,但不会再次拉起授权弹窗 6. 长期性订阅消息 请参考官方最新文档: 小程序模板消息能力调整通知 | 微信开放社区 https://developers.weixin.qq.com/community/develop/doc/00008a8a7d8310b6bf4975b635a401 长期性订阅消息 一次性订阅消息可满足小程序的大部分服务场景需求,但线下公共服务领域存在一次性订阅无法满足的场景,如航班延误,需根据航班实时动态来多次发送消息提醒。为便于服务,我们提供了长期性订阅消息,用户订阅一次后,开发者可长期下发多条消息。 目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。 7.题外话 鉴于被戴上各种「刷赞,冲级,让社区点赞“通货膨胀”」等等一些恶毒字眼(最近多了个职业回复的「雅称」),各种帽子戴得,做一个开发爱好者积极分享和解决各种问题太难了,姑且不论咱写一篇文章需要截图多少,单单排版就得废掉俺多少时间哈,很受伤,所以本人决定在微信开放者社区封笔。你看到是俺最后一篇发表在微信开放社区的文章。如果你想继续查看俺的一些文章可以私聊我。我会在其他平台保持继续创作。bye-bye~ 8. 最最重要的来了 看完后觉得有用记得点赞~~ ↓点赞处↓
2020-09-04 - 一次性订阅是指对什么一次性订阅?
看了好多文章,但感觉一个大佬说一个样,搞懵了我,小程序的订阅消息推送,一次性推送是指对模板进行一次性授权,若点击保持允许不在询问之后,是不是可以通过这个模板永久性推送信息。还是一次性订阅是针对发送信息的,一次订阅就只能发送一次信息,这次消息发送之后,若还想接受消息则得回小程序点击授权。那么我现在要做一个根据用户设定的时间来提醒用户去完成任务的小程序,功能类似于微信的抽奖助手,抽奖助手根据开奖时间来推送开奖结果,请问这种需求该怎么实现,一次性订阅能做到吗
2020-07-22 - 服务号对话能力8.24更新|MP端上线“新客户自动分配顾问”功能
8月24日服务号对话能力周迭代版本本次更新主要迭代能力有—— 1、新客户自动分配顾问功能 为了帮助服务号运营者提高将新客户分配给顾问的效率,服务号对话能力在MP端上线了新客户自动分配顾问功能。服务号运营者可在MP后台-对话能力(原导购)-自动分配处打开“新客户自动分配顾问”开关。当服务号绑定的所有顾问的客户数达到上限时,该开关会自动关闭。 [图片] 2、小程序及MP后台两端上线反馈入口 为了收集一线顾问及服务号运营者的使用问题和建议反馈,“服务号对话助手”小程序及MP后台两端新增反馈入口,后续会定期收集顾问和服务号运营者对产品的反馈,改善体验。 【MP端】 [图片] 【小程序端】 游客态页面底部[图片] 设置页面底部[图片] tip: 如果你有寻找服务商帮忙运营服务号对话能力的需求,可以在服务号对话能力服务商专区的平台上寻找 [图片] 延展阅读: 服务号对话能力7.24更新|MP后台支持设置顾问统一欢迎语了 服务号对话能力7.14更新|服务号对话后台添加小程序素材放开主体限制了 服务号对话6.16更新 | 添加顾问新增确认环节,“服务号小助手”顾问消息通知上线 服务号对话能力6.2更新 | MP后台数据看板、群发任务单功能上线 5月22日服务号对话能力(原微信导购助手)周迭代版本,支持文字素材最多300字 “服务号对话能力”(原微信导购助手)服务商入驻邀请 微信导购助手更名为服务号对话能力 5月15日微信导购助手周迭代版本,支持关注导购后自动回复小程序素材 微信导购助手4月24日周迭代版本 微信导购助手4月17日周迭代版本,新增广告投放支持分配导购
2020-11-16 - 微信公众号运营第三讲:公众号后台功能详解-基础篇
公众号常用功能:基本信息设置、首次关注自动回复、关键字回复、自定义菜单、话题标签、原创管理、读者讨论、图文发布、数据分析。 公众号登录地址:https://mp.weixin.qq.com 基本信息设置:登录公众号后,鼠标移动到右上角你的公众号名字,点账号详情(公众号左侧边栏,拉到最下方设置-公众号设置)两种方法都可进入。 大家可查看(更改)公众号名字、头像、介绍、认证、下载关注二维码等。 [图片] 首次关注自动回复:登录公众号首页-左侧边栏功能-自动回复。可看到有3个功能:关键词回复、收到消息回复、被关注回复。 被关注回复:粉丝通过搜索、或者其他方式关注你的公众号,关注之后公众号默认给粉丝回复一段600字的话术,这个话术可留你的联系方式等。(如果话术违规,则会封禁此功能) [图片] 关键词回复:规则名称自己知道即可不会给粉丝展示,关键词可选择半匹配和全匹配,建议使用全匹配,回复内容可选择图文消息、文字消息、图片消息、音频/视频消息。比如我们设置关键词【客服】,回复文字内容【客服微信:wechat】,回复方式全部回复。然后保存。这样粉丝在公众号内回复:客服,公众号会自动给粉丝发送你设置好的回复内容【客服微信:wechat】、 [图片] 收到消息回复:这个一般用不到,如果你设置了【收到消息回复】,那么用户输入的关键字不在你设置【关键字回复】范围内,则会触发你设置的【收到消息回复】,而且只会触发一次。 [图片] 自定义菜单:登录公众号首页-左侧边栏功能-自定义菜单 常见叫法:公众号菜单、下三栏、导航栏,底部最多可出现3个菜单栏,每个导航栏可新建5个子菜单。菜单可设置跳转公众号图文消息(未发布的公众号图文也可以)、图片消息、跳转小程序、音频、视频。保存菜单后24小时内生效,如果想立即生效可以取消关注,然后再关注。 [图片] 话题标签:登录公众号首页-左侧边栏功能-话题标签 大家发布同类型的文章,可以添加到同一个话题内,比如我这篇文章以及后续写的关于公众号的文章就可以加入到【公众号运营】的话题标签内。 话题标签里的每篇文章内容尽量相近,不要东一篇西一篇瞎扯,要不然对你的公域流量以及粉丝都会大大折扣。 话题标签在文章发布前、后都可加入标签,但必须是你的原创。我们可以设置文末连续阅读增加粉丝粘性及阅读效果。 当我们发布的文章加入话题标签后,用户打开文章的开通就会看到我们的话题以及话题内有多少篇文章。 [图片] 原创管理:登录公众号首页-左侧边栏功能-原创管理 这里可以看到我们所有原创文章数据,我们可以设置每篇文章可以被哪些公众号转载,转载是否展示来源、是否可修改。或者我们也可以设置全局账号转载。 [图片] 读者讨论:登录公众号首页-左侧边栏功能-读者讨论 这个功能类似【留言】,我们发布每篇图文消息的时候,可新建一个读者讨论,一篇文章只允许出现一个读者讨论,位置可任意选择。我们发布文章时,读者讨论与留言只能二选一。 [图片] 有粉丝给我们留言,我们可以在后台设置是否精选、回复,增加粉丝粘性。 [图片] 图文发布:登录公众号首页-创作管理-图文素材(或者直接在首页下拉-新的创作) [图片] 1号区域我们可以插入一些图片、视频等 2号区域我们可以给我们的公众号文章进行排版 3号区域为公众号标题 4号区域为公众号图文内容 5号区域为继续新建图文、视频等,最多可建8篇 [图片] 6号区域为图文消息的封面与内容摘要 7号区域为图文消息申请原创,原创必须满300汉字,标点不算 8号区域图文消息是否加入广告(变现渠道之一)、留言、原文链接、话题标签等 9号区域为保存(图文素材)、预览(图文素材)、保存并群发(图文素材),一般我们在发送之前都会进行预览,然后保存并群发 数据分析:登录公众号首页-左侧边栏功能-统计 [图片] 我们常用的三个功能:用户分析、内容分析、菜单分析 用户分析可以看到每日粉丝数据、粉丝属性(性别、语言、年龄、地区、设备等) [图片] 内容分析可帮助我们了解我们文章的数据(阅读次数、分享次数、转发次数等)、数据趋势(阅读用户的来源搜一搜、朋友圈、公众号消息等) [图片] 菜单分析可以帮助我们了解用户点击的次数、频率等,方便我们做调整。 [图片]
2020-11-02 - updateAppMessageShareData 在pc端不能分享?
updateAppMessageShareData在pc端分享没有自定义描述,只有一个链接如下。debug开启后,没有调用updateAppMessageShareData改方法,手机上是正常的 [图片]
2020-06-17 - updateAppMessageShareData无法正常调用分享
在调试模式下,config反馈ok,使用低版本支持的onMenuShareAppMessage和onMenuShareTimeline PC端微信可以正常分享,H5移动端分享无法显示图文 换成官方建议的updateAppMessageShareData和updateTimelineShareData,PC端微信与H5端微信都无法显示图文 在开发者工具上显示updateAppMessageShareData和updateTimelineShareData 配置成功 在安卓微信 7.0.22 版本新旧接口都无法分享出图文 其中,config里有配置需要用到的jsApiList [图片] 复现链接: https://www.gmoon.cn/svr/shenyetaifuguangchang/index.html 复现日志 微信号LZ123050,公众号appid:wx86cbe63393a8eecc 日志15点39分上传的,分享时间:15点06分 复现方法:https://www.gmoon.cn/svr/shenyetaifuguangchang/index.html 此链接 手机端分享无法出现图文,PC端微信可以出现图文
2020-12-31 - 从微信进入企业微信自建应用,config报错提示config:invalid url domain?
[图片] 企业微信里扫一扫功能正常使用,微信里使用提示这个错误
2020-10-26 - 企业微信 jssdk invalid url domain
企业微信内部应用H5,在微信开发者工具中调用js sdk config,报错错误码:40048,invalid url domain 应用管理里面域名配置是已经成功 [图片]
2020-10-28 - h5跳转小程序?
[图片] 报40048问题是不是公招要配置安全域名?
2020-12-22 - [填坑手册]小程序web-view组件实战与踩坑
[图片] 首先,根据官网文档可以知道 只有非个人 的小程序才可以使用web-view组件,如果你的个人开发者,可以跳过这篇文章。 [图片] 一、使用web-view以及它的好处 1、己方账号(第三方)与小程序openId/UnionId的关联绑定,实现免登陆 比如你是某门户网站S,你要识别自己小程序上的用户与网站用户的关系,你可以通过三种方法绑定关系,公众号,小程序源生,小程序web-view内嵌跳转三种方法 2、内嵌H5的富文本,减少重复开发 比如你是门户网站,社区,以往有大量的新闻和帖子,里面带了各种css样式的富文本,小程序源生是无法直接读取的,需要大量转化,这时候直接内嵌这些H5新闻,大大降低开发成本 3、热更新,减少发布审核 某些需要经常更新的内容、公告、活动页,内嵌H5可以减少频繁提交小程序审核 二、小程序功能赋权 为H5提供各种小程序才有的功能,比如录音,扫一扫等。 注意事项 多场景判断,建议使用官方API: wx.miniProgram.getEnv H5唤醒一些小程序API有一定的延时,0.3~1秒 请调用小程序专用的JSSDK,同一个jssdk,但是webview的功能收到限制,和之前微信打开H5有所不同 小程序自动获取加载H5的title H5中iframe的url必须也是业务域名 web-view一定是撑满全屏的,自定义顶部菜单,悬浮的都没用 三、小程序和H5之前的互相通讯 1、 从小程序 ==>> h5 小程序控制H5,可以直接用src路径传参的形式,比如 [代码]<!-- 小程序端 HTML --> <web-view src="//URL?a=param1&b=param2"></web-view> [代码] 避免在链接中带有中文字符,在 iOS 中会有打开白屏的问题,建议加一下 encodeURIComponent。 2、 从 H5 ==>> 小程序 [图片] 这里我们知道bindmessage是小程序用来监听H5的推送的内容,但是这里不大不小的坑!就是它的三个出发场景: 小程序后退:使用接口名 wx.miniProgram.navigateTo,wx.miniProgram.navigateBack,wx.miniProgram.switchTab 等切换小程序页面/场景的API时候都会出发 分享:这个就是当你点分享小程序的时候,会接受到H5之前发送的postMessage 组件销毁,web-view组件销毁,类似 wx.miniProgram.redirectTo 都会触发。 [代码]<!-- 小程序端 HTML --> <web-view bindmessage="handleGetMessage" src="{{openUrl}}"></web-view> [代码] [代码]// 小程序端 JS --> Page({ /** * 页面的初始数据 */ data: { openUrl: "", }, /** * 获取请求数据 */ handleGetMessage: function (e) { console.log(e.detail.data); } }, }) [代码] [代码]<!-- h5端 HTML和JS --> <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script> <script> wx.miniProgram.postMessage({ data: { link: "//test.com", title: "一起学习,一起进步" } }); //wx.miniProgram.redirectTo({ // url:"/pages/inner/index?source=123" //}) wx.miniProgram.navigateBack({delta: 1}) </script> [代码] 注意事项 那些H5控制小程序的跳转路径必须是“/”开头,如 “/pages/xxx/xxx”,且路径必须在app.json里有,地址错误的话,有时不报错。 postMessage的json必须是data开始,不然接收不到数据。 [图片] 四、bindmessage接收到消息有3个重要特性(重点) 接收可以是H5之前几分钟前发送postMessage,不一定是即刻发出的。 之前发出的 postMessage的DATA信息会累加,当触发bindmessage接收的时候是一个数组。 [图片] 当bindmessage 再次 接收到数据,之前发送的数据不会被清空,将累加一起返回,获取时要判断好数组的角标 [图片] 五、Tips 1、在IDE工具中如何调试H5 [图片] 可以在 web-view 组件上通过右键 - 调试,打开 web-view 组件的调试。 2、内嵌H5缓存问题 web-view加载的H5具有很重的缓存,如果需要调试,可以通过在url后面加时间戳的方式解决。 3、小程序关闭,H5背景音乐仍然在播放问题 小程序已经关闭,但是H5自带的背景音乐仍然在手机后台播放的问题。这里可以利用一个属性: visibilitychange:页面可见性状态 简单的说,浏览器标签页被隐藏或显示的时候会触发visibilitychange事件。 [代码]var statusBeforeHide = true; //初始化页面的状态 var music = document.getElementById("xxx"); // 更改音乐播放状态 function setChangeMusic() { if (document[hiddenProperty]) { // 页面隐藏 if (statusBeforeHide) { music.pause(); // 暂停 } } else { // 页面显示 if (statusBeforeHide) { music.play() //如果statusBeforeHide是true, 继续播放 } } } let hiddenProperty = ('hidden' in document) ? 'hidden' : ('webkitHidden' in document) ? 'webkitHidden' : ('mozHidden' in document) ? 'mozHidden' : null; if (hiddenProperty) { let visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange'); let onVisibilityChange = () => { //console.log('visibilityChange'); setChangeMusic(); }; document.addEventListener(visibilityChangeEvent, onVisibilityChange); } else { console.log("不支持这个api"); } [代码] 总结,web-view还是非常实用的组件,且用且珍惜~ 往期回顾: 小程序自定义头部导航栏“完美”解决方案 小程序Canvas生成海报(一) 小程序新版订阅消息+云开发实战与跳坑
2021-09-13