zoukankan      html  css  js  c++  java
  • Flask+微信公众号开发(接入指南)

    目录

    一、注册公众号
    二、启用开发者
    三、配置服务器配置
    四、开发自己的需求
    五、写在最后

    一、注册公众号

           具体的注册过程,根据官方文档一步一步来即可。这里需注意的是订阅号还是服务号;有些比较好的开发接口订阅号是没有的,但是注册服务号需要企业认证之类的,比较复杂。

    二、启用开发者

           在公众号后台打开启用即可。

    三、配置服务器配置

    注:整个过程是动态的,是得先把后端的web和代码设置好,再来配置服务器配置,服务器配置的成功与否是会正儿八经的请求你填的这个URL去做校验的。刚开始的时候不太了解,以为只是填一下信息就行,一直token错误,最好的办法是边开发,边调试。

    1、配置服务器的四个参数

                  
    1)URL:请求到web服务器的地址
    2)Token:任意填写          
    3)EncodingAESKey:随机生成 
    4)消息加解密方式:明文方式   
     
    2、Web请求过去的四个参数
     
    /?signature=xxx&echostr=xxx&timestamp=xxx&nonce=xxx
     
    1)signature 加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数;
          signature 加密签名 = token(开发者)+ timestamp参数 + nonce参数
    2)echostr 随机字符串
    3)timestamp 时间戳
    4)nonce 随机数
     
    3、后端服务器
     
    后端服务器将通过检验signature对请求进行校验,校验方法如下:
     
    1)获取请求的四个参数signature、echostr、timestamp、nonce
    2)对token(代码里指定)、timestamp参数、nonce参数进行字典排序
    3)将三个参数字符串拼接成一个字符串并进行sha1加密
    4)对加密后的字符串与请求获取的signature对比,如果一样,返回echostr,对接成功
     
    4、代码实现
     
    from flask import Flask
    from flask import request
    import hashlib
    
    app = Flask(__name__)
    
    @app.route('/wechat')
    def wechat():
    
        # 1、 获取携带的 signature、timestamp、nonce、echostr
        signature = request.args.get("signature", "")
        timestamp = request.args.get("timestamp", "")
        nonce = request.args.get("nonce", "")
        echostr = request.args.get("echostr", "")
        print(signature, timestamp, nonce, echostr)
    
        token="xxxxxxxxx"
    
        # 2、 进行字典排序
        data = [token, timestamp, nonce]
        data.sort()
    
        # 3、三个参数拼接成一个字符串并进行sha1加密
        temp = ''.join(data)
        sha1 = hashlib.sha1(temp.encode('utf-8'))
        hashcode = sha1.hexdigest()
        print(hashcode)
    
        # 4、对比获取到的signature与根据上面token生成的hashcode,如果一致,则返回echostr,对接成功
        if hashcode == signature:
            return echostr
        else:
            return "error"
    
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000, debug=True)

    五、写在最后

    在平凡中坚持前行,总有一天会遇见不一样的自己。
     
    写博客记录、思考、总结,趟过的坑不趟第二遍。
     

    所有的文章,皆同步在公众号“运维汪”,可关注;也可加入“不扯淡,专注于技术”的QQ群:753512236

     

  • 相关阅读:
    RMAN 与control文件和spfile文件的备份
    Oracle 在 多个Virtualbox 虚拟机间 跨不同物理宿主机进行通信
    如何看数据库是否处在force_logging模式下
    Dataguard学习笔记
    Oracle数据库无法向listener注册的解决一例
    [Oracle]ORA-01499的处理
    查询红帽linux/Oracle Linux的发行版本的方法
    表空间的自动扩展是文件单位的
    [Oracle]如何查看一个数据文件是否是自动扩展
    创建表空间时ora-01119和ora-27040的处理
  • 原文地址:https://www.cnblogs.com/lemon-le/p/13401423.html
Copyright © 2011-2022 走看看