- 微信公众号推送跳转至小程序指定页面
按照微信公众号模板消息API设置完 小程序APPID以及path参数之后 点击收到的推送,能打开配置的小程序,但是打开的是小程序的首页 请问公众号模板消息推送时,其小程序的path参数如何赋值 我们目前是如下方式编码,但无效 [代码] "miniprogram":{ "appid":"wxb6c4a1776384c210", "path":"pages/Discuss/DiscussInfo/DiscussInfo?DicGroupId=39" }, [代码][代码] [代码]
2018-04-03 - wx-open-subscribe无数的坑?
坑一:必须要认证服务号,其他都不行 这个需要自己仔细看文档 它藏在这里 [图片] 坑二:需要配置openTagList,否则不显示 这个也是需要自己仔细看文档 它藏在这里 [图片] 坑三:不管什么错,直接不显示,也没有任何错误提示 例如上面的2个坑,都快哭了,文档写得糟糕没关系,毕竟都是程序员 不知道 一般人不会一个一个字去读重点的信息应该重点提示,否则排版真的就毫无意义了 最坑爹的是,在网页上直接就是什么都不显示,然后让开发者自己去猜哪里出了问题 哭惨了 坑四:开发者工具居然显示的是测试信息 泪流满面啊,兄弟 终于搞得了上面的坑,结果开发者工具显示的内容居然是测试信息而不是我们自己设置的信息 什么玩意啊... 哭死了 [图片] 要测试模板id还得真机测试,真机啊,天呐,你知道有多麻烦吗 因为不能本地测试,必须线上啊 坑五:开发者工具无论这么操作,都是返回所有订阅成功 ಥ_ಥ 那我这么测试用户如果点了取消或者只同意部分的情况啊 坑六:subscribeDetails居然是个string 没事,习惯了,我们自己手动转一下 坑七:线上开发者工具有显示,真机没有显示 原因是坑八 坑八:ios15真机无法显示 真的气死人,不过这个也不怪微信开发者团队,新的不兼容没关系,旧的不要再出问题就已经万事大吉了 坑九:点击了【总是】+【取消】,就永远say goodby了 如果用户点击了【总是】 + 【取消】以后,这个订阅弹窗永远不会出现,而且开发也无法进行判断,这部分用户就永远卡死了 然后小程序里,我们还可以让用户去设置里重新开启 公众号根本没有入口啊,也清除不掉啊 直接死翘翘 你跟老板说这是微信的问题,老板说我不管是谁的问题你都给我解决 哭死啊 这个真的是大大大大问题 相关问题 https://developers.weixin.qq.com/community/develop/doc/000ec86c3d8448fa8a0c9df585b400 https://developers.weixin.qq.com/community/develop/doc/0004ec497e4d90014c2c00be556c00 坑十:没有事件冒泡或其他可判断事件 当然,要问肯定是问了安全,但是问题是并没有给出其他解决方案来 我们想要引导用户操作,结果实现不了,这种代价就是产品、开发、用户体验都巨差无比 额外 其实安卓可以通过监听animationStart实现,但是iOS不支持所以就根据自己情况吧 坑十一:标签内的dom无法设置position 哭了,好多样式都实现不了 坑十二:弹出订阅消息会停止网页渲染 哭了,就是原来背景有张动图,然后弹出订阅消息弹窗后,后面就卡住了...
2021-06-11 - 公众号申请“模板消息”时选了“主营行业、副营行业”,但通过后只有“主营行业”,没有“副营行业”?
公众号申请“模板消息”时选了“主营行业、副营行业”,但通过后只有“主营行业”,没有“副营行业”? 申请成功后,还得手动再修改一次所在行业。原本已经是“一个月只能修改一次”,这样一改就浪费了一次修改机会。
2021-06-03 - 公众平台/小程序服务端API的access_token的内部设计
一、背景 对于使用过公众平台的API功能的开发者来说,access_token绝对不会陌生,它就像一个打开家门的钥匙,只要拿着它,就能使用公众平台绝大部分的API功能。因此,对于开发者而言,access_token的使用方式就变得尤其的重要。在日常API接口的运营中,经常遇到各种的疑问:为什么我的access_token突然非法了?为什么刚刚拿到的access_token,用了10min就过期了?对于这些疑问,我们提供出access_token的设计方案,便于开发者对access_token使用方式上的理解。 对于access_token的获取,可以参考公众平台的官方文档:auth.getAccessToken、获取Access token 二、access_token的内部设计 2.1 access_token的时效性 众所周知,access_token是通过appid和appsecret来生成的。内部设计的步骤如下: (1)开发者通过https请求方式: GET https://API.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,传入appid及apppsecret的参数 (2)公众平台后台会校验appid和哈希(appsecret)是否与存储匹配,若匹配,结合当前时间戳,生成新的access_token。 (3)生成新的access_token的同时,会对老的access_token的过期时间戳更新为当前时间戳。 (4)返回新的access_token给开发者。 这里以图示的方式说明一下,新旧token交替过程: [图片] 从上图需要注意的几点: (1)公众平台存储层只会存储新老两个access_token,意味着假设开发者重复调用3次接口,则会导致最早的access_token立刻失效。 (2)虽然请求新的access_token后,老的access_token过期时间会更新为当前时间,但也不会立刻失效,原理请参考 【2.2 access_token 的逐渐失效性】 (3)出于信息安全考虑,公众平台并不会明文存储appsecret,仅存储appid以及appsecret的哈希值。因此开发者要妥善保管appsecret。当appsecret疑似泄露时,需要及时登录mp.weixin.qq.com重置appsecret。 2.2 access_token 的逐渐失效性 从【access_token的时效性】了解到,当开发者请求获取新的access_token时,老的access_token过期时间会被更新为当前时间,但此时不会立刻失效,因为公众平台会提供【5分钟的新老access_token交替缓冲时间】,因此也称为access_token 的逐渐失效性。 实现的原理是: 1. 由于老的access_token过期时间戳已被刷新,所以在API接口请求期间,带上的access_token解开后,过期时间戳会加上5分钟,然后和当前设备时间进行比对,若超过当前设备时间,判断为失效。 2. 公众平台的设备会保持时钟同步,但设备之间仍然可能会存在1-2分钟的时间差异,所以【5分钟】并非绝对的时间值。当开发者获取到新的access_token后应该尽快切换到新的access_token。 [图片] 从上图需要注意的几点: (1)由于存在设备时间同步的差异,可能会导致开发者遇到拿着老的access_token请求API接口,部分请求成功,部分请求失败的情况,建议开发者获取到新的access_token后尽快使用。 (2)通过理解两个图示,对开发者来说,access_token是相当关键且不能乱调的接口,建议开发者统一管理access_token,以免造成多次请求导致access_token失效。
2021-05-11 - 服务号:在为用户A设置了对话能力的顾问后,为什么该用户在服务号内发起的对话,客服人员也能收到?
操作步骤: 1、设置用户A为顾问1的客户 2、用户A在服务号内发送内容 3、顾问1可以收到该内容,服务号的客服也可以收到该用户待接入的状态;接入后还能看到用户A和顾问1的沟通内容 4、顾问1在顾问小程序中的对话列表中,能看到客服发的消息;但是点击进入沟通页面,却看不到该内容,只可见自己与用户A的沟通内容 疑问: 1、如果两边都能触达,那如何判断谁该对接?客服那边是不知道该用户有专属顾问的。不会浪费运营资源吗? 2、为什么客服能看到顾问与用户的沟通内容?
2021-06-01 - 微信模板调用消息提示40037,提示参数为空,为什么?
{"touser":"owUcE5fYSiLsRk54V3iKSyL3-HNs","template_id":"Lr954ulgNS5PuEWkjBATSiAevkrwF2BGUA4WlYKa0ig","data":{"time10":"{value=15:05}","thing6":"{value=b}","thing3":"{value=a}"},"page":"pages/index/index","miniprogram_state":"developer"} 16:05:46.999 [main] INFO com.ruoyi.common.utils.http.HttpUtils - sendPost - https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=45_gVgyfxVDBNj8xvKV7We8zCx9e9Xk4e_oaxCSsA4kv9ul0cvg2BagIwkW7eyMuJ_-PqS43NAr85l0x5e33l5vgsofDWEGrGP-IQNOv7iwawAEV0q41S0VuuXSaTUDL23ckRyyMl07l7siLpEkHBLgAEAPJT 16:05:47.644 [main] INFO com.ruoyi.common.utils.http.HttpUtils - recv - {"errcode":47003,"errmsg":"argument invalid! data.thing3.value is emtpy rid: 60b5ea5b-1eaf9a45-6bcfedd8"}[图片]
2021-06-01 - 公众号、小程序回调出口IP变更通知
各位微信开发者: 为了提高公众号、小程序回调出口网络质量,微信callback IP地址新增四个上海出口网段81.69.103.0/24、81.69.101.0/24、175.24.211.0/24、101.226.103.0/24,变更后出口网段详情如下: 上海出口地址所属网段:42.192.0.0/24、42.192.6.0/24、42.192.7.0/24、81.69.18.0/24、81.69.19.0/24、81.69.229.0/24、81.69.103.0/24、81.69.101.0/24、175.24.211.0/24、101.226.103.0/24深圳出口地址所属网段:118.126.124.0/24广州出口地址所属网段:119.29.180.0/24、119.29.9.0/24、81.71.140.0/24、81.71.19.0/24香港出口地址所属网段:162.62.80.0/24、162.62.81.0/24此次变更已生效,完整的IP/网段信息可以参考文档《获取微信服务器IP地址》 通过API接口获取。 特别提醒:如果开发者对回调服务设置了防火墙,请及时将回调IP/网段添加到防火墙白名单中,以免造成回调访问失败的情况。 微信团队 2021年4月12日
2021-04-12 - 未开启自定义菜单: 由于开发者通过接口修改了菜单配置,当前菜单配置已失效并停用。我该如何操作?
在设置自定义菜单时出现“未开启自定义菜单:由于开发者通过接口修改了菜单配置,当前菜单配置已失效并停用。你可以前往开发者中心进行停用。”,出现这个问题要如何操作?
2020-08-15 - 微信公众号进行服务器配置的时候,token验证失败。这个要怎么解决?
使用postman进行get请求能正常的返回echostr参数内容。但是配置服务器时就不行,一直提示 token验证失败 [图片]
2021-01-05 - 业务域名设置--校验文件检查失败自查指引
目前不少开发者在设置业务域名时,发现检查校验文件失败,可先按照如下步骤进行自查: 如果想保存的业务为https://test.com/,下载下来的校验文件为AbC.txt,则需要确保https://test.com/AbC.txt能够访问。 校验文件内容错误。校验文件内容一般是非HTML数据,如果下载下来的校验文件内容为HTML数据,一般为登录态过期。请重新登录小程序下载校验文件。 使用4G网络尝试访问链接,确认自身服务器没有拦截请求(常见于设置了白名单或者防火墙的服务器,需开发者自行确认下) https证书过期。请确保https证书处于有效期内。 使用curl 测试链接,确保curl能够正常访问链接,且curl出来的内容为校验文件内容。 使用time curl https://test.com/abc.txt查看链接时间,建议耗时在1s之内。 请确保url中的文件名与下载下来的文件名大小写一致。如下载的文件是AbC.txt,确保url是https://test.com/AbC.txt,不能是https://test.com/abc.txt 部分用户的服务器配置较陈旧,安全性差(如配置 768位 的 DH),为了保证通信安全,微信后台不支持,请更新服务器配置。 (1)通过https://cloud.tencent.com/product/tools#userDefined12,检测网址是否支持TLS1.2。 (2)可通过工具 https://www.ssllabs.com/ssltest/analyze.html 检查自己的服务器,对该工具标红的各项漏洞逐项修补,建议更新配置直到该工具打分为 C及以上 。 9. 如上述检查都没有问题,请重新下载校验文件重试,确保上传到服务器的文件内容与新下载的文件内容一致。
2018-06-21 - 微信登录能力介绍
为了便于用户便捷使用App、网站、移动端网页、小程序的服务,微信提供不同的技术方案,便于开发者在不同终端平台的服务中接入微信登录。 通过这个教程,开发者可以了解平台提供的针对各终端平台的微信登录能力,并可以根据实际使用场景合理选择接入方式。 以下为几类型微信登录的功能说明: 类型授权域/接口 用户侧使用流程 接入流程 App 接入微信SDK,并调用snsapi_userinfo (1)在App内选择使用微信登录 (2)拉起微信客户端,打开用户授权页,完成登录授权(1)注册微信开放平台(open.weixin.qq.com)帐号,并完成开发者资质认证 (2)申请【App移动应用】并审核通过后可以使用,查看开发文档网站应用 snsapi_login (1)用户使用微信“扫一扫”,在PC端扫码 (2)客户端打开授权页,完成登录授权 (1)注册微信开放平台(open.weixin.qq.com)帐号,并完成开发者资质认证 (2)申请【网站应用】并审核通过后可以使用,查看开发文档 微信客户端内H5使用公众号的登录能力: snsapi_base snsapi_userinfosnsapi_base:静默授权 snsapi_userinfo: (1)用户在H5内点击登录,唤起授权弹窗 (2)用户侧完成登录授权(1)注册微信公众号,选择“服务号”类型,并完成微信认证 (2)在公众号管理后台设置回调域名 (3)接入微信登录能力,查看开发文档 小程序wx.login wx.getUserInfowx.login:静默授权,开发者可获取openid wx.getUserInfo: (1)用户在小程序内点击组件,唤起登录窗口(2)用户侧完成登录授权 (1)注册小程序 (2)接入微信登录功能,查看开发文档,查看登录流程设计指引 开发者在不同使用场景下接入微信登录,应该注册符合要求的帐号并使用对应的登录能力。 【常见问题】 Q1: 在调用微信登录时,出现了“此帐号并没有这些scope的权限,错误码:10005”,是什么原因? A:对于场景与帐号属性、能力项不对应时(如在移动端网页中使用网站应用的AppID调用登录能力),将会出现以下的错误提示:此帐号并没有这些scope的权限,错误码:10005 [图片] Q2:我的服务同时有App、官网、公众号、小程序,那我怎么打通用户数据? A:对于多平台的服务,若开发者希望能识别用户身份,例如:希望用户在小程序内也能查看到在App内购买的商品订单,则可以通过平台提供的UnionID机制来实现用户身份识别。
2019-03-06 - 公众号跳转小程序出现 40165 问题,正确的解决方式
今天公司需要在公众号里面发送的消息跳转小程序页面 ,然后我发送的参数是这个样子[图片] 然后返回的数据是这个 [图片] 出现40165 后面找了一大堆没有找到问题的解决方法,在CSDN上面看到了一篇文章,然后替换了一下URL地址 http://mp.weixin.qq.com [图片] 发送成功 [图片] 附上这位博主的地址 https://blog.csdn.net/qq_37253891/article/details/86491227
2020-09-18 - H5页面分享不显示自定义标题和图片?
原因是H5用旧的方式申请JSAPI分享权限,后台返回无权限,因此分享的时候不能自定义,建议开发者接入新的分享方式:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html ,使用新的wx.updateAppMessageShareData和wx.updateTimelineShareData接口来设置分享数据。
2020-04-23 - api.weixin.qq.com接入IP变更通知
各位开发者: 由于内部网络设备裁撤,api.weixin.qq.com(sz.api.weixin.qq.com)需要更新部分接入点IP,详细如下: 上海电信VIP变更:101.227.162.120;101.226.212.27 -> 180.97.7.108;101.226.212.27 上海联通VIP变更:140.207.119.12;58.246.220.31 -> 116.128.163.147;58.246.220.31 上海CAP VIP变更:182.254.92.124;182.254.88.157 -> 121.51.90.217;182.254.88.157 深圳联通变更为:163.177.83.164;58.251.80.204 -> 58.251.82.216;58.251.80.204 此次变更不影响直接使用DNS解析微信域名的业务,如有业务仍在尝试旧的接入IP(通过代码写死或防火墙配置),请及时更新至新的接入IP,裁撤截止日期2020年10月15日,届时旧IP会停止服务,返回指引文档信息。 请不要通过配置hosts的方式访问api.weixin.qq.com,以免微信侧后续更新出口IP时出现接口访问失败。 特殊情况如配置防火墙等,请改造成通过接口获取api.weixin.qq.com当前所有出口IP(同一时间不会所有IP都变更,请尝试可用IP),并更新至hosts或防火墙等。 获取api.weixin.qq.com当前所有接入IP请参考官方文档。 微信团队 2020.09.24
2020-09-24 - 有没有查询所有未绑定顾问粉丝的接口?
有没有查询所有未绑定顾问粉丝的接口?使用场景,对于新开通客户,我们可以帮他们进行批量分配顾问
2020-07-19 - 获取指定群发任务信息接口,finish_time始终为0?
获取指定群发任务信息接口,shopping-guide.getGuideMassendJob返回的参数finish_time,代表的是完成时间,但是始终返回0,我测试的时候,下发了任务,仅指定了一个顾问,并在顾问手机上接受了任务,客户手机页收到了消息,但是调用接口查询的时候依旧为0。请解答下,谢谢 测试返回数据如下: [图片]
2020-08-08 - 公众号区没人知道,只能在这里也发帖问一下 请问获取公众号已创建标签的接口每天的调用次数限制是多少?
原帖地址:https://developers.weixin.qq.com/community/develop/doc/000660512b0cf0d1c99abc4c251800 就是这个接口,我在公众号后台 - 接口权限中没有找到这个接口,在文档中也没找到该接口的调用次数限制,但是我有一个公众号调用时确实提示到当天限制了 [图片]
2020-07-08 - 公众号关闭了服务器配置,为什么服务器还能收到消息并回复?
appid:wxbe47cbe3a451b608 原始ID:gh_d1de13db4051 [图片]
2020-07-16 - wx.requestSubscribeMessage消息订阅后推送?
wx.requestSubscribeMessage业务场景:当用户允许订阅推送一次,订阅消息有两个模板,一个故障通知,一个完成通知,但是本次订单中只推送了其中的一个完成通知,另一个故障是不是就会累计下次通知?下个订单开始用户如果还是点击了允许推送,如果有故障的推送,推送是不是就是2条了?
2020-09-02 - 获取用户信息
背景 我们发现大部分小程序都会使用 [代码]wx.getUserInfo[代码] 接口,来获取用户信息。原本设计这个接口时,我们希望开发者在真正需要用户信息的情况下才去调取这个接口,但很多开发者会直接调用这个接口,导致用户在使用小程序的时候产生困扰,归结起来有几点: 开发者在小程序首页直接调用 [代码]wx.getUserInfo[代码] 进行授权,弹框获取用户信息,会使得一部分用户点击“拒绝”按钮。 在开发者没有处理用户拒绝弹框的情况下,用户必须授权头像昵称等信息才能继续使用小程序,会导致某些用户放弃使用该小程序。 用户没有很好的方式重新授权,尽管我们增加了[代码]设置[代码]页面,可以让用户选择重新授权,但很多用户并不知道可以这么操作。 此外,我们发现开发者默认将 [代码]wx.login[代码] 和 [代码]wx.getUserInfo[代码] 绑定使用,这个是由于我们一开始的设计缺陷和实例代码导致的([代码]wx.getUserInfo[代码] 必须通过 [代码]wx.login[代码] 在后台生成 [代码]session_key[代码]后才能调用)。同时,我们收到开发者的反馈,希望用户进入小程序首页便能获取到用户的 [代码]unionId[代码],以便识别到用户是否以前关注了同主体公众号或使用过同主体的App 。 为了解决以上问题,针对获取用户信息我们更新了三个能力: 1.使用组件来获取用户信息 2.若用户满足一定条件,则可以用[代码]wx.login[代码] 获取到的[代码]code[代码]直接换到[代码]unionId[代码] 3.[代码]wx.getUserInfo[代码] 不需要依赖 [代码]wx.login[代码] 就能调用得到数据 获取用户信息组件介绍 [代码][代码]组件变化: [代码]open-type [代码]属性增加 [代码]getUserInfo[代码] :用户点击时候会触发 [代码]bindgetuserinfo[代码] 事件。 新增事件 [代码]bindgetuserinfo[代码] :当 [代码]open-type[代码]为 [代码]getUserInfo[代码] 时,用户点击会触发。可以从事件返回参数的 [代码]detail[代码] 字段中获取到和 [代码]wx.getUserInfo[代码] 返回参数相同的数据。 示例: [代码]<button open-type="getUserInfo" bindgetuserinfo="userInfoHandler"> Click me button>[代码]和 [代码]wx.getUserInfo[代码] 不同之处在于: 1.API [代码]wx.getUserInfo[代码] 只会弹一次框,用户拒绝授权之后,再次调用将不会弹框; 2.组件 [代码][代码][代码][代码]由于是用户主动触发,不受弹框次数限制,只要用户没有授权,都会再次弹框。 通过获取用户信息的组件,就可以解决用户再次授权的问题。 直接获取unionId开发者申请 [代码]userinfo[代码] 授权主要为了获取 [代码]unionid[代码],我们鼓励开发者在不骚扰用户的情况下合理获得[代码]unionid[代码],而仅在必要时才向用户弹窗申请使用昵称头像。为此,凡使用“获取用户信息组件”获取用户昵称头像的小程序,在满足以下全部条件时,将可以静默获得[代码]unionid[代码]: 1.在微信开放平台下存在同主体的App、公众号、小程序。 2.用户关注了某个相同主体公众号,或曾经在某个相同主体App、公众号上进行过微信登录授权。 这样可让其他同主体的App、公众号、小程序的开发者快速获得已有用户的数据。 不依赖登录的用户信息获取某些工具类的轻量小程序不需要登录行为,但是也想获取用户信息,那么就可以在 [代码]wx.getUserInfo[代码] 的时候加一个参数[代码]withCredentials: false[代码] 直接获取到用户信息,可以少一次网络请求。 这样可以在不给用户弹窗授权的情况下直接展示用户的信息。 最佳实践 1.调用 [代码]wx.login[代码] 获取 [代码]code[代码],然后从微信后端换取到 [代码]session_key[代码],用于解密 [代码]getUserInfo[代码]返回的敏感数据。 2.使用 [代码]wx.getSetting[代码] 获取用户的授权情况 1) 如果用户已经授权,直接调用 API [代码]wx.getUserInfo[代码] 获取用户最新的信息; 2) 用户未授权,在界面中显示一个按钮提示用户登入,当用户点击并授权后就获取到用户的最新信息。 3.获取到用户数据后可以进行展示或者发送给自己的后端。 One More Thing 除了获取用户方案介绍之外,再聊一聊很多初次接触微信小程序的开发者所不容易理解的一些概念: 1.关于OpenId和UnionId [代码]OpenId[代码] 是一个用户对于一个小程序/公众号的标识,开发者可以通过这个标识识别出用户。 [代码]UnionId[代码] 是一个用户对于同主体微信小程序/公众号/APP的标识,开发者需要在微信开放平台下绑定相同账号的主体。开发者可通过[代码]UnionId[代码],实现多个小程序、公众号、甚至APP 之间的数据互通了。 同一个用户的这两个 ID 对于同一个小程序来说是永久不变的,就算用户删了小程序,下次用户进入小程序,开发者依旧可以通过后台的记录标识出来。 2.关于 getUserInfo 和 login 很多开发者会把 [代码]login[代码] 和 [代码]getUserInfo[代码] 捆绑调用当成登录使用,其实 [代码]login[代码] 已经可以完成登录,[代码]getUserInfo[代码] 只是获取额外的用户信息。 在 [代码]login[代码] 获取到 [代码]code[代码] 后,会发送到开发者后端,开发者后端通过接口去微信后端换取到 [代码]openid[代码] 和[代码]sessionKey[代码](现在会将[代码]unionid[代码] 也一并返回)后,把自定义登录态 [代码]3rd_session[代码]返回给前端,就已经完成登录行为了。而 [代码]login[代码] 行为是静默,不必授权的,用户不会察觉。 [代码]getUserInfo[代码] 只是为了提供更优质的服务而存在,比如展示头像昵称,判断性别,开发者可通过 [代码]unionId[代码] 和其他公众号上已有的用户画像结合来提供历史数据。因此开发者不必在用户刚刚进入小程序的时候就强制要求授权。 可以在官方的文档中看到 [代码]login[代码] 的最佳实践: [图片] Q & A Q1: 为什么 login 的时候不直接返回 openid,而是要用这么复杂的方式来经过后台好几层处理之后才能拿到? A: 为了防止坏人在网络链路上做手脚,所以小程序端请求开发者服务器的的请求都需要二次验证才是可信的。因为我们采取了小程序端只给 [代码]code[代码] ,由服务器端拿着 [代码]code[代码] 和 [代码]AppSecrect[代码] 去微信服务器请求的方式,才会给到开发者对应的[代码]openId[代码] 和用于加解密的[代码]session_key。[代码] Q2: 既然用户的[代码]openId[代码] 是永远不变的,那么开发者可以使用[代码]openId[代码] 作为用户的登录态么? A: 不行,这是非常危险的行为。因为 [代码]openId[代码] 是不变的,如果有坏人拿着别人的 [代码]openId[代码] 来进行请求,那么就会出现冒充的情况。所以我们建议开发者可以自己在后台生成一个拥有有效期的 [代码]第三方session[代码] 来做登录态,用户每隔一段时间都需要进行更新以保障数据的安全性。 Q3: 是不是用户每次打开小程序都需要重新[代码]login[代码]? A: 不必,可以将登录态存入[代码]storage[代码]中,用户再次登录就可以拿[代码]storage[代码] 里的登录态做正常的业务请求,只有当登录态过期了之后才需要重新[代码]login[代码] 。这样子做一则可以减少用户等待时间,二则可以减少网络带宽。 目前微信的[代码]session_key[代码] 有效期是三天,所以建议开发者设置的登录态有效期要小于这个值。
2018-09-25 - 微信开放社区正确的提问方式
调侃 某萌新:为什么我在社区提问的问题都没人回答啊 某大佬:社区的问题质量是越来越低了,真不想看社区的问题了 如何提问 今天,在下就来告诉大家如何优雅的提问: 在提问之前,先想好自己遇到的问题是什么,让想要帮助你的人,知道你的问题所在 提问语言简洁明了,详细说明重现步骤及可能存在的问题 附上问题截图,比如调试工具报错信息、提审被驳回信息 写明代码环境,如工具版本、手机版本、基础库版本等 如果调用接口报错,请直接把接口的官方文档地址贴出来,标明调用接口地址,附上请求的参数以及返回的数据 必要时请提供代码截图或代码片段 点击查看如何创建代码片段 最重要的一点:提问时请务必注意礼貌。这一点特别重要,因为这关乎到回答者决定要不要回答以及以怎么样的态度来回答 依然是重要的一点:请务必给认真回答协助解决问题的回答者一个“赞”,这会更加激起他们回答的积极性 千万不要投机,把问题提到“文章”版块,这样会被直接隐藏。不仅不会加快被解答的速度,还会耽误解答机会 示例 (仅为示例,不代表该问题实际存在) 标题:picker组件多级联动会出现选项为 null 的情况? 内容: 使用picker组件,设定为多级联动,仅滚动一级栏后确定,后面的栏目获取到的值为 null,能麻烦帮忙看下吗?最新版开发者工具,基础库版本 2.9.2 代码片段:xxxxxxxxxxxxxxxx 继续调侃 某萌新:诶?真的诶,这样提问,好多问题都被解决了 某大佬:这问题问得是真的好,多来点这样的问题,回答也舒坦
2020-01-03 - 为什么群发成功后粉丝却收不到消息?
在微信公众平台消息群发成功后,而粉丝未收到群发消息,可能是以下原因导致: 1、通过微信公众平台群发消息时,若默认群发给了全部用户,则可以正常接收消息;若对群发对象、性别、群发地区进行了选择,而该粉丝不在所选择的范围内,则无法接收群发消息。(群发消息查看方法:登录微信公众平台->功能->群发功能->已发送) 2、被加入黑名单的粉丝,不会接收到群发信息,建议进入微信公众平台->用户管理->黑名单,查看是否有进行设置。 3、如果该粉丝在您群发消息时,取消了关注,同样不会收到群发消息。 4、若帐号属于服务号,每个粉丝一个月只能收到4条消息,若使用高级群发接口发送了,已经接收超过4条的粉丝无法收到消息。 温馨提示:如果您自己本身没有使用API(开发者接口)群发消息接口进行群发,请联系第三方平台的网站后台或者您帐号的开发者核实确认。
2020-03-18 - 教你怎么监听小程序的返回键
更新:2020年7月28日08:51:11 基础库2.12.0起,可以调用wx.enableAlertBeforeUnload监听原生右上角返回、物理返回以及wx.navigateBack时弹框提示 AIP详情请看: https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.enableAlertBeforeUnload.html //======================================== 怎么监听小程序的返回键? 应该有很多人想要监听用户的这个动作吧,但是很遗憾,小程序不会给你这个API的,那是不是就没辙了? 幸好我们还可以自定义导航栏,这样一来我们就可以监听用户的这一动作了。 什么?这你已经知道啦? 那好咱们就不说自定义导航栏的返回监听了,说一下物理返回和左滑?右滑?(不管了,反正是滑)返回上一页怎么监听。 监听物理返回 首先说一下这个监听方法的缺点,虽说是监听,但是还是无法真正意义上的监听并拦截来阻止页面跳转,页面还是会返回上一页,而后重新载入刚刚的页面,如果这不是你想要的,那可以不用往下看了 其次说一下用到什么东西: wx.onAppRoute、wx.showModal 最后是一些主要代码: 重写wx.showModal,主要是加个confirmStay参数和使wx.showModal Promise化 [代码]const { showModal } = wx; Object.defineProperty(wx, 'showModal', { configurable: false, // 是否可以配置 enumerable: false, // 是否可迭代 writable: false, // 是否可重写 value(...param) { return new Promise(function (rs, rj) { let { success, fail, complete, confirmStay } = param[0] param[0].success = (res) => { res.navBack = (res.confirm && !confirmStay) || (res.cancel && confirmStay) wx.setStorageSync('showBackModal', !res.navBack) success && success(res) rs(res) } param[0].fail = (res) => { fail && fail(res) rj(res) } param[0].complete = (res) => { complete && complete(res) (res.confirm || res.cancel) ? rs(res) : rj(res) } return showModal.apply(this, param); // 原样移交函数参数和this }.bind(this)) } }); [代码] 使用wx.onAppRoute实现返回原来的页面 [代码]wx.onAppRoute(function (res) { var a = getApp(), ps = getCurrentPages(), t = ps[ps.length - 1], b = a && a.globalData && a.globalData.pageBeforeBacks || {}, c = a && a.globalData && a.globalData.lastPage || {} if (res.openType == 'navigateBack') { var showBackModal = wx.getStorageSync('showBackModal') if (c.route && showBackModal && typeof b[c.route] == 'function') { wx.navigateTo({ url: '/' + c.route + '?useCache=1', }) b[c.route]().then(res => { if (res.navBack){ a.globalData.pageBeforeBacks = {} wx.navigateBack({ delta: 1 }) } }) } } else if (res.openType == 'navigateTo' || res.openType == 'redirectTo') { if (!a.hasOwnProperty('globalData')) a.globalData = {} if (!a.globalData.hasOwnProperty('lastPage')) a.globalData.lastPage = {} if (!a.globalData.hasOwnProperty('pageBeforeBacks')) a.globalData.pageBeforeBacks = {} if (ps.length >= 2 && t.onBeforeBack && typeof t.onBeforeBack == 'function') { let { onUnload } = t wx.setStorageSync('showBackModal', !0) t.onUnload = function () { a.globalData.lastPage = { route: t.route, data: t.data } onUnload() } } t.onBeforeBack && typeof t.onBeforeBack == 'function' && (a.globalData.pageBeforeBacks[t.route] = t.onBeforeBack) } }) [代码] 改造Page [代码]const myPage = Page Page = function(e){ let { onLoad, onShow, onUnload } = e e.onLoad = (() => { return function (res) { this.app = getApp() this.app.globalData = this.app.globalData || {} let reinit = () => { if (this.app.globalData.lastPage && this.app.globalData.lastPage.route == this.route) { this.app.globalData.lastPage.data && this.setData(this.app.globalData.lastPage.data) Object.assign(this, this.app.globalData.lastPage.syncProps || {}) } } this.useCache = res.useCache res.useCache ? reinit() : (onLoad && onLoad.call(this, res)) } })() e.onShow = (() => { return function (res) { !this.useCache && onShow && onShow.call(this, res) } })() e.onUnload = (() => { return function (res) { this.app.globalData = Object.assign(this.app.globalData || {}, { lastPage: this }) onUnload && onUnload.call(this, res) } })() return myPage.call(this, e) } [代码] 在需要监听的页面加个onBeforeBack方法,方法返回Promise化的wx.showModal [代码]onBeforeBack: function () { return wx.showModal({ title: '提示', content: '信息尚未保存,确定要返回吗?', confirmStay: !1 //结合content意思,点击确定按钮,是否留在原来页面,confirmStay默认false }) } [代码] 运行测试,Oj8K 是不是很简单,马上去试试水吧,效果图就不放了,静态图也看不出效果,动态图懒得弄,想看效果的自己运行代码片段吧 代码片段 https://developers.weixin.qq.com/s/hc2tyrmw79hg
2020-07-28 - 为什么群发后粉丝收不到消息?
在微信公众平台消息群发成功后,而粉丝未收到群发消息,可能是以下原因导致: 1、通过微信公众平台群发消息时,若默认群发给了全部用户,则可以正常接收消息;若对群发对象、性别、群发地区进行了选择,而该粉丝不在所选择的范围内,则无法接收群发消息。 2、被加入黑名单的粉丝,不会接收到群发信息,建议进入微信公众平台->用户管理->黑名单,查看是否有进行设置。 3、如果该粉丝在您群发消息时,取消了关注,同样不会收到群发消息。 4、若帐号属于服务号,每个粉丝一个月只能收到4条消息,若使用高级群发接口发送了,已经接收超过4条的粉丝无法收到消息。 温馨提示:如果您自己本身没有使用API(开发者接口)群发消息接口进行群发,请联系第三方平台的网站后台或者您帐号的开发者核实确认。
2020-06-05 - 微信公众号发送客服信息a标签显示失败,如何解决?
微信公众号发送客服信息时(带a标签),PC端和ios显示正常,,安卓端a标签会直接显示html代码,例如:<a href=“...”>点击跳转</a>。
2020-05-15