zoukankan      html  css  js  c++  java
  • 0034 微信公众平台开发(03 回复文本和图文消息)

      微信收到消息和事件后,可以自动回复。回复类型大致包括文本回复、图片回复、语音回复、视频回复、音乐回复、图文回复。

      文本回复和图文回复,直接就可以回复,而其它回复是媒体回复,需要先上传媒体文件,获取媒体文件的media_id,然后,再调用media_id做出回复。

      故本文先学习文本回复和图文回复。

      在Applications/Wechat/views下创建一个文件,名为:Replies.py,专门用于处理回复信息。

    1 文本回复

      文本回复,是用文本方式来响应用户消息。文本回复最好的方式是,通过解析用户发出的文本内容,来回复用户需求。

    from wechatpy.replies import TextReply
    
    
    def replyText(txt, msg):
        """
        【功能描述】解析用户的文本消息,并根据文本回复
        此处可以用正则表达式检索用户发送的文本信息,并根据检索的信息做相应的回复。
        相当于一个简单的智能回复机器人。
        """
        if txt == '你好':
            content = '你更好哦!'
        else:
            content = '我不懂你在说什么'
        reply = TextReply(content=content, message=msg).render()
        return reply
    

      然后,在Applications/Wechat/views/WechatInterface.py中,挂在用户文本消息下面。

    if msg.type == "text":
        return HttpResponse(Replies.replyText(msg.content,msg))
    

      运行工程,在公众号里测试效果如下:

     2 图文回复

      图文回复就是有图片,有文字的回复。在进行图文回复前,要做三件事:

      第一:准备一张图片,放在工程根目录下的media目录里,命名为001.png

      第二:配置媒体文本路径

      在工程settings.py做如下配置:

    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    

      在工程url做以下配置

    from django.views.static import serve
    
    
    urlpatterns = [
        # ...放最后一排   
        re_path(r'(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
    ]
    

      第三:在浏览器中访问这张图片

       图片配置好以后,就开始写程序了。

      参见《微信图文消息

      微信图文消息相对较复杂,wechatpy提供了图文回复的样式,非常简单适用。

    from wechatpy.replies import ArticlesReply
    
    
    def replyArticle(msg):
        reply = ArticlesReply(message=msg, articles=[
            {
                'title': '大学英语四六级查询
    点击图片进入', # 此处可用
    换行。
                'description': '点击图片进入',
                'url': 'http://49.235.156.156/Organizations/UserHome/',
                'image': 'http://49.235.156.156/001.png',
            },
            {
                'title': '请点击加入您的组织,
            您将会享受到更多优质服务!',
                'description': '',
                'url': '',
                'image': 'http://49.235.156.156/001.png',
            },
        ])
        # 继续添加
        reply.add_article({
            'title': '标题3',
            'description': '描述3',
            'url': '',
        })
        # 转换成 XML
        xml = reply.render()
        return xml
    

      把这个函数挂在Applications/Wechat/views/WechatInterface.py中,用户关注公众号事件中。

    if msg.event == 'subscribe':
            # 在用户关注公众号的时候,获取用户的openid,保存在数据库中,而当用户在注册的时候,
            # 从注册页面再获取一次openid,同时把用户的手机号和openid,并根据该openid更新该用户的手机号。
            print(msg.source)
            return HttpResponse(Replies.replyArticle(msg))
    

      运行工程,先取消公众号,再关注公众号。

      

  • 相关阅读:
    序列合并
    基础数论函数练习题
    Chirp Z-Transform
    [IOI2020]数蘑菇
    springboot devtools 依赖
    RestTemplate的使用(项目实例)
    Springboot事件监听实例
    HttpClient的使用(项目实例)
    通过http方式传递base64图片字符串无法还原成图片的原因
    springboot实现滑动验证码(redis+token+base64)
  • 原文地址:https://www.cnblogs.com/dorian/p/12393264.html
Copyright © 2011-2022 走看看