基于Python及Web.py的微信公众号后台服务器开发——甲篇

Author Avatar
白日鸡生蛋 1月16日
  • 在其它设备中阅读本文章

甲篇讲开发的前提准备。


1. 公众号申请

  于 微信公众号平台官网 提交申请即可。

2. 服务器的选择及环境搭建

  一台具有公网 ip 的服务器即可。建议安装 Ubuntu 系统。
  进入服务器后台管理页面,或是使用 SSH 工具连接服务器。
  我们需要安装 python2.7 版本以上、web.py、libxml2、libxslt、lxml python。输入以下命令进行安装:

sudo apt-get update #更新本地库列表
sudo apt-get install python #安装Python,可指定版本
pip3 install web.py #如果你安装的是Python2请使用pip命令,下同
pip3 install lxml
pip3 install libxslt
sudo apt-get install libxml2

3. 关联至服务器

  在微信公众号平台管理页中点击左侧的菜单栏“设置与开发”中的“基本配置”进入服务器配置页面。
  在这里你可以看到这样的页面:
3b1c34387bafe4dd376eb4257c2cbd4.png
  在 URL 处填入 http:// 服务器的公网 IP 或域名 /wx,在 Token 处填入一串你喜欢的字符,EncodingAESKey 随机生成即可。消息加密方式选择明文模式,因为加解密很麻烦。
  这时候点击提交肯定失败,因为服务器未能正确处理微信方发来的请求。
  使用命令mkdir /wx在服务器的根目录下新建一个文件夹存放项目代码。进入这个目录cd /wx
  vim main.py创建并编辑 main.py 文件,输入如下代码:

# -*- coding: utf-8 -*-
# filename: main.py
import web
from handle import Handle

urls = (
    '/wx', 'Handle',
)

if __name__ == '__main__':
    app = web.application(urls, globals())
    app.run()

  按下 ESC 键,输入:wq,回车保存文件并退出编辑界面。
  vim handle.py创建并编辑 main.py 文件,输入如下代码:

# -*- coding: utf-8 -*-
# filename: handle.py

import hashlib
import web

class Handle(object):
    def GET(self):
        try:
            data = web.input()
            if len(data) == 0:
                return "hello, this is handle view"
            signature = data.signature
            timestamp = data.timestamp
            nonce = data.nonce
            echostr = data.echostr
            token = "xxxx" #你设置的token
            list = [token, timestamp, nonce]
            list.sort()
            sha1 = hashlib.sha1()
            map(sha1.update, list)
            hashcode = sha1.hexdigest()
            print ("handle/GET func: hashcode, signature: ", hashcode, signature)
            if hashcode == signature:
                return echostr
            else:
                print("验证失败")
                return ""
        except Exception as Argument:
            return Argument

  按下 ESC 键,输入:wq,回车保存文件并退出编辑界面。
  然后执行命令python3 main.py 80(如你装的是 Python2 请使用python main.py 80)启动服务。
  再回到微信公众号的服务器配置页面,按下提交。若经多次尝试均验证失败(hashcode 与 signature 不相等),可直接修改 handle.py 中的代码使无论 hashcode 与 signature 是否相等均返回 echostr。
  若无法连接至服务器,请于服务器管理页中配置安全组允许外网可访问 80 端口。