最近在做微信公共號(hào)開發(fā)的時(shí)候遇到一些坑,特意記錄下來,供大家參詳,如果有更好的方法或者解決思路,歡迎提供。
項(xiàng)目背景:
在公眾號(hào)中有活動(dòng)頁面,引導(dǎo)用戶進(jìn)行平臺(tái)帳號(hào)的綁定操作,之后用戶的所有福利均可以在平臺(tái)中進(jìn)行查看,于是誕生了綁定賬號(hào)的需求。
目前有兩套帳號(hào)體系A(chǔ)和B,都需要帳號(hào)綁定,于是綁定的需求就更新為帳號(hào)打通與綁定的需求,域名為abc.com和def.com。
遇到的問題:
項(xiàng)目完成后,大家測(cè)試。結(jié)果B帳號(hào)體系的完全正常符合預(yù)期,綁定成功。但是A帳號(hào)體系則出現(xiàn)有的iphone可以綁定成功,有的iphone綁定失敗,安卓手機(jī)測(cè)試范圍不多,沒有遇到問題。
排查思路:
遇到這種問題,最先開始的就是在服務(wù)端查看打點(diǎn)日志,看看究竟出了什么問題。結(jié)果發(fā)現(xiàn)綁定失敗的請(qǐng)求,并沒有到達(dá)bind層。一直沒有bind的請(qǐng)求。那么也就是綁定頁面的前面一步,用戶登錄的時(shí)候出現(xiàn)異常了,由于綁定的頁面是在def.com域名下,A帳號(hào)體系屬于跨域操作,排查就聯(lián)想到是不是跨域?qū)е碌模蛘哒f用戶是不是登錄成功了。于是我們?cè)谟袉栴}的手機(jī)上訪問了abc.com的頁面,發(fā)現(xiàn)用戶果然并沒有登錄成功。問題是并不是所有的測(cè)試iphone都會(huì)出現(xiàn)這種問題。
微信在安卓機(jī)器上是基于QQ瀏覽器的內(nèi)核。
微信在iphone上是iOS指定的內(nèi)核,UIWebView實(shí)現(xiàn)的:
查看一下ios的微信瀏覽器的信息如下
第一臺(tái):{"appname":"Netscape","appVersion":"5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit\/602.1.50 (KHTML, like Gecko) Mobile\/14A456 MicroMessenger\/6.3.30 NetType\/WIFI Language\/zh_CN","appCodeName":"Mozilla","userAgent":"Mozilla\/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit\/602.1.50 (KHTML, like Gecko) Mobile\/14A456 MicroMessenger\/6.3.30 NetType\/WIFI Language\/zh_CN"}
第二臺(tái):{"appname":"Netscape","appVersion":"5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit\/601.1.46 (KHTML, like Gecko) Mobile\/13G36 MicroMessenger\/6.3.30 NetType\/WIFI Language\/zh_CN","appCodeName":"Mozilla","userAgent":"Mozilla\/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit\/601.1.46 (KHTML, like Gecko) Mobile\/13G36 MicroMessenger\/6.3.30 NetType\/WIFI Language\/zh_CN"}
有可能是內(nèi)核做了這種安全的限制,限制了在跨域的情況下種cookie的操作。當(dāng)然沒有文獻(xiàn)資料,我是看現(xiàn)象猜測(cè)的。于是,我退出了微信,原來綁定成功的iphone也顯示綁定失敗,并且經(jīng)過排查與之前的出問題的iphone手機(jī)一樣。既然在def.com里面不能正常的種cookie,那么在公共號(hào)內(nèi),我正常訪問了abc.com的域名,隨便種了一個(gè)cookie,然后在訪問def.com綁定的頁面,可能會(huì)覆蓋之前的cookie嗎?結(jié)果出問題的iphone竟然綁定成功。
我們第一種解決方案:在綁定頁面,嵌入一個(gè)iframe, src就是abc.com的頁面,嘗試在進(jìn)入綁定頁面,就往abc.com域名下種cookie,結(jié)果失敗,貌似為了安全,這種限制只能是正常的訪問才可以。
第二種方案:建立一個(gè)def.com的空頁面,作用就是獲取微信的code與跳轉(zhuǎn)到abc.com的頁面種cookie,然后abc.com的頁面再跳轉(zhuǎn)到def.com的綁定頁面,方案成功,但是稍微犧牲了用戶進(jìn)入頁面的體驗(yàn)。
總結(jié):
經(jīng)過這次踩坑,對(duì)于微信瀏覽器跨域種cookie有了積累,并且對(duì)于微信web開發(fā)者工具的不好用有了吐槽。尤其是多帳號(hào)體系的打通與綁定有了新的認(rèn)識(shí)。寫下來供大家把玩,有好的解決方案也可以留言提供。
待解決:
1、base64位驗(yàn)證碼在微信的web開發(fā)者工具中不通過驗(yàn)證;
2、有沒有不三級(jí)跳,可以使用戶體驗(yàn)更好并且能夠解決問題的方案。
非常感謝下面的這篇文章
http://blog.csdn.net/zhx19920405/article/details/51417250