python 公众号开发框架_基于werobot框架的微信公众号开发

最近几天在给我哥一个超市做一个服务类型的微信公众号,主要的功能是做一个可以外送的网店以及提供快递送货上门等服务。

最终实现之后的所有功能如下:

主要是从三个方面来进行功能设计,就是用户感觉越方便越好。

下面来具体聊一下开发的一些具体内容:

下面代码的运行环境:Ubuntu+python3.7

微信公众号后台配置

我使用的主要是python+werobot框架进行开发,同时还有考虑设计到python自带的cgihttpserver或者是apache服务器。

首先,开发一个微信公众号,你必须要有一个微信公众号,微信公众号中的订阅号不能提供高级接口,如果想要使用高级接口,必须要进行微信认证,我是直接申请的服务号。因为刚搭建的时候,我的域名还没有弄好,所以直接使用的是服务器的ip地址作为,后台url接口。

有关于域名解析的内容,我自己也还在学习中,先放在这里。 我们现在先只用一台服务器,运行一个werobot机器人。在微信公众号后台将token,url,appid,appsecret等都配置记录好了之后,进入到下一步。

服务器的配置

(1) 在腾讯云或者阿里云购买一个服务器,如果你是学生,只需10元即可。首先在不考虑任何功能实现的情况下,我们先将werobot机器人运行起来。

在服务器中安装werobot,推荐使用pip命令,十分简单方便:

1pip3 install werobot

一条命令安装完成。

根据werobot官方文档,我们可以写一个最基本的脚本,让服务器运行起来,如下

使用vim写一个robot.py脚本:

1from werobot import WeRoBot

robot=WeRoBot(token="****")

#编写一个只处理用户文本消息的函数

@robot.text

def hander(message):

return "欢迎,关注我的微信公众号"

#让机器人运行

robot["HOST"]="0.0.0.0"

robot["PORT"]=80

robot.run()

我想详细这段代码,希望可以帮助到大家,达到举一反三的效果。

实际上,werobot处理用户发送过来的不同消息,都是使用修饰器@来进行区分和实现的。如果和其他框架相对应来讲的话,在django中,与这个类似的就是对于不同url的视图函数。

从文档中可以得知,werobot的修饰器分为两种类型,一种是meaage(用户发送的各种类型的消息),二是event(对应各种点击型事件)。

实际上,我们需要注意的是对于所有的被message类型修饰器修饰的函数,他们都具有一些共同的属性:

也就是说对于任意的函数,他里面的message都包括这些参数,当然,对于不同的message也包含有一些不同的参数。

event类型同理。

之后使用命令:

1python3 robot.py

机器人即可开始运行。(这里就不妨示意图了)。

(2)关于自定义菜单与消息回复类型

开发一个具有完备功能的公众号,自定义菜单肯定是不能缺少的。在werobot文档中,有关于自定义菜单的具体介绍:

首先,如果需要使用自定义菜单,必须先要获得appid和appsecret:

这里我想提醒一下,在开发之前还需要将你的服务器ip地址加入ip白名单,只有这样,服务器才能获得access_token。

代码如下:

1from werobot import WeRoBot

robot=WoRoBot(token="****")

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

robot.config["APP_AECRET"]=******

client=robot.client

client.create_menu({

"button":[

{

"type":"click",

"name":"今日歌曲",

"key":"V1001_TODAY_MUSIC"

},

{

"type":"click",

"name":"歌手简介",

"key":"V1001_TODAY_SINGER"

},

{

"name":"菜单",

"sub_button":[

{

"type":"view",

"name":"搜索",

"url":"http://www.soso.com/"

},

{

"type":"view",

"name":"视频",

"url":"http://v.qq.com/"

},

{

"type":"click",

"name":"赞一下我们",

"key":"V1001_GOOD"

}

]

}

]}

创建一个自定义菜单,使用的是client的create_menu(menu_data)函数,函数中的参数是是一个字典类型,按照一定的格式即可。

对于view类型的button,只需要给一个合理的url即可,但是对于click类型的button,则需要写一个对应key值得视图函数,结构类似下述代码(处理一个key值为abc得button):

@robot.click

def hander(message):

if message.key=="abc":

return "Hello,World!"

关于消息的回复类型

当被修饰的函数返回的是一个字符串的时候,werobot会自动帮你把它处理成文本消息返还给用户, 这个很简单,构建一个TextReply:

那么假设用户点击我的菜单某个button,我想给他回复一个图片消息呢?

从文档中可以得知,回复图片消息,需要图片得media_id,而media_id怎样获取呢?

代码如下:

client.upload_permanent_media("image",files)

其中files是文件类型,先把图片上传到服务器上面,然后直接使用open打开即可,注意是“rb”,用二进制的方式打开。

之后会返还给你一个json数据包,其中就包括所需要的media_id。

之后我们就要用到client的replies库,具体代码如下:

from werobot.replies import ImageReply

robot = WeRoBot(token='*****')

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

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

client = robot.client

media_id=client.upload_permanent_media("image",open(r"C:\Users\13016\Desktop\1.png","rb"))["media_id"]

@robot.click

def abort(message):

if message.key == "abc":

reply=ImageReply(message=message,media_id=media_id)

return reply

这样即可实现回复图片消息。

我的博客:www.lovexu.xyz

我的知乎:我爱小徐子

更多优质内容请关注微信公众号:生物信息与python

你可能感兴趣的:(python,公众号开发框架)