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

可以看出这个一个二级页面,如果想要使用 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. 硬件监控:grafana+prometheus+node_exporter

    一.前期准备: grafana:前端展示平台,没有数据存储功能,但是,它有不同的展示模板,然后,把后端数据库中提供的数据,进行展示 -->展示数据 prometheus(普罗米修斯):时序数据库 ...

  2. vue中引入字体

    前言: 做大屏 项目需要引入字体做个记录一.先看看效果  二.实现1.下载字体文件 分享一个下载开源字体网站: https://www.dafont.com/theme.php2.文件放到项目中 可以 ...

  3. UVM——通过一个简单的testbench来了解UVM组件的phase执行顺序

    先写好一个top.sv 查看代码 // 导入VCS或者Modelsim自带的UVM库和宏 `include "uvm_macros.svh" import uvm_pkg::*; ...

  4. go语言初记

    快速了解 http://go-tour-zh.appspot.com/welcome/1 (可以需要爬墙) 下面记录下了解go的过程,特别记录下与你脑子里原有"观念"不同的地方: ...

  5. dp-状压dp

    https://www.bilibili.com/video/BV1Z4411x7Kw?from=search&seid=13855865082722302053 状压介绍: 状态表示: 转移 ...

  6. java中overload与override的区别

    1.综述 重写(Override)也称覆盖,它是父类与子类之间多态性的一种表现,而重载(Overload)是一个类中多态性的一种表现. override从字面就可以知道,它是覆盖了一个方法并且对其重写 ...

  7. linux 清空catalina.out日志 不需要重启tomcat(五种方法)

    linux 清空catalina.out日志 不需要重启tomcat 1.重定向方法清空文件   [root@localhost logs]# du -h catalina.out  查看文件大小17 ...

  8. python菜鸟学习: 14. GUI界面化使用

    # 获取输入框中的内容 def getVars(): global outterDomain1, innertDomian1, guestEid1, appName1, unicodeName1, r ...

  9. CCF 201912-2 回收站选址

    #include <iostream> #include <bits/stdc++.h> #include <string> using namespace std ...

  10. vue input输入框关键字筛选检索列表数据展示

    想必大家在项目开发中难免会用到关键字筛选的功能,正好这次项目有需求要做这一块,就整理一下vue的input输入框输入关键字检索数据列表的代码.下面直接上代码: html: <!-- 筛选demo ...