最近几天在给我哥一个超市做一个服务类型的微信公众号,主要的功能是做一个可以外送的网店以及提供快递送货上门等服务。
最终实现之后的所有功能如下:
主要是从三个方面来进行功能设计,就是用户感觉越方便越好。
下面来具体聊一下开发的一些具体内容:
下面代码的运行环境: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