- 小程序在web-view中跳转小程序,提示“当前小程序无法打开***小程序”
每个小程序可跳转的其他小程序数量限制为不超过10个,在web-view中打开的小程序也包含在这个限制中。 从 基础库2.4.0 版本以及指定日期(参考公告)开始,开发者提交新版小程序代码时,如使用了跳转其他小程序功能,则需要在代码配置中声明将要跳转的小程序名单,限定不超过 10 个,否则将无法通过审核。该名单可在发布新版时更新,不支持动态修改。配置方法详见 小程序全局配置。
2019-11-11 - URL Scheme 和 URL Link 优化公告
为了帮助开发者更好地为用户提供服务,降低开发者使用 URL Scheme 和 URL Link 的成本,自 2023 年 12 月 19 日起,微信团队将对 URL Scheme 和 URL Link 进行如下优化: 1、新增明文 URL Scheme,开发者无需调用接口可自行拼接并且生成明文 Scheme; 2、取消 URL Scheme 和 URL Link 打开端一人一链的限制,支持同一条链接被多名用户访问; 3、新增打开端限制:每个小程序每天 URL Scheme 和 URL Link 总打开次数上限为 300 万次。 一、新增明文 URL Scheme开发者无需调用平台接口,可自行根据如下格式拼接 appid 和 path 等参数,作为 URL Scheme 链接。 weixin://dl/business/?appid=*APPID*&path=*PATH*&query=*QUERY*&env_version=*ENV_VERSION* 其中各参数含义如下: [图片] 注意: 1、为保护开发者,通过明文 URL Scheme 拉起的小程序(页面)必须要提前在「小程序管理后台 -> 设置 -> 隐私与安全 -> 明文 scheme 拉起此小程序」中进行声明; 小程序:配置能够通过明文 scheme 进入的小程序页面[图片] 小游戏:打开开关即可通过明文 scheme 拉起小游戏[图片] 2、通过明文 URL Scheme 打开小程序的场景值为 1286; 3、明文 URL Scheme 不受每天 50 万次的生成量限制; 4、明文 URL Scheme 没有有效期的概念,可长期有效; 5、明文 URL Scheme 没有一人一链的打开限制,支持一条链接同时被多名用户访问。 二、原 URL Scheme 升级为加密 URL Scheme,并支持自行拼接参数目前已对外提供的 URL Scheme 能力平滑升级为加密 URL Scheme,取消一人一链的限制,支持开发者自行在链接后拼接参数*CUSTOM PARAMETER*。 注意:之前通过平台接口生成的 URL Scheme 可继续使用,链接自动可支持多人打开。 URL Scheme格式 weixin://dl/business/?t=*TICKET*&cq=*CUSTOM PARAMETER* 其中参数含义如下: [图片] 注意:加密 URL Scheme 打开小程序的场景值保持不变,仍为 1065。 三、原 URL Link 升级为加密 URL Link,并支持自行拼接参数目前已对外提供的 URL Link 能力平滑升级为加密 URL Link,取消一人一链的限制,支持开发者自行在链接后拼接参数*CUSTOM PARAMETER*。 注意:之前通过平台接口生成的 URL Link 可继续使用,链接自动可支持多人打开。 URL Link格式: https://wxaurl.cn/*TICKET*?cq=*CUSTOM PARAMETER* 其中参数含义如下: [图片] 注意:加密 URL Link 打开小程序的场景值保持不变,微信外打开的场景值为 1194;微信内打开会调整为开放标签打开小程序,场景值为 1167。 四、调用规则调整1、加密 URL Scheme 和 URL Link 取消一人一链,支持一条链接同时被多名用户访问,生效后之前生成的链接被多名用户访问时,不会再报错; 2、每个小程序每天能够生成加密 URL Scheme 和 URL Link 共计 50 万条的限制不变,额外增加每个小程序每天在微信外,能够通过链接打开小程序共计 300 万次的打开量限制,其中链接包括加密 URL Scheme、加密 URL Link 和明文 URL Scheme ;若链接打开小程序的次数超过 300 万次/天,则无法通过链接在微信外拉起小程序; 3、URL Scheme (加密和明文)和 URL Link (加密)仅支持非个人主体小程序使用; 4、注意事项:平台有安全策略防止开发者的链接被黑灰产大量打开,可能导致达到访问上限无法正常通过链接打开小程序的问题; 5、查询方式:开发者可复用现有的查询方式对 URL Scheme 和 URL Link 进行打开额度查询和链接状态查询。 [图片]
2023-12-19 - 「小程序下发统一消息接口」收回后,如何适配?
「小程序下发统一消息接口」收回后,如何适配? 前言 目前「小程序下发统一消息接口」已经收回,开发者无法通过该接口下发公众号模板消息,如有消息推送需要,可使用「公众号模板消息」接口,具体可参考公告:小程序与公众号下发统一消息接口调整通知。 来看下两个接口区别 「小程序下发统一消息接口」与「公众号模板消息接口」区别如下: 小程序下发统一消息接口(已收回) 公众号模板消息接口 接口请求地址 POST https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN POST https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN 接口调用凭证 小程序 [代码]access_token[代码] 公众号 [代码]access_token[代码] 接收者 [代码]openid[代码] 小程序 [代码]openid[代码] 或 公众号 [代码]openid[代码] 公众号 [代码]openid[代码] 也就是说,现在需要下发公众号模板消息只能使用「公众号模板消息接口」: 需要使用公众号[代码]access_token[代码]调用该接口。 需要使用公众号[代码]openid[代码]下发公众号模板消息。 那应该如何适配呢? 一、如果你有公众号[代码]openid[代码] 按照「公众号模板消息接口」文档适配,使用公众号的[代码]openid[代码]即可。 注意:更换接口后,请求包json格式也要根据文档进行修改。 二、如果你只有小程序[代码]openid[代码] ,没有公众号[代码]openid[代码] 我想到了以下几种方式,可以获取用户公众号[代码]openid[代码]。 (一)通过[代码]unionid[代码]区分同一用户 小程序与公众号绑定在同一开放平台下: 小程序内可通过「[代码]wx.login[代码]」和「[代码]code2Session[代码]」接口获取到用户的[代码]unionid[代码]和[代码]openid[代码],保存到数据库。 公众号可以调用「获取已关注用户列表接口」拿到所有已关注用户的[代码]openid[代码],可调用「获取用户基本信息接口」查询[代码]unionid[代码],保存到数据库。 对于新关注公众号的用户,关注事件推送里面会有[代码]openid[代码],可调用「获取用户基本信息接口」查询[代码]unionid[代码],保存到数据库。 注:接口有每日调用次数限制。 将用户在公众号与小程序下的[代码]openid[代码]和[代码]unionid[代码]保存到数据库里面,可以参考: (1) 如果在一个表 id unionid offiaccount_openid miniprogram_openid 下发模板消息时候,可通过小程序[代码]openid[代码]查询到公众号[代码]openid[代码]。 (2)如果是分开的表 公众号用户表 id unionid openid 小程序用户表 id unionid openid 下发模板消息的时候,通过[代码]unionid[代码]去查询对应用户公众号[代码]openid[代码]。 (二)网页授权 制作一个网页授权H5页面,可以获取到用户公众号[代码]openid[代码],当[代码]scope[代码]为[代码]snsapi_userinfo[代码]时可以获取到[代码]unionid[代码](公众号绑定到微信开放平台账号才会返回)。 (三)公众号关键词回复 用户在公众号回复关键词,开发者动态下发小程序链接,链接内带有公众号[代码]openid[代码]参数,用户点击跳转到小程序,完成绑定操作。 如果大家有其他方式,欢迎补充~
2023-09-25 - 微信小程序获取openID及unionID
公众号openID和小程序openID说明 为了识别用户,每个用户针对每个公众号或小程序等应用会产生一个安全的OpenID 在小程序中,openID是小程序的普通用户的一个唯一的标识,只针对当前的小程序有效同理在公众号中openID是公众号的普通用户的一个唯一的标识,只针对当前的公众号有效冷知识:公众号包含服务号和订阅号。我们常开发的是服务号 同一个微信用户在小程序和公众号上的openid是不同的 UnionID 机制说明 微信的unionid机制说明: 如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。简而言之,unionid是用来说明多个应用下用户身份一致性的问题。相比较而言,由于在同一个应用下每个用户的openid是唯一的,因此openid也是也可以用来标记用户身份,但是仅限于在同一个应用中。对于不同的应用,每个用户的openid是不一样的,要想在不同应用间识别用户的唯一性只可以用unionid。下面来举一个例子来说明,例如: 小耿开发者账号下有公众号A和小程序B,对于访问公众号A和小程序B的用户小龙有openidA与openidB(openidA!=openidB),openidA在公众号A应用中是唯一的,可以说明小龙的身份;openidB在小程序B中是唯一的,也可以说明小龙的身份。假如,我们现在要确定公众号A的用户小龙与小程序B的用户小龙是否为同一个用户小龙,我们根据openid能确定吗?很显然,不可以。此时用户的unionid就可以解决这个问题,即unionid是用来确定不同应用下用户的唯一性。如何获取? 公众号获取openID 参考文档:(建议放到后端处理)https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html http://note.youdao.com/noteshare?id=c391f6f88ae92c485b95f386309079b2&sub=0A4A104759AE4D5992457DC02E9FC194 小程序获取openID 1、需要在微信小程序调用登录开放接口 wx.login() 获取用户登陆凭证code。 wx.login()接口说明: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html2、向服务器发送请求,并将code一起发送过去。 3、接下来,在服务端调用auth.code2Session接口 接口说明 :https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html4、接口返回openid UnionID获取途径 公众号获取unionID 可以直接通过 openID 获取到该用户 UnionID(建议放到后端处理) https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html#UinonId 小程序获取unionID 微信官方给出的途径: 绑定了开发者帐号的小程序,可以通过以下途径获取 UnionID。 1、如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。(以前是调用接口 wx.getUserInfo,或通过button获取:<button type='primary' open-type="getUserInfo">授权登录</button>,从解密数据中获取 UnionID。2021年4月13日以后就不支持这种方法了。相关文档:https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801)2、如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。3、用户在小程序(暂不支持小游戏)中支付完成后,开发者可以直接通过getPaidUnionId接口获取该用户的 UnionID,无需用户授权。注意:本接口仅在用户支付完成后的5分钟内有效,请开发者妥善处理。4、小程序端调用云函数时,如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号,可在云函数中通过 cloud.getWXContext 获取 UnionID。5、小程序端调用云函数时,如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用,也可在云函数中通过 cloud.getWXContext 获取 UnionID。 在项目中采取下列方法来获取unionid第一种方法举例: 通过wx.login获取用户的code,因为获取openid和unionid需要用code然后就是通过微信的auth.code2Session获取我们最终想要的微信小程序中调用wx.login()获取到code,将code传给后端由后端直接调用接口: https://api.weixin.qq.com/sns/jscode2session?appid=自己的appid&secret=密钥&js_code=${code}&grant_type=authorization_code 获取openid和unionid、session_key onLoad: function (options) { this.wxLogin() }, wxLogin () { wx.login({ success: (res) => { //用户的code let userCode = rest.code console.log('wx.login==>',res) // 该流程放到后端处理=== // https://api.weixin.qq.com 不是合法域名,正式环境无法访问 ============= wx.request({ // 自行补上自己的 APPID 和 SECRET url:`https://api.weixin.qq.com/sns/jscode2session?appid=自己的appid&secret=密钥&js_code=${userCode}&grant_type=authorization_code`, success: res => { // 获取到用户的 openid console.log("用户的openid:" + res.data.openid); console.log("用户的unionid:" + res.data.unionid); console.log("用户的session_key:" + res.session_key); } }); } }) } tips:获取unionid的话是需要微信开放平台绑定小程序的,不然是不可能获取到的 查找 APPID 和 SECRET 微信公众平台->开发->开发管理->开发设置 auth.code2Session 比较简单,大家可以自行查看 link 参考文章: openid: https://developers.weixin.qq.com/community/develop/article/doc/000c80906b4210625f3bde3775bc13 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html unionid: https://www.jianshu.com/p/46efa68d9033 https://www.jianshu.com/p/03810ae56c4f
2021-04-06