微信分享鏈接帶圖片文字和描述


微信最近推出的一個社交工具網站 www.faxinxi.la ,能發投票、活動、文章。

但在微信外的瀏覽器包括PC端和移動端的都無法瀏覽這個網站任何內容,那是通過什么來控制的呢?通過微信內輸出特定JS接口不太可能,那就只能通過Header信息里的User-agent了,實驗后證實沒錯,通過探測可以知道微信內的User-agent信息:

Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329 MicroMessenger/5.0.1

就是通過識別MicroMessenger這個關鍵字來確定是否來自微信,通過瀏覽器的user-agent插件就可以輕松繞過這個限制。

接下來就可以輕松獲得www.faxinxi.la的網頁源碼,其實這不是一個微信官方的應用,服務端是用ASP.NET寫的,而且是IIS服務器,有沒有注入漏洞就不知道了,不過注入了也沒什么實際價值,呵呵。

為什么要挖掘他的網頁源碼呢,這才是關鍵。譬如你發一個投票,網址是http://www.faxinxila.com/post/vote, 但你填完所有信息按提交后,網頁地址並沒有發生跳轉,而是ajax提交信息后彈出一個遮罩層,提示你點右上角的分享按鈕,注意,點分享前網址一直保持在/post/vote路徑,但點開分享里的信息已經發生了變化,分享出去后,網址也發生了變化,變成了/vote/3投票實際的展示路徑。 這是怎么做到的呢?

查看faxinxi里唯一js文件,你會發現一個WeixinJSBridge的輸出對象,再對比下通過微信公眾平台發出來的文章源文件,也有WeixinJSBridge對象腳本,問題迎刃而解,微信在內嵌webview里輸出了WeixinJSBridge對象供web端js調用。faxinxi已經將有用的js提取出來了,詳細腳本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
var dataForWeixin={
    appId: "" ,
    url: "http://faxinxi.la/vote/1" ,
    title: "input title here" ,
    desc: "input description here" ,
    fakeid: "" ,
    callback: function (){}
};
( function (){
    var onBridgeReady= function (){
    WeixinJSBridge.on( 'menu:share:appmessage' , function (argv){
       WeixinJSBridge.invoke( 'sendAppMessage' ,{
          "appid" :dataForWeixin.appId,
          "img_url" :dataForWeixin.MsgImg,
          "img_width" : "120" ,
          "img_height" : "120" ,
          "link" :dataForWeixin.url,
          "desc" :dataForWeixin.desc,
          "title" :dataForWeixin.title
       }, function (res){(dataForWeixin.callback)();});
    });
    WeixinJSBridge.on( 'menu:share:timeline' , function (argv){
       (dataForWeixin.callback)();
       WeixinJSBridge.invoke( 'shareTimeline' ,{
          "img_url" :dataForWeixin.TLImg,
          "img_width" : "120" ,
          "img_height" : "120" ,
          "link" :dataForWeixin.url,
          "desc" :dataForWeixin.desc,
          "title" :dataForWeixin.title
       }, function (res){});
    });
    WeixinJSBridge.on( 'menu:share:weibo' , function (argv){
       WeixinJSBridge.invoke( 'shareWeibo' ,{
          "content" :dataForWeixin.title,
          "url" :dataForWeixin.url
       }, function (res){(dataForWeixin.callback)();});
    });
    WeixinJSBridge.on( 'menu:share:facebook' , function (argv){
       (dataForWeixin.callback)();
       WeixinJSBridge.invoke( 'shareFB' ,{
          "img_url" :dataForWeixin.TLImg,
          "img_width" : "120" ,
          "img_height" : "120" ,
          "link" :dataForWeixin.url,
          "desc" :dataForWeixin.desc,
          "title" :dataForWeixin.title
       }, function (res){});
    });
};
if (document.addEventListener){
    document.addEventListener( 'WeixinJSBridgeReady' , onBridgeReady, false );
} else if (document.attachEvent){
    document.attachEvent( 'WeixinJSBridgeReady'   , onBridgeReady);
    document.attachEvent( 'onWeixinJSBridgeReady' , onBridgeReady);
}
})();

以上分享腳本已寫入到本文章頁,你可以直接用微信分享本文章,會發現標題變成了“這是一個神奇的分享腳本”,文章地址指向了另外一篇微信接口的文章

本文網址

這個代碼清晰明了,WeixinJSBridge.on(‘menu:share:timeline’)這段就是分享到朋友圈的作用代碼。PS:在faxinxi.la里還發現此網站有72個別名網址,站長真有米。

faxinxi網站其實也沒有獲得官方進一步的接口支持,譬如直接在微信網頁內獲得用戶的信息,而不需要用戶自己去輸入昵稱,這功能微信其實已經提供支持,但只是沒有開放的高級功能,是通過類似於oAuth方式取得授權就可以獲得用戶信息。

由於faxinxi網站已經被封禁,因此本人另外設置了一個分享腳本的測試地址:

http://wecode.4wer.com/test/weshare.html

頁面腳本請自行查閱,其中用到的分享腳本已封裝成獨立js文件,腳本github地址是:

https://github.com/dodgepudding/wechat-php-sdk/blob/master/wechat.js


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM