最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python实现微信公众号开发

    正文概述    2020-03-12   264

    Python实现微信公众号开发

    准备工作

    首先要注册一个公众号,这个很简单,我们到微信公众平台注册就可以了,选择个人订阅号就可以。但是如果可以认证的,我建议选择认证订阅号,因为未认证的号很多功能权限都没有。好了,话不多说进入正题。

    1. 配置公众号

    打开公众号,在 开发->基本配置 页面填写内容。

    Python实现微信公众号开发

    下面说下需要填的内容,第一个URL要填的就是我们的服务地址,这个地址必须是外网地址并且是80端口。我们要本地开发时可以用 ngrok 解决。在ngrok.com官网下载。解压后就是一个exe程序。在当前目录下输入.\ngrok.exe http 80即可启动。启动后如下图所示,图片中网址就是我们需要的。

    相关推荐:《Python教程》

    Python实现微信公众号开发

    ·然后我们复制红色方框里面的地址到微信的URL输入框中,比如我的就输入http://c9b15df5.ngrok.io/connect

     后面这个connect是我自己的服务的地址。就是我们在程序开发中自己命名的一个请求路径,如果是新手的话建议按照我的来。不要改      动,避免程序跑不起来。

    ·第二个Token,自己想一个就行了,随便填,你可以当他为一个密码。

    ·第三个自己生成就可以了。

    ·最后一个消息加解密方式选择明文模式。配置到这里就结束了,我们先不要关闭这个页面,等我们Python程序验证部分写好以后点击页    面下面的提交就可以了。现在点会报错的。

    2.接口验证部分代码编写

    查看官方文档,当我们点击配置页面的提交按钮时,微信后台会向我们配置的地址发送signature、timestamp、nonce、echostr四个信息,我们拿到这部分信息后通过哈希加密算法计算出(timestamp,nonce,token)的哈希值与微信发送的signature对比,如果相等则说明是微信后台的请求,然后把echostr返回,就表示验证成功。

    这一步,我们使用三个库,wechatpy-微信的Python SDK,falcon一个非常微小的Python Web框架,Waitress-一个Python WSGI服务器,当然在Linux上可以使用gunicorn代替waitress。通过pip install wechatpy[pycrypto]和pip install falcon,pip install waitress安装。代码如下,只需要把配置界面的token替换到代码里

    import falcon
    from falcon import uri
    from wechatpy.utils import check_signature
    from wechatpy.exceptions import InvalidSignatureException
    class Connect(object):
        def on_get(self, req, resp):
            query_string = req.query_string
            query_list = query_string.split('&')
            b = {}
            for i in query_list:
                b[i.split('=')[0]] = i.split('=')[1]
            try:
                check_signature(token='这里填写配置界面你输入的token', signature=b['signature'], 
                timestamp=b['timestamp'], nonce=b['nonce'])
                resp.body = (b['echostr'])
            except InvalidSignatureException:
                pass
            resp.status = falcon.HTTP_200
    app = falcon.API()
    connect = Connect()
    app.add_route('/connect', connect)

    代码写好以后,我们在命令行输入 waitress-serve --port=80 connect:app在80端口启动我们的程序。启动后如下图,代表启动成功,这时候我们到微信的配置页面点击提交,会弹出提交成功消息框,代表我们成功接入微信。

    Python实现微信公众号开发

    简单说明以下上面代码,on_get函数接收微信发来的get请求,并且通过query_string拿到微信发送的参数,之后通过wechatpy的check_signature函数来校验。校验成功后把echostr返回给微信。

    3.发送文本信息给用户

    接入成功后,就可以回复用户的信息了。我们增加一个函数处理用户发送的消息,整体代码如下:

    import falcon
    from wechatpy.utils import check_signature
    from wechatpy.exceptions import InvalidSignatureException
    from wechatpy import parse_message
    from wechatpy.replies import TextReply, ImageReply
    class Connect(object):
        def on_get(self, req, resp):
            query_string = req.query_string
            query_list = query_string.split('&')
            b = {}
            for i in query_list:
                b[i.split('=')[0]] = i.split('=')[1]
            try:
                check_signature(token='xxxxx', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
                resp.body = (b['echostr'])
            except InvalidSignatureException:
                pass
            resp.status = falcon.HTTP_200
        def on_post(self, req, resp):
            xml = req.stream.read()
            msg = parse_message(xml)
            if msg.type == 'text':
                reply = TextReply(content=msg.content, message=msg)
                xml = reply.render()
                resp.body = (xml)
                resp.status = falcon.HTTP_200
    app = falcon.API()
    connect = Connect()
    app.add_route('/connect', connect)

    我们导出了parse_message,TextReply,ImageReply函数。当拿到用户消息时,判断是文本消息,就原样返回给用户。现在我们启动脚本后,向公众号发送文本消息就会收到自动回复了。

    4. 发送图片信息给用户

    我们简单修改下on_post函数,使其不仅能处理文本,也能处理图片信息。完整代码如下:

    import falcon
    from wechatpy.utils import check_signature
    from wechatpy.exceptions import InvalidSignatureException
    from wechatpy import parse_message
    from wechatpy.replies import TextReply, ImageReply
    class Connect(object):
        def on_get(self, req, resp):
            query_string = req.query_string
            query_list = query_string.split('&')
            b = {}
            for i in query_list:
                b[i.split('=')[0]] = i.split('=')[1]
            try:
                check_signature(token='xxxxxxx', signature=b['signature'], timestamp=b['timestamp'], nonce=b['nonce'])
                resp.body = (b['echostr'])
            except InvalidSignatureException:
                pass
            resp.status = falcon.HTTP_200
        def on_post(self, req, resp):
            xml = req.stream.read()
            msg = parse_message(xml)
            if msg.type == 'text':
                reply = TextReply(content=msg.content, message=msg)
                xml = reply.render()
                resp.body = (xml)
                resp.status = falcon.HTTP_200
            elif msg.type == 'image':
                reply = ImageReply(media_id=msg.media_id, message=msg)
                xml = reply.render()
                resp.body = (xml)
                resp.status = falcon.HTTP_200
    app = falcon.API()
    connect = Connect()
    app.add_route('/connect', connect)

    我们在代码中加入了图片处理逻辑,如果是图片类型的消息,则把图片返回给用户。我们把图片发送给微信后台后,会自动生成一个media_id,我们发送这个media_id就可以了。

    效果图:

    Python实现微信公众号开发


    下载网 » Python实现微信公众号开发

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元