聽說微信公眾平台很火,剛好最近破解了學校流量查詢網站驗證碼的漏洞。就做了一個查詢的公共賬號。
參考了另外一位兄弟的文章http://blog.alphatr.com/weixin-api.html
以及一個開源項目https://github.com/zscorpio/weChat ,通過抓包Hack實現平台信息主動推送的(微信官方暫時沒有提供主動推送的API)
遇到的比較棘手的問題是: 學校的流量查詢網站是教育網,微信的服務器根本無法訪問!
想到了使用代理的方案,具體如下:
環境:百度BAE代碼,公網主機A,校園網主機B (A不能部署代碼)
B SSH 到A上,ssh -NCfg -R 8080:127.0.0.1:8080 root@A
這樣在A上所有到8080端口的數據包都會轉發到B主機上。
然后就有三種方案:
A . 在B主機上做一個Squid代理。 這樣就形成了一個公網到教育網的HTTP代理服務器。
B . 如果在B主機上 ssh -NCfg -D 1080 root@B ,就是一個Sock5代理
C. 在B上直接部署代碼。
經過實踐,由於BAE的奇葩環境,php_curl不能用Sock5代理,而且同一個腳本中不能多次請求。
最終采用了C方案.(也許用php_curl經過HTTP代理也可以,不過真心不想再試了)
整體思路就是:
1 用戶發送消息到微信公共賬號
2 微信服務器將消息體發送到指定的BAE的URL中
3 BAE中的代碼,通過代理,將消息體再發給主機B。
4 主機B模擬登陸校內網站,得到數據后,一次返回。
具體的技術細節就是PHP的 curl socket_create , 再就是對HTTP數據包的構造。
碰到的奇葩問題是:
socket_create里不可以有connection: keep-alive
百度BAE環境中,一個PHP腳本,在執行過程中,只能生成一次socket_create