最终篇!!!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
的问题就等着之后慢慢完善吧。
但愿对你们有帮助,么么哒~
总之,这是一个写微信墙的经验分享,也是如何使用微信公众平台网页受权用户信息的经验分享。多百度,多找替代方案,确定能解决问题的。可是,这样好像一直回避最重要的问题,致使本身对技术的理解始终不够深刻,但愿本身可以在将来进行更多深刻的思考。