最終篇!!!web
終於寫完了!json
以前碰到一個問題:拿不到acces_token
。api
第一次失敗:Tornado
的http fetch
須要什麼什麼hostname match
,而微信網頁受權須要通過open.weixin.qq.com
和api.weixin.qq.com
,因此並不match
,致使沒辦法使用 Tornado
內置的異步請求 HTTP
客戶端去調用微信API
。跨域
第二次失敗:而後我嘗試用JS
來調用API
,可是構造的請求老是有問題233。確定仍是由於我不會寫JS
,233。而後我就想用iframe
好了【emoji
笑哭表情x3】,可是跨域是問題233。服務器
昨晚逛Python
社區的時候忽然發現了urllib2
,好方便!!!微信
兩行代碼解決你的一!生!需!求!!!app
import urllib urllib.urlopen(URL).read() #抓取URL網頁全部內容,而後Do whatever you want!!!
第三次失敗:233,由於擔憂黑客入侵,學校禁止內部服務器訪問外網,因此沒辦法在服務器裏的調用微信API
。微信公衆平臺
因而,我想到了用SAE
,好聰明哈哈。異步
以下:函數
本身服務器上的auth
處理器:
class AuthHandler(tornado.web.RequestHandler): def get(self): CODE = self.get_argument('code', None) if CODE: self.redirect('http://1.ckwxyy.sinaapp.com/?code='+CODE)
SAE
上的處理函數:
import tornado.wsgi import sae class MainHandler(tornado.web.RequestHandler): def get(self): import json import urllib CODE = self.get_argument('code', None) if CODE: APPID = APPID SECRET = SECRET URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+APPID+"&secret="+SECRET+"&code="+CODE+"&grant_type=authorization_code" result = json.loads(urllib.urlopen(URL).read()) ACCESS_TOKEN = result["access_token"] OPENDID = result["openid"] URL = "https://api.weixin.qq.com/sns/userinfo?access_token="+ACCESS_TOKEN+"&openid="+OPENDID result = json.loads(urllib.urlopen(URL).read()) nickname = result["nickname"] avatar = result["headimgurl"] openid = result["openid"] self.redirect("服務器相應處理器地址") else: self.write("Hello, world! - Tornado") app = tornado.wsgi.WSGIApplication([ (r"/", MainHandler), ]) application = sae.create_wsgi_app(app)
到此,個人微信牆基本就寫完了,剩下一些UI
的問題就等着之後慢慢完善吧。
但願對你們有幫助,麼麼噠~
總之,這是一個寫微信牆的經驗分享,也是如何使用微信公衆平臺網頁受權用戶信息的經驗分享。多百度,多找替代方案,確定能解決問題的。可是,這樣好像一直迴避最重要的問題,致使本身對技術的理解始終不夠深刻,但願本身可以在將來進行更多深刻的思考。