微信公众平台开发之用Flask+SAE实现简单被动消息回复功能

程序可以实现很多美好的事情,如果有好的Idea,微信开发实现的功能完全可以替代电脑程序或手机APP。

偶然听同事聊天,说关注了某一电影资源微信公众号,只需在对话框回复电影名称,对方公众号便可直接推送这部电影的下载链接。

我便梳理了一下这个流程,这就相当于将电影网站的搜索框的功能,移植到了微信公众平台上面了。具体的实现思路应该是:

  1. 利用微信提供的接口,获取用户发送的消息
  2. 处理用户发来的消息,通过在事先准备好的数据库中匹配到对应的电影资源
  3. 再次通过消息回复接口发送给用户

上面第二部功能部分就不讲了,本文主要介绍对接微信公众平台的消息接口,然后实现简单消息自动回复的功能。

开发前的准备

需要准备两个东西:申请好的微信订阅号和一台云服务器。目前市面上为大家所熟知的云服务器包括:阿里云、新浪SAE和腾讯云。因为本人很早便申请了新浪云的服务器,所以本文是基于在SAE上测试的。

如果你需要申请SAE,可以使用我的专属推荐链接:http://t.cn/R5p4gRu,如果申请成功,对于我们两人都会有奖励。

另外:本文使用Python的Flask来开发。

新浪SAE的配置

因为微信后台配置时,需要验证自己事先设置好的服务器,所以这里先简单介绍一下新浪SAE的配置,和简单的微信验证代码。

进入自己的新浪云后台,选择创建新应用,然后开发语言选择Python,运行环境选择标准环境,填写自己唯一想要的二级域名和自己的应用名称,之后点击右边的创建应用按钮,即可创建成功。

微信公众平台开发之用Flask+SAE实现简单被动消息回复功能_第1张图片

下图为我已经创建好的应用:

微信公众平台开发之用Flask+SAE实现简单被动消息回复功能_第2张图片

之后便可以使用Git在自己电脑上编辑好代码,然后传至自己已经申请好的云应用中。

Git代码部署说明

在你应用的git代码目录里,添加一个新的git远程仓库 sae

$ git remote add sae https://git.sinacloud.com/jikenow

编辑代码并将代码部署到 sae 的版本1。

$ git add .
$ git commit -m 'Init my first app'
$ git push sae master:1

SAE支持Git、SVN、代码打包上传三种提交方式,具体请参考:http://www.sinacloud.com/doc/sae/tutorial/code-deploy.html#git

下面我给出的代码,也是通过以上git方法传到云应用中,如果不是很清楚,可以阅读上面给出的帮助文档。

微信验证代码

当在微信后台配置自己的云服务器时,微信的服务器会发送GET请求至我们提供的URL,这时需要我们通过一些判断来确认其确实是由微信发起的请求,如果确认ok,就返还给微信echostr参数内容。具体Python-Flask代码如下:

#coding:utf-8
from flask import Flask,request,make_response
import time,hashlib,re,requests
import xml.etree.ElementTree as ET

app = Flask(__name__)

@app.route('/weixin',methods = ['GET','POST'])
def weixin():
    # 微信验证
    if request.method == 'GET':
        token = 'weixin'
        query = request.args
        signature = query.get('signature','')
        timestamp = query.get('timestamp','')
        nonce = query.get('nonce','')
        echostr = query.get('echostr','')
        s = [timestamp,nonce,token]
        s.sort()
        s = ''.join(s)
        if hashlib.sha1(s).hexdigest() == signature:
            return make_response(echostr)

注意我上面路由设置的是/weixin后缀,所以我之后向微信后台添加的配置URL就是http://jikenow.applinzi.com/weixin,前面的网址便是我申请的二级域名。

参考网址:微信接入指南

附逻辑流程图:

微信公众平台开发之用Flask+SAE实现简单被动消息回复功能_第3张图片

写好了之后保存为main.py,然后还需要新建一个index.wsgi的文件,是SAE要用到,文件内容如下:

import sae
from main import app

application = sae.create_wsgi_app(app)

保存好之后,将以上两个文件通过Git传至云应用中。

微信公众平台后台开发者配置

  1. 进入微信公众平台后台,选择开发选项下的基本配置
  2. 之后可以看到服务器配置选项,点击修改配置
  3. 填写对应的服务器URL(http://jikenow.applinzi.com/weixin)和Token参数(本人用的是weixin,你可以设置自己唯一的字符),为了方便开发,加解密方式设置为明文模式,提交
  4. 此时微信便会发送GET请求至我们的服务器URL中,我们之前已设置好,所以应该会通过验证
  5. 点击启用即可成功

下图显示已启用(验证成功):

微信公众平台开发之用Flask+SAE实现简单被动消息回复功能_第4张图片

重头戏:被动回复用户消息

上面说了一大堆,只是一些准备工作而已,如果上面的准备工作有所不明白的,你可以参考我在文章末给出的几个链接文章。

回归正题,现在需要编写一个很简单的小程序,模仿用户说话,也就是用户向你发送什么文本内容,你原样返回给用户此文本内容即可。

流程有下面三点:

  1. 接收用户发送的普通文本消息,微信会通过POST方式将XML数据包发送给我们的URL中
  2. 复制此文本消息且生成回复的XML格式的数据
  3. 被动消息回复给微信服务器,然后即发送给用户

上面三点的逻辑清楚了,代码也就不难理解了,接着上面的微信验证代码来:

def weixin():
    # 微信验证
    # 上面给出
    # 被动回复消息
    else: # 即如果为POST请求执行下面的代码
        xmlData = ET.fromstring(request.stream.read())
        msg_type = xmlData.find('MsgType').text
        if msg_type == 'text':
            ToUserName = xmlData.find('ToUserName').text
            FromUserName = xmlData.find('FromUserName').text
            Content = xmlData.find('Content').text
            reply = '''
                    
                    
                    %s
                    
                    
                    '''
            response = make_response( reply % (FromUserName, ToUserName, str(int(time.time())), Content ) )
            response.content_type = 'application/xml'
            return response

搞好之后,保存main.py文件,上传至服务器。至此,我们的微信模仿用户说话的小功能已经做好了。

功能虽小,但是已经迈出了第一步,之后的所有更强大的功能,都会在此基础上延伸。

参考网址

  1. 微信入门指引
  2. 微信消息对应的借口:接受普通消息和被动回复用户消息
  3. Flask+SAE快速打造微信公众帐号(有码)
  4. python,flask,SAE(新浪云),搭建开发微信公众账号

你可能感兴趣的:(微信公众平台开发之用Flask+SAE实现简单被动消息回复功能)