python_flask微信公众号开发-入门

微信公众号

1.微信公众号的开发有两种模式,一种是自带编辑模式,在官网上可以进行简单的操作,自动回复以及自定义菜单等功能。第二种是开发者模式,这种模式需要有编程基础,优势是可以实现复杂的应用场景。因为编辑模式和开发者模式不能同时使用,所以大家需要根据自身的需求合理选择。这篇文章实现公众号关键词回复功能。

python_flask微信公众号开发-入门_第1张图片

开发环境说明

我的开发环境:
ubuntu+python3.7+flask+wechatpy(python针对wechat消息的轮子)
微信公众号开发前一定要参考微信的开发文档https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Getting_Started_Guide.html,官方文档里面也是有python开发例子的。官方环境是:以web.py网络框+python+腾讯云服务器为例介绍,具体请访问官方链接。
开发前需要一个服务器部署你的代码以及跟腾讯服务器通信。
用户与公众号之间的交互是通过腾讯服务器传输的,为了让腾讯服务器找到我们的公众号,公众号的代码一定要有一个服务器来托管。

python_flask微信公众号开发-入门_第2张图片

开发前工作

1.有一个公众号,如果没有请先在官方上申请。
2.有一个服务器存放代码,如果没有云服务器可以使用新浪免费的云服务器SAE或者其他可以把本地主机设置成可访问的软件。
3.公众号设置开启开发者模式,登录微信平台后,找到基础配置,里面有公众号的开发者ID以及服务器配置,服务器配置需要填写服务器的URL,这里填写你服务器的公网地址或者域名,先不用提交,因为这个时候你服务器还不能被访问,也无法提交成功。因为这里的信息之后会在代码中用到,所以先写在这里。

python_flask微信公众号开发-入门_第3张图片

python_flask微信公众号开发-入门_第4张图片

代码

代码如下,如果运行时发行没有相关包,请pip install 相关包。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from flask import Flask,request, redirect, url_for
import logging
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
from wechatpy import parse_message
from wechatpy.replies import TextReply

token = "mytoken"

records = []
MAXLEN = 10
app = Flask(__name__)

# 微信消息接口
@app.route('/',methods=["POST","GET"])
def main():
    logging.debug('进入主页面')
    if(len(request.args)<2):
        return redirect(url_for('index'))
    try:
        signature = request.args.get("signature", "")
        timestamp = request.args.get("timestamp", "")
        nonce = request.args.get("nonce", "")
        echostr = request.args.get("echostr", "")
        # echostr是微信用来验证服务器的参数,需原样返回
        if echostr:
            try:
                print('正在验证服务器签名')
                check_signature(token, signature, timestamp, nonce)
                print('验证签名成功')
                return echostr
            except InvalidSignatureException as e:
                print('检查签名出错: '.format(e))
                return 'Check Error'
        # 也可以通过POST与GET来区别
        # 不是在进行服务器验证,而是正常提交用户数据
        print('开始处理用户消息')
        result = handlemsg(request.data)
        xml = result[0]
        return xml
    # 处理异常情况或忽略
    except Exception as e:
        print("exception")

def txtreply(msg,txt):
    reply = TextReply(content=txt, message=msg)
    xml = reply.render()
    return xml

def handlemsg(data):
    msg = parse_message(data)
    print(msg)
    content = msg.content
    print(content)
    xml = txtreply(msg, content)
    return [xml]


@app.route('/index',methods=["GET"])
def index():
    print('GET访问')
    return 'The index page'

if __name__ == '__main__':
    app.run(host='0.0.0.0',debug=True,port=80)

运行+调试

1.检测一下服务器是否能正常访问
这里我们需要先运行这段代码,先让服务器运行起来,变成可访问的状态。运行后,控制台出如下,这个时候如果没有报错,在浏览器上输入服务器的域名或者公网地址,可以看到返回The index page的页面,控制台也会输入返回200的信息。一定要先保证运行后能正常访问。

python_flask微信公众号开发-入门_第5张图片

python_flask微信公众号开发-入门_第6张图片

如果这里有问题,则可能的解决方法
1.权限问题,请用sudo python wechat.py命令。因为这里运行在80端口,80端口是一个需要高权限才能运行的。为什么这里是80端口,因为微信公众号的服务器端的设置只接受80和443,443端口我没尝试不知道是不是可以不用sudo权限。

python_flask微信公众号开发-入门_第7张图片

2.如果是云服务器,也有可能是80端口没有开通,可以在服务器的安全组里面设置开通80端口。
3.如果提示端口地址已被占用,请用 sudo netstat -tlnp|grep 80,查看占用的pid,然后kill掉这个id,sudo kill -9 11600

在这里插入图片描述

2.连接微信服务器
在微信公众号平台上的基础配置页面,启用服务器,我这里因为已启用所以是停用。在url中输入服务器域名或者公网地址,**token填写与代码中保持一致。**如果不能提交成功,则查看token填写是否一致。

python_flask微信公众号开发-入门_第8张图片

python_flask微信公众号开发-入门_第9张图片

3.验证
可以用手机给公众号发一个文本消息,公众号会回复一样的文本信息。这里只是简单的实现用户输入什么返回什么,后续可以添加更多功能。

python_flask微信公众号开发-入门_第10张图片

你可能感兴趣的:(微信公众号开发,python,linux)