微信公共平台框架-python(支持多账号)

email:[email protected]

因为微信公共号开发模式只能连接80端口 所以如果需要一个服务器跑多个公共号就需要代码内部自己做分发。因为自己对微信公共号的接口都比较熟悉加上不复杂就自己写了个库,基于tornado的,写完后直接运行就可以了,还比较方便。

github:https://github.com/pakoo/pywechat

整个项目就一个文件 3个类。

class BaseRequest(object):
    """
    微信公共号父类
    """
        def __init__(self,hander):
            self.con = hander

 BaseRequest  公共号的父类。不用关心。

class TestApp(BaseRequest):
    """
    公共号实例,一个公共号一个实例,只需要实现需要的功能就行,具体接受的消息类型见父类
    """
    def get_text(self):
        """
        当测试app收到微信的文字消息时,do something
        """
        if self.wxtext == '1':
            #如果收到 '1'
            self.send_text('1')#回复1

 公共号实例,也就是我们要do something的地方。你公共号接收到消息具体要返回什么内容,业务逻辑就是实现这个类。如果要跑2个公共号,那你要创建2个app实例。

接口分2类,一类是接收消息的入口,还有一类是回复消息的接口。

消息入口

get_text 收到文字消息

get_location 收到地理位置消息

get_image 收到图片消息

get_voice 收到音频

get_video 收到视频

get_event 收到事件消息,比如自定义菜单上的click 事件。

get_subscribe 收到用户订阅事件,用户关注你的公众好了就会收到这个消息

回复接口

send_text 回复文字消息

send_artical  回复文章

send_artical_list  回复多篇文章

回复图片 和 音频需要服务号 订阅好没这个功能,是因为订阅好不能上传素材.

以TestApp为例,我们实现了get_text 这个入口,那么用户发送文字消息过来后就会进行处理。如果文字命中了你if 中的某个字符串你可以做出相应的回复,比如回复文字消息 就调用send_text 就可以了。

如果用户发送的是地理位置消息,因为我们TestApp里没有 get_location 方法 所以不会有任何反应。

最后我们需要将TestApp和 webserver 绑定。

class WeChatHandler(tornado.web.RequestHandler):
    """
    webserver
    """
    def prepare(self):
        self.app_list = {
                'gh_c941312d18f7':{'handler':TestApp,'token':'test_token'},
            }

只要在 app_list里 添加一条 公共号的记录就可以了。

下面是微信发送给你文本消息的例子。

<xml><ToUserName><![CDATA[gh_c324b60d1fv7]]></ToUserName>
<FromUserName><![CDATA[oItamjq5pzWmWzxuTrZXvH3uWA8]]></FromUserName>
<CreateTime>1397542887</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[1]]></Content>
<MsgId>6003500996622490084</MsgId>
</xml>

app_list 的key 就是上面的 ToUserName handler 就是你实现的TestApp  还需要你在微信公共平台上填的token 用来做信息验证。

都完事后,直接 python wechat_server.py 直接运行就可以了。

猜你喜欢

转载自pako.iteye.com/blog/2046669