您所在的位置: 首页>关于我们>公司动态>建站知识>你也可以自己尝试开发微信公众号

你也可以自己尝试开发微信公众号

发表于:2019-09-11 阅读:6998 关键词: 开发微信公众号

  如果公众号只是用来发文章就太无聊了,人生就在于折腾,比如说给公众号配上关键词回复、或者是机器人。接下来我们就开始折腾吧。

  服务器选择为安装apache的,避免80端口被占用,无法使用nginx的情况。好吧,其实是为了省事~

  第一步,我们要先安装nginx,让ip指向flask的链接端口,安装完成之后,配置nginx.conf ,将80端口用nginx转发到flask服务器端口


listen       80;

server_name  公网ip;

location / {

   # root   html;

   # index index.html index.htm;

   proxy_pass_header Server;

   proxy_redirect off;

   proxy_pass http://127.0.0.1:5000;

}


  第二步,安装flask pip3 install flask ,下面flask文件代码 用于令牌token的校验


# -*- coding:utf-8 -*-

from flask import Flask

from flask import request


import hashlib


app = Flask(__name__)

app.debug = True


@app.route('/mp',methods=['GET','POST'])

def wechat():


   if request.method == 'GET':

       #这里改写你在微信公众平台里输入的token

       token = 'yourtoken'

       #获取输入参数

       data = request.args

       signature = data.get('signature','')

       timestamp = data.get('timestamp','')

       nonce = data.get('nonce','')

       echostr = data.get('echostr','')

       #字典排序

       list = [token, timestamp, nonce]

       list.sort()


       s = list[0] + list[1] + list[2]

       #sha1加密算法        

       hascode = hashlib.sha1(s.encode('utf-8')).hexdigest()

       #如果是来自微信的请求,则回复echostr

       if hascode == signature:

           return echostr

       else:

           return ""



if __name__ == '__main__':

   app.run()


  第三步,先看下微信公众号后台是咋样设置的,

  ① 服务器地址 --> http://公网ip/mp ,与flask路由设置一致

  ② token --> 自己设定,与flask中发送的token一致

  ③ 消息加密 --> 随机生成

  如果你对微信token的校验机制有兴趣,可以查一下微信公众号文档


微信公众号文档


  第四步点击提交,如果显示成功则配置完成了 flask服务器就可以关闭了,到此即完成了开头难的部分,接下来就是使用werobot这个框架了,使用 pip install werobot 进行安装

  微信公众号内发送信息,所有的消息自动回复 Hello World!


import werobot


robot = werobot.WeRoBot(token='namejaho')


@robot.handler

def echo(message):

   return 'Hello World!'


robot.config['HOST'] = '0.0.0.0'

robot.config['PORT'] = 80


robot.run()


  微信公众号已经接入服务器,现在想通过 werobot 实现公众号的控制,如添加回复、关键词回复、自定义菜单(坑)等

  需求已经有了,现在想想如何实现,werobot框架的使用很简单,几行代码就可以实现自动回复功能,通过查阅文档可知,自定义菜单代码也不多,下面对其进行简单封装


from werobot import WeRoBot


robot = WeRoBot()

robot.config["APP_ID"] = "APP_ID"

robot.config["APP_SECRET"] = "APP_SECRET"

class Wechat(object):


    def __init__(self):

        #self.robot = WeRoBot(token='namejaho')

        self.client = robot.client


    def create_menu(self,menu,key):

        self.client.create_menu({

            "button":[{

            "type": "click",

            "name": menu,

            "key": key

          }]

        })


    @robot.key_click("author")

    def handler(msg):

        return '欢迎添加我微信:***'


    def run(self):

        self.create_menu('联系我','author')

        robot.run()


wechat = Wechat()

wechat.run()


  接下来跑下代码,不出意外的话,你也会报 48001: api unauthorized hint 这个错误,这是因为微信公众号有个接口权限,对个人主体账号限制了很多,如果想开通权限,只能通过企业号或者服务号了

  自定义菜单只能以后再想办法,接下来是关注自动回复与关键词回复,这些操作可以通过 handler 解决


# 关注自动回复

import werobot


robot = werobot.WeRoBot(token='token')


@robot.subscribe

def subscribe(message):

    return 'Hello My Friend!'


robot.config['HOST'] = '0.0.0.0'

robot.config['PORT'] = 80

robot.run()


  PS:只要你启用了服务器配置,你公众号就不能使用原来的自定义菜单和自动回复了,两者是互斥的。