首先,打开支付宝,来到需要抓取的小程序页面。此处以上海的随申码为例演示,打开随申办小程序,点击顶部的「随申码」按钮进入页面。

可以看出这个一个二级页面,如果想要使用 URL Scheme 一键访问,同样需要知道这个页面的 path 参数(可理解为某个页面的「身份证」。点击右上角的「更多」图标按钮,再依次点击「分享」>「复制链接」。

剪切板的链接地址如下所示,前往 Safari 粘贴打开剪切板链接,这时候会弹出询问窗口,询问是否在支付宝中打开。

https://ur.alipay.com/7jQeHZlc

点击取消,看到 Safari 的地址栏,可以看出短链接经过解析,变成了含有参数的长链接。复制出这个长链接,如下所示:

https://render.alipay.com/p/s/i/?scheme=alipays%3A%2F%2Fplatformapi%2Fstartapp%3FappId%3D2019072665939857%26page%3Dpages%252Fmy-station-type%252Fmy-station-type%26enbsv%3D0.2.2108270116.35%26chInfo%3Dch_share__chsub_CopyLink
使用 URLDecode.org 进行解码一下,得到如下的原始文本,我们将这一长串的链接分段解析一下。

https://render.alipay.com/p/s/i/?
scheme=alipays://platformapi/startapp?appId=2019072665939857
&page=pages%2Fmy-station-type%2Fmy-station-type
&enbsv=0.2.2108270116.35
&chInfo=ch_share__chsub_CopyLink
分别是 scheme、page、enbsv、chInfo,根据《微信小程序也能一键直达,除了健康码你还想跳转什么?》中微信小程序的格式.
scheme 和 page 拼接之后就能打开指定路径,此处的 page 就等价于微信的 path。所以删除前后无用的参数,只保留 scheme 和 page,就可以构造出如下的链接地址:

alipays://platformapi/startapp?appId=2019072665939857&page=pages%2Fmy-station-type%2Fmy-station-type

有了 URL Scheme 之后,就可以打开快捷指令进行构建了(下简称为「捷径」)。新建捷径,选择「打开 URL」模块,将构造好的 URL Scheme 地址填入,编辑好捷径的名称和图标之后就制作好了。

此处有一个小技巧需要介绍,捷径在只有一个动作的情况下,无法显示自定义的捷径图标。这个时候可以在捷径里随意加一个无意义的变量解决这个问题,例如加入一个「文本」动作。或者也可以将 URL Scheme 放在「URL」模块里,然后使用「打开 URL」打开它,两种解决方法都是可以的。

注意要点
该方法可以作为通用 URL Scheme 查询指南 中「网页书签法」的扩展方法,在之前的文章中只讲到了支付宝打开小程序,因为当时的局限性不知道有 page 参数可用,所以此处补齐这个扩展方法。
对于需要登录授权的小程序,例如通信行程卡,可能需要短信验证码才可以登录。
和微信小程序一样,如果拍照使用的是官方的接口,一样无法获取到页面路径。

云闪付
upwallet://applet?toLink=【小程序 URL】&encryptAppId=【小程序 ID】
接下来趁热打铁,看看如何实现云闪付的小程序地址抓取。打开随申码小程序页面,同样是复制链接,依次点击右上角的「更多」图标 >「分享」>「复制链接」。

但是此时,如果还想使用和支付宝一样的方法,是行不通的了。因为此时已经是一个长链接了,复制到 Safari 打开也没用了。这次直接对链接进行分析,由于这个链接中包含了个人身份信息,我对链接做了一些处理,替换了某些参数值来介绍。所以替换后的链接地址如下所示:

https://base.95516.com/s/wl/WebAPP/helpAgree/page/help/shareRutineHelp.html?params=ewogICJ0b0xpbmsiIDogImh0dHBzOi8vc3Vpc2hlbm1hZnJvbnQxLnNoLmdvdi5jbi9zbXp5L2Z5ei9xcmNvZGU/ZnJvbT15c2YmYWRkcmVzcz0mbG9uZ2l0dWRlPTEyMC4wMCZsYXRpdHVkZT0zLjAwJnR5cGU9RllfUVJDT0RFXzAxJm13PXNzcGFpSmFtZXNIb3Bib3VybiZpc1JlbGF0aW9ucz0wJm13Rm9yUmVsYXRpb25zPXZuS0FreDc3JTIwbTNGNjdPcjdTU0RPc1N3RnFncjBFUWYvb0VWMTJFclVWZWRWRGQvc3NwYWkiLAogICJlbmNyeXB0QXBwSWQiIDogImJhNDMxYmY3MDUwNzMxYTAiCn0=
可以看出,它不同于曾经见到过了支付宝或者微信小程序链接,后面跟着一堆 ABCD 字母,看到最后的等于号,不难猜出这是一段 base64 编码。
将这段 base64 复制,在终端使用 base64 命令进行解码。如果不习惯使用终端,也可以使用在线的 base64decode.org 进行解码,解码后的内容如下所示:
{
"toLink" : "https://suishenmafront1.sh.gov.cn/smzy/fyz/qrcode?from=ysf&address=&longitude=120.00&latitude=3.00&type=FY_QRCODE_01&mw=sspaiJamesHopbourn&isRelations=0&mwForRelations=vnKAkx77%20m3F67Or7SSDOsSwFqgr0EQf/oEV12ErUVedVDd/sspai",
"encryptAppId" : "ba431bf7050731a0"
}
此处有两个参数,toLink 和 encryptAppId,而 encryptAppId 就是所谓的小程序 ID,没有值得研究的地方。接着将此处的 toLink 参数单独拿出解析一下,将它切分一下,看看各个参数值。可以看出此处有 8 个参数,包含了跳转来源、地址、经纬度和 mw 等参数。

https://suishenmafront1.sh.gov.cn/smzy/fyz/qrcode?
from=ysf
&address=
&longitude=120.00
&latitude=3.00
&type=FY_QRCODE_01
&mw=sspaiJamesHopbourn
&isRelations=0
&mwForRelations=vnKAkx77%20m3F67Or7SSDOsSwFqgr0EQf%2FoEV12ErUVedVDd%2Fsspai
经过实验,此处只需要保留一个 mw 即可成功认证。请注意此处的 mw 等效于个人身份标识码,所以请不要将这个链接随意分享。最后删除无用参数,重构链接得到以下结果:

https://suishenmafront1.sh.gov.cn/smzy/fyz/qrcode?mw=sspaiJamesHopbourn
刚才在开头提过了云闪付小程序的基本结构,接下来就是构建 URL Scheme 了,拼接两个参数之后,得到如下的 URL Scheme

upwallet://applet?toLink=https://suishenmafront1.sh.gov.cn/smzy/fyz/qrcode?mw=sspaiJamesHopbourn&encryptAppId=ba431bf7050731a0
同样将它创建为一个捷径。新建捷径,选择「打开 URL」模块,粘贴这个 URL Scheme 地址即可。

云闪付对参数进行了 base64 编码,但是经过解码之后一样可以得到关键信息。其实看过云闪付的桌面书签代码之后,感觉它做的还是比较好的。内部使用了 base64 和字符串拼接之后才能得到 URL Scheme,增大了直接获取 URL Scheme 的难度。

但是其实也是有通杀方法的,不去分析网页代码,无论如何最终书签都是要跳转应用的。所以另一种方法是使用 URL Scheme 查询指南 中「网页报错法」,在电脑上伪装 UA,直接打开链接,一下就能获得到完整的 URL Scheme。云闪付小程序的 URL Scheme 基本格式正是使用这个方法获得。

小结
现在,三个常用应用:支付宝、微信、云闪付的小程序 URL Scheme 结构都介绍过了,至于要如何使用,就看各位读者自行发挥的能力了,花几分钟动手折腾一下还挺有趣的,亦可为日后使用带来不少便捷。下面是三个软件的跳转情况对比图,读者可以选择合适的软件进行跳转。

最后,再来总结一下这三个软件小程序跳转的基本格式
weixin://app/wx5aa333606550dfd5/jumpWxa/?userName=【账号原始 ID】&path=【页面路径】
alipays://platformapi/startapp?appId=【小程序 ID】&page=【页面路径】
upwallet://applet?encryptAppId=【小程序 ID】&toLink=【小程序 URL】

彩蛋
在部分学校里的菜鸟驿站站点,收取快递可能需要出示身份码扫描。在研究菜鸟小程序的身份码的时候,使用上面的「支付宝分享法」解析出了淘宝直达链接,有需要的读者也可以自取,使用 URL Scheme 一件跳转之后,就不需要额外再下载「菜鸟驿站」了,只需要捷径点击一下,即可直接打开身份码,URL Scheme 地址和演示效果如下。

tbopen://m.taobao.com/tbopen/index.html?h5Url=https%3A%2F%2Fmarket.m.taobao.com%2Fapp%2Fcn-yz%2Fmulti-activity%2FauthCode.html

转载安卓或苹果手机获取URL scheme方法的更多相关文章

  1. JavaScript&jQuery获取url参数方法

    JavaScript&jQuery获取url参数方法 function getUrlParam(name){ var reg = new RegExp("(^|&)" ...

  2. HttpServletRequest 获取URL的方法及区别

    HttpServletRequest 获取请求的URL的方法有: 1.request.getRequestURL() 返回的是完整的url,包括Http协议,端口号,servlet名字和映射路径,但它 ...

  3. JavaScript获取URL参数方法总汇

    现在做页面基本都用AJAX,因此导致操作很麻烦,每次都需要通过JS获取url中的参数值,网上所搜到很多资料,没一次能记住的,也不知道在哪个项目中使用过,现在又需要通过JS获取url参数,因此不能在偷懒 ...

  4. jquery 获取url 参数方法 以及 解决url中文问题

    //jQuery 动态给a 标签赋值 跳转 新的页面打开. /* <a class="btn btn-success" id="test" target= ...

  5. js获取url参数方法

    function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...

  6. request获取url的方法总结

    辣么多属性.方法  不用就忘了  ,当需要用的时候挠头也想不到,现在总结一下 以备用 例如:http://localhost/testweb/default.aspx 1.Request.Applic ...

  7. 【转载】ASP.NET获取路径的方法

    HttpContext.Current.Request.PhysicalPath;    // 获得当前页面的完整物理路径.比如 F:\XFU.NSQS\project\website\Default ...

  8. HttpServletRequest常用获取URL的方法

    1.request.getRequestURL() 返回的是完整的url,包括Http协议,端口号,servlet名字和映射路径,但它不包含请求参数.2.request.getRequestURI() ...

  9. JS获取URL参数 方法

    function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = qu ...

  10. 【javaWeb】HttpServletRequest常用获取URL的方法

    1.request.getRequestURL() 返回的是完整的url,包括Http协议,端口号,servlet名字和映射路径,但它不包含请求参数. 2.request.getRequestURI( ...

随机推荐

  1. EF core 反向工程 连接字符串

    Scaffold-DbContext 'Data Source=.;Initial Catalog=DB;User ID=sa;Password=1;Integrated Security=true; ...

  2. 【MySQL】导出到CSV

    http://www.yiidian.com/mysql/mysql-export-table-to-cvs.html 要将表导出为 CSV 文件,我们将使用SELECT INTO....OUTFIL ...

  3. Spanve:一种检测大规模空间转录组学数据中空间变异基因的有效统计方法

    文章题目 Spanve: an Effective Statistical Method to Detect Spatially Variable Genes in Large-scale Spati ...

  4. Windows 从头搭建c++ Eigen 库

    虽然目前还在用python实现自己的算法,但是还是有点略微不满足,算法迟早有一天全从python搬到c++上,先给自己立个flag. 前言 由于本人做一些模型的搭建和计算,矩阵运算必然是少不了的,本人 ...

  5. 字典集合:Dictionary

    字典键值对的键是唯一的,如果添加了相同键的项就会抛异常,可以通过索引的方式进行重新赋值 using System; using System.Collections.Generic; using Sy ...

  6. CSS:盒子_每个元素都有两个盒子(《CSS世界》笔记-块级元素)

    CSS:盒子_每个元素都有两个盒子(<CSS世界笔记>-块级元素) 1)CSS世界只有"块级盒子(block-level box)"和"内联盒子(inline ...

  7. Jsonhelper类

    public static class JsonHelper { #region json转对象 /// <summary> /// json转对象 /// </summary> ...

  8. Rstudio 快捷键无法使用

    今天突然发现我的R studio 很多快捷键不能使用,后面发现是因为Rstudio 的快捷键与MobaXterm的快捷键起冲突了,后面关掉MobaXterm后就恢复了,如果有类似的问题可以在自己电脑打 ...

  9. Sql Sugar 拾遗

    SqlSugar 拾遗 更新操作 //UpdateColumns:只更新某些列 db.Updateable(entity).UpdateColumns(it => new { it.Name } ...

  10. 小程序微信支付完整demo,包含退款

    最近刚完成一个商场小程序(http://market.zhenzikj.com/detail/121.html), 使用到了微信支付功能,其中遇到了很多的抗,所以,我把支付这块摘出来,以免大家少走弯路 ...