最终篇!!!
终于写完了!
失败经历
之前碰到一个问题:拿不到acces_token
。
第一次失败: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
,好方便!!!
两行代码解决你的一!生!需!求!!!
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
的问题就等着以后慢慢完善吧。
希望对大家有帮助,么么哒~
最后
总之,这是一个写微信墙的经验分享,也是如何使用微信公众平台网页授权用户信息的经验分享。多百度,多找替代方案,肯定能解决问题的。但是,这样好像一直回避最重要的问题,导致自己对技术的理解始终不够深入,希望自己能够在未来进行更多深入的思考。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。