zoukankan      html  css  js  c++  java
  • 使用flask搭建微信公众号:完成token的验证

    上一篇文章讨论了官方给的例子验证token失败的解决方法:微信公众号token验证失败

    想了一下,还是决定不适用web.py这个框架。因为搜了一下他的中文文档不多,学起来可能会有点麻烦。而且看着他没有主动取适应python3.0,pip安装默认还是python2,例子什么的也都是python2的。我不太想回到python2。所以我选择了flask这个框架,简单而且文档比较多。

    下面介绍flask完成服务器验证。因为有了上一次的经验,知道了验证就是获取几个get的数据包,然后加密再确认就可以了。所以只需要知道flask怎么获取get包就可以了。

    经过搜索,flask的获取get使用的是request.args.get这个函数(要from flask import request),参数就是get的字段名字。

    signature=request.args.get('signature')

    知道这些就可以效法上一篇文章的代码进行改造了。(当然,也得学习一下flask的基本语法什么的)

    from flask import Flask
    from flask import request
    import hashlib
    
    app = Flask(__name__)
    
    @app.route('/wx')
    def getinput():
        signature=request.args.get('signature')
        timestamp=request.args.get('timestamp')
        nonce=request.args.get('nonce')
        echostr=request.args.get('echostr')
        token = "maluguang"
        list = [token, timestamp, nonce]
        list.sort()
        sha1 = hashlib.sha1()
        sha1.update(list[0].encode('utf-8'))
        sha1.update(list[1].encode('utf-8'))
        sha1.update(list[2].encode('utf-8'))
        hashcode = sha1.hexdigest()
        print ("handle/GET func: hashcode, signature, timestamp, nonce, echostr, token: ", hashcode, signature,timestamp,nonce,echostr)
        if hashcode == signature:
            return echostr
        else:
            return ""
    
    if __name__ == '__main__':
        app.run(port='80')

    这样就可以完成微信token的验证了。

    题外话。本来打算跟着flask的开发文档把那个示例的博客系统做出来的。但是,做着做着就出错,有的地方也看不懂。因为那个东西已经基本算是个成品了,各种东西比较完善,我觉得初学的看不太懂。把他比作建楼房的话,应该先做骨架,最精简的那种,哪怕有很多漏洞,运行效率低什么的,但这样最起码知道每一步在干什么。他那种,我觉得就是一下子从底到上,一遍直接给完工了,做完直接入住,因为他已经提前考虑了很多问题,在写的时候也考虑进去了。而对于初学者,他事先考虑的很多问题,我们根本不明白为什么这样。所以,就放弃了。

    还是那种,为了实现一个功能就去搜,一次了解一个功能,一个函数具体怎么用,怎么写比较适合我。我得想法是用许多点汇聚成面的学习。比方说,今天学了flask的get用法,明天学post,接着学表单提交,静态模板,数据库等等。一次明白一个东西,最后再汇聚到一起。嗯,flask的那个博客系统一次塞给我的东西太多了,接受不过来,而且自己也没能力将那些东西拆分开来理解。

    参考文章:

    flask的request如何获取参数(这个里面还有其他获取get数据的函数)

    flask 如何获取全部 GET 查询参数?

  • 相关阅读:
    大厂面试爱问的「调度算法」,20 张图一举拿下
    键盘敲入 A 字母时,操作系统期间发生了什么
    “花呗还不起了,能不能把支付宝服务器炸掉?”
    Tomcat 报SocketException 断开的管道错误
    linux中grep命令的用法
    Linux的关机与重启
    globbing:文件名通配
    转载:Git 团队协作中常用术语
    Java多线程学习笔记
    RectTransform简析
  • 原文地址:https://www.cnblogs.com/roadwide/p/10580342.html
Copyright © 2011-2022 走看看