最近一朋友的客户有这么一需求,引导用户去关注公众号。想这么干,通过网页跳转到微信并打开带有二维码的网页,用户长按识别二维码就可以关注了。
想法很好,对于这种方式我是怀疑的,于是去查资料。微信有个协议可以实现跳转,如下:
weixin://dl/business/?ticket=
关键就是ticket对应的参数是什么,这里的ticket和我们要跳转的url有什么关系呢?
- ticket对应的参数就是我们要跳转网页的标记;
- ticket需要动态获取,有效期大约10分钟;
- tieket不是谁都可以获取,微信只授权给了一些合作商;
在《点击链接打开微信再跳转到微信内部浏览器的解决方案》中,发现了微信动态获取ticket的接口:
http://wq.jd.com/mjgj/link/GetOpenLink?callback=getOpenLink&rurl=urlencode(要跳转的链接)
但是京东只能跳转到jd.com域名的地址,我们用淘宝的地址试试:
https://www.taobao.com UrlEncode之后 https%3a%2f%2fwww.taobao.com,然后拼到接口里。
http://wq.jd.com/mjgj/link/GetOpenLink?callback=getOpenLink&rurl=https%3a%2f%2fwww.taobao.com
得到如下:
try{getOpenLink({"errcode":0,"openlink":"weixin://dl/business/?ticket=t93f088d67f8e629a854e878a19f31cbd"});}catch(e){}
把openlink放到html中:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<title>打开微信</title>
</head>
<body>
<a href="weixin://dl/business/?ticket=t93f088d67f8e629a854e878a19f31cbd" class="dl-btn" id="download">打开微信</a>
</body>
</html>
通过adb把上面的html push到手机内,用浏览器打开,点击跳转,发现跳转到了微信中,并打开了微信京东首页。
为什么会这样呢?我们写的是淘宝首页,结果跳转到了京东。应该是京东的接口做了校验,非京东域名下的都跳转到自家的首页。
当然微信不仅给了京东跳转的方式、页授权了艺龙、携程等合作商。网上很多号称给他钱可以给你实现跳转的大多都是找合作商的漏洞,借鸡生蛋,用别人的服务生成ticket实现跳转。当然也有那微信跳转服务骗人的,钱给了,人跑了。所以如果玩玩可以找找别人的漏洞,如果商业用还是醒醒吧,不靠谱。