网站首页 > 技术文章 正文
微信小程序出了个 URL Link 和 URL Scheme(Android系统不支持直接识别 URL Scheme,用户无法通过 Scheme 正常打开小程序,开发者需要使用 H5 页面中转,再跳转到 Scheme 实现打开小程序),可以用于短信、邮件、网页、微信内等拉起小程序的业务场景。
生成的 URL Link 如下所示:https://wxaurl.cn/TICKET 或 https://wxmpurl.cn/TICKET,生成的 URL Scheme 如下所示:weixin://dl/business/?t= TICKET
但是后来可能发现好多人拿来滥用,然后就又出规则了:自 2022 年 4 月 11 日起,URL Link 和 URL Scheme有效期最长 30 天,不再支持永久有效的URL Link 和 URL Scheme,每个独立的URL Link 和 URL Scheme被用户访问后,仅此用户可以再次访问并打开对应小程序,其他用户无法再次通过相同URL Scheme打开该小程序。
这下要用那个跳转链接只能在触发短信的时候实时去不断生成唯一的链接才可以,不像以前生成一个固定的链接所有的用户都可以使用了,不过小程序的文档上也有说,短信打开小程序有3钟方式:① 通过URL Scheme实现 ② 通过URL Link实现 ③ 通过云开发静态网站实现。
最终经过评估,不依赖后端利用云开发一个静态中转页比较合适。运维在申请短信模板的时候,网址前后忘加空格了,然后导致网址路径后面带了一串中文参数,像下图的这样:
网址点进去中转页到是可以正常打开,但是点击“打开小程序”按钮无任何反映,最终在文档上找到了答案,原来是接口里的 query 参数有限制:最大1024个字符,只支持数字,大小写英文以及部分特殊字符:!#'()*+,/:;=?@-._~%
// 获取小程序路径和参数
function getWxroute() {
// 小程序路径与参数映射
const pathMaps = {
home: '/pages/index/home',
im: '/pages/chat/list'
}
const query = getQuery()
// 微信生成URL Link和URL Scheme的query部分:最大1024个字符,只支持数字,大小写英文以及部分特殊字符:!#'()*+,/:;=?@-._~%
// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.generate.html
let channelId = query.c || '' // 渠道ID
channelId = channelId.replace(/[^A-Za-z0-9\!#\'\(\)\*\+\,\/\:;\=\?@\-\._\~%]/g, '')
return {
path: pathMaps[query.p || 'home'],
query: `channelId=${channelId}`,
}
}
// 获取路径中的参数
function getQuery(url = location.href) {
const search = decodeURIComponent(url).split('?')[1] || ''
const query = {}
if (search) {
const searchArr = search.split('&')
let arr
for (let item of searchArr) {
if (!item) continue
arr = item.split('=')
query[arr[0]] = arr[1]
}
}
return query
}
?
通过调试也确实发现参数里把路径中的中文也带进去了,接口返回的错误码也是文档上写的 40212(参数 query 填写错误),最终在获取参数那通过正则去除所有不支持的字符解决了。
得到的教训:
1、匹配网址或者短信中的链接要注意前后内容的处理
2、URL Link 和 URL Scheme的query部分不支持中文参数
- 上一篇: 网络基础原理知识(网络基本原理有哪些)
- 下一篇: 分享一个实用脚本——URL检测,值得收藏
猜你喜欢
- 2024-10-08 专家 SEO 指南:URL 参数处理(url的)
- 2024-10-08 HTML/CSS 备忘录 - 05. HTML 表单
- 2024-10-08 github最火,近5千star的前端必备知识点汇总(一),前端开发必备
- 2024-10-08 前端基础:从输入URL到看到页面发生了什么?详细描述整个过程
- 2024-10-08 Nginx安全之错误配置及实例分析(nginx -t 报错)
- 2024-10-08 微信小程序:如何实现页面之间的传递数据和变量?
- 2024-10-08 前端面试官:雅虎军规你知道多少?我:一脸懵逼
- 2024-10-08 分享一个实用脚本——URL检测,值得收藏
- 2024-10-08 网络基础原理知识(网络基本原理有哪些)
- 2024-10-08 一文看懂:网址,URL,域名,IP地址,DNS,域名解析
- 1509℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 530℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 494℃MySQL service启动脚本浅析(r12笔记第59天)
- 473℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 470℃启用MySQL查询缓存(mysql8.0查询缓存)
- 451℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 430℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 427℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)