/ 技术

weixin:// 跳转研究

微信客户端提供了部分Schemes供外部应用跳转进微信客户并执行相关操作,网上有网友总结了一批scheme,但是我试了一下,基本全部都失效了,不过weixin://dl/business/依然坚挺。类似这样的链接地址,可以直接跳转到微信内部,并打开某个网址

weixin://dl/business/?ticket=sjhjer6723jhsd623jhds76233hds7632

不带ticket直接访问的话,会提示打开失败,那么这个ticket是怎么获取到的呢?完全一点头绪都没有。于是Google了一下,惊讶的发现我打开了一扇新的大门。。。


黑产

  1. 初步研究

下图是部分搜索结果

WX20180622-165717@2x

随便打开了其中一个,发现这些技术文章都是挂羊头卖狗肉的,要么是留了个QQ号,声称加他QQ交流跳转技术,要么是直接推广自己的小平台,你可以通过他们的小平台生成这种微信跳转链接。比如http://www.seoniao.com/这个平台。
咱们为了一探究竟于是就加了一个QQ号“交流”一下微信跳转技术。
贴上聊天记录:
WX20180622-170455@2x
WX20180622-170618@2x
WX20180622-170710@2x

虽然最后说自己已经研究出来了是“诓”他的,但是他给的这个链接确实是能唤起微信,并跳转到二维码图片页面。查看了一下他们demo的二维码图片的原始地址为:
http://mjbbs.jd.com/data/attachment/forum/201806/07/201522o2bhyezhkiaihkcm.gif
从二级域名看出该图是来自京东卖家论坛的,这里就有猫腻了,为啥他会把二维码放到京东卖家论坛呢?而且我去论坛看了,并不能注册账号,说明他们应该有卖家账号可以登录。

  1. 分析小平台的源码

目前还并不知道他们怎么实现跳转的,那就从看看他们的网页源码开始研究吧

<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="format -detection" content="telephone=no">
    <title>跳转中</title>
    <meta name="chromesniffer" id="chromesniffer_meta" content="{}">
    <script type="text/javascript" src="chrome-extension://fhhdlnnepfjhlhilgmeepgkhjmhhhjkh/js/detector.js"></script>
</head>
<body>
<div style="text-align: center; font-size: 18px; margin: 100px 0 30px 0;">正在前往微信客户端</div>
<a href="javascript:document.location.reload();"
   style="width: 90%; background: #1AAD19; text-align: center; color: #fff; margin: 0 auto; box-sizing: border-box; font-size: 18px; line-height: 2.55555556; border-radius: 5px; display: block; text-decoration: none;">重新跳转</a>
<script>if (!/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent) && /baiduboxapp/i.test(navigator.userAgent)) {
        setTimeout(function () {
            window.location.replace("bdbox://utils?action=sendIntent&minver=7.4&params=%7B%22intent%22%3A%22weixin://dl/business/?ticket=t8e565136dcfb4d4c5b0920c9e5365f13%23Intent%3Bend%22%7D");
        }, 200);
    } else {
        window.location.replace("weixin://dl/business/?ticket=t8e565136dcfb4d4c5b0920c9e5365f13");
    }
    ;</script>
</body>
</html>

从源码里面我们就发现了weixin://dl/business/?ticket=t8e565136dcfb4d4c5b0920c9e5365f13这个上文提过的链接,整个源码最关键的部分就在这里。他们是怎么拿到这条链接里面的ticket的呢?现在又毫无头绪了。

  1. 继续搜索

没办法,只能继续搜索了,经过各种努力,翻了好几十页的Google,总算发现点有用的东西了。
wap跳转到微信内部浏览器的解决方案
这篇文章里面介绍到是利用了京东的合作商跳转接口来实现的,而且,这个接口只认jd.com下的域名,这就解释了上文说的为啥他会把图片上传到京东卖家论坛里面去了。

  1. 深入研究

这样咱们就拿到这个接口的请求地址了

http://wq.jd.com/mjgj/link/GetOpenLink?callback=getOpenLink&rurl=urlencode(要跳转的链接)

然后我非常激动的把上文中的图片地址urlencode之后填了进去,结果返回是

try{getOpenLink({"errcode":2,"openlink":""});}catch(e){}

这就很尴尬了,为啥并不像文章里说的那样出来ticket链接呢?我这也是jd.com的二级域名啊。尝试了几次之后,仍然没有结果,于是我尝试改了下二级域名:

https://wq.jd.com/mjgj/link/GetOpenLink?callback=getOpenLink&rurl=http://wq.jd.com/test

然后,出乎意料的就成了!

try{getOpenLink({"errcode":0,"openlink":"weixin://dl/business/?ticket=t1886d321fdd8e9a5622626b1197c7f34"});}catch(e){}

也就是说这个接口只对特定的jd.com的域名开放,wq.jd.com就是其中之一,那么上文中那个卖接口的哥们是怎么实现跳到京东卖家论坛的图片的呢?
回到第3步的文章里面,作者说了这样一段话

这个只能支持jd.com的域名 比如:sales.jd.com
那么怎么才能跳到自己的域名呢,就必须借助jd.com的域名来做跳转,所以需要找到一条jd.com的跳转链接,并且能跳转到第三方域名。
至于怎么找,翻遍*.jd.com的所有域名,你应该能找到。哈哈

也就是说这个卖接口的肯定是找到了wq.jd.com这个域名或者别的jd.com下被支持的域名的跳转接口做了一个二次跳转,跳转到了京东卖家论坛,而且这个二次跳转的地址肯定也支持jd.com下的域名,否则他就没必要把图片放到京东卖家论坛了。

  1. 从研究到放弃

那这个就尴尬了,去哪里找这种跳转服务呢?线索又再一次断掉了。。。

  1. 不甘心

如果有按照本文的指引研究出来的大神们,衷心期待你们的留言。等大神告知了再更新本文吧~