首页 网站首页 软件开发 公众号开发 查看内容

我的公众号开发(第一步)简单功能实现

私域运营网 2022-8-18 20:24 9113人围观 公众号开发


作者:JiawuZhang
出品:JiawuLab(ID:jiawulab)

尝试记录系列是JiawuLab原创栏目,经过实在项目标操纵,记录全部尝试进程。
旨在经过一步步进程,无根本的朋友都能间接上手。

大师好,我是JiawuZhang,本次尝试记录的项目是--微信公众号开辟。

挑选这个项目标缘由有二:
1、微信公众号还是大部分人(包括我自己)获得信息的一个重要渠道;
2、恰好我手上有个公众号;

好了,闲话不多说,间接进入主题。

结果演示

先放出尝试进程中结果图,闪烁退场:




消息答复演示



关注答复演示



关键字答复演示

这么有本性的答复能否是很好玩,不再是牢固的几个答复,具体的实现方式请往下看。

您也可以关注公众号:JiawuLab,来体验更多功用。

前期预备工作

一、预备一个微信公众号,我的是小我定阅号,未认证。(ps:小我公众号,不能认证)

认不认证都没关系,只是接口权限几多的题目,未认证的接口已经能满足此次尝试目标。

(具体权限可见-公众号背景-开辟-接口权限)



二、预备一台办事器,现在供给云办事器的厂家很多,大师可自行预备。

倡议挑选自力ip的办事器,(同享ip会廉价些,可是不保举,具体缘由前面会说到。)

我挑选的是某厂的1核2G1M(1核cpu,2G内存,1M带宽)的自力ip办事器,具体品牌就不说了,怕有广告怀疑。

这个设置对付常规公众号充足了,可是假如你的公众号的流量出格大,需要按照自己的情况增加设置。

三、办事器上安装python情况,我的情况是python3.7.4, Centos7.5。

假如你不清楚怎样安装,可关注公众号:JiawuLab,给我留言,这里不展开。

开辟偏向

微信公众号开辟,官方的技术文档,写的很具体,也有典范参照。

别的,github上获得3000多星的WeRoBot,也是一个很受接待的微信公众号开辟框架,有爱好的朋友可自行领会。

上面提到的相关资本链接,请到文末获得

我们此次以官方开辟文档来停止尝试

尝试起头

首先,进入官方开辟文档-入门指引,以下图:



我们只用关注红框中的内容,这里是python2.7版本,办事器上是python3.7.4版本。

所今前面需要对该指引所提到的内容停止版本转化,我会在前面提到若何转,不用担忧。

然后需要安装web.py,这是一个python的轻型web开辟框架,我们只来用,不用出格进修,如需自行百度。

现在,在办事器中停止安装web.py,很简单,间接用pip安装就好

# 安装web.py
pip(3) install web.py

这里需要留意两点:
1、centos自带python2.7,假如安装python3版本没有改软链接,需要用pip3,检查方式,间接输入python -V,看版本
2、web.py版本,pip安装的间接是0.40正式版,支持python3,不用像网上说的那种指定版本

安装无缺,我们测试一下,拷贝下面的代码,保存为main.py文件

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

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

class Handle(object):
def GET(self):
return "pika pika pikaqiu!"

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

然后找到当前文件地点目录输入python(3) main.py 80,办事器启动成功,当地翻开网页,输入http://外网ip:80/wx,显现以下



说明设置没有题目,这里记得一定要办事器将80端口放行。到这里,我们便可以正式停止公众号的设置及操纵了。

微信公众号设置

翻开微信公众号背景,找到-开辟-根基设置-办事器设置,停止以下设置:



ps:这里先依照明文形式停止,前面会改成平安形式,进程城市触及的。点击提交,出现报错,说Token考证失利,公然和文档中说的一样,出现毛病,先不管它。

继续看文档前面的内容,本来是办事器没有停止设置,所以报错,我们依照文档前面的来。

先将之前的main.py文件改成以下:(留意备注)

# -*- coding: utf-8 -*-
# filename: main.py
import web
from handle import Handle # 将Handle类放进handle.py文件中,再导入进来

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

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

然后新建handle.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 "pika pika pikaqiu!"
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
echostr = data.echostr
token = "xxxx" #请依照公众平台官网\根基设置中信息填写

list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
# map函数在python2和3的功用分歧,需要转化
# map(sha1.update, list)
sha1.update(list[0].encode('utf-8'))
sha1.update(list[1].encode('utf-8'))
sha1.update(list[2].encode('utf-8'))
hashcode = sha1.hexdigest()
# 这里print转为python3
print("handle/GET func: hashcode, signature: ", hashcode, signature)
if hashcode == signature:
return echostr
else:
return ""
except Exception as Argument: # 这里加as 转为python3
return Argument

备注中已提到python3转化的位置, 然后在token中填入微信公众号中对应的token。

保存后输入python(3) main.py 80,办事器启动。

再次回到微信公众号的设置,点击提交,设置成功,显现以下:



现在微信公众号就设置好了,买通办事器与微信公众号这一步很关键,一切后续功用都是在此根本上开辟的。

答复功用实现

到这里,指引列出两个示例,别离是你说我学、图尚来往,展现笔墨答复和图片答复功用。

别的还展现了获得accessToken、获得姑且素材、获得永久素材、自界说菜单等四个功用演示。

现在按照自己的需求,以及获得接口权限来决议挑选哪些功用,比如我没有自界说菜单权限,就不用理它。

而图片答复需要用光姑且素材或是永久素材功用,来挪用分歧图片,这些都可按照现实需求来选用。

我需要用到的是笔墨答复,所以这里实现笔墨答复演示

官方文档中关于笔墨答复的机制,以及留意事项很具体,大师先仔细研讨一下,比如消息体收到和答复的区分,消息答复流程等。

这里只做一个关键点的提醒,就是答复success题目
1、假如办事器没法保证在五秒内处置答复,则必须答复“success”大概“”(空串),否则微信背景会倡议三次重试。
2、三次重试后,照旧没有实时答复任何内容,系统自动在粉丝会话界面出现毛病提醒“该公众号临时没法供给办事,请稍后再试”。

这是什么意义呢?是指需要保证你的功用代码,在办事器收到消息后,5秒内做出反应,这也是为什么我不保举同享IP办事器的原因。

在功用代码中,我们能够需要做一些递归运算,数据库的查询等花时候的工作,而同享IP办事器会遭到其他网站的很大影响。

到时能够你写了很利害的功用,由于没法在5秒内实现,最初给读者的展现,就是无尽的“该公众号临时没法供给办事,请稍后再试”



好了,码代码的时候到了,这里间接将示例中的三段代码保存即可。

别离是接管消息代码、答复消息代码、handle类的改写,以下:

接管消息代码,保存为receive.py

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

import xml.etree.ElementTree as ET


def parse_xml(web_data):
if len(web_data) == 0:
return None
xmlData = ET.fromstring(web_data)
msg_type = xmlData.find('MsgType').text
if msg_type == 'text':
return TextMsg(xmlData)
elif msg_type == 'image':
return ImageMsg(xmlData)


class Msg(object):
def __init__(self, xmlData):
self.ToUserName = xmlData.find('ToUserName').text
self.FromUserName = xmlData.find('FromUserName').text
self.CreateTime = xmlData.find('CreateTime').text
self.MsgType = xmlData.find('MsgType').text
self.MsgId = xmlData.find('MsgId').text


class TextMsg(Msg):
def __init__(self, xmlData):
Msg.__init__(self, xmlData)
self.Content = xmlData.find('Content').text.encode("utf-8")


class ImageMsg(Msg):
def __init__(self, xmlData):
Msg.__init__(self, xmlData)
self.PicUrl = xmlData.find('PicUrl').text
self.MediaId = xmlData.find('MediaId').text

答复消息代码,保存为reply.py

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

import time


class Msg(object):
def __init__(self):
pass

def send(self):
return "success"


class TextMsg(Msg):
def __init__(self, toUserName, fromUserName, content):
self.__dict = dict()
self.__dict['ToUserName'] = toUserName
self.__dict['FromUserName'] = fromUserName
self.__dict['CreateTime'] = int(time.time())
self.__dict['Content'] = content

def send(self):
XmlForm = """
<xml>
<ToUserName><![CDATA[{ToUserName}]]></ToUserName>
<FromUserName><![CDATA[{FromUserName}]]></FromUserName>
<CreateTime>{CreateTime}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{Content}]]></Content>
</xml>
"""
return XmlForm.format(**self.__dict)


class ImageMsg(Msg):
def __init__(self, toUserName, fromUserName, mediaId):
self.__dict = dict()
self.__dict['ToUserName'] = toUserName
self.__dict['FromUserName'] = fromUserName
self.__dict['CreateTime'] = int(time.time())
self.__dict['MediaId'] = mediaId

def send(self):
XmlForm = """
<xml>
<ToUserName><![CDATA[{ToUserName}]]></ToUserName>
<FromUserName><![CDATA[{FromUserName}]]></FromUserName>
<CreateTime>{CreateTime}</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[{MediaId}]]></MediaId>
</Image>
</xml>
"""
return XmlForm.format(**self.__dict)

上面两个文件只用保存便可以,不外仔细的你会发现,里面除了笔墨,还有图片功用,这个前面再说。

有了接管和答复文件后,我们就要在handle.py文件中对Handle类停止改写,以下:

# filename: handle.py

import hashlib
import reply # 导入答复文件
import receive # 导入接收文件
import web


class Handle(object):
def GET(self):
try:
data = web.input()
if len(data) == 0:
return "pika pika pikaqu!"
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
echostr = data.echostr
token = 'XXXX' # 请依照公众平台官网\根基设置中信息填写

list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
sha1.update(list[0].encode('utf-8'))
sha1.update(list[1].encode('utf-8'))
sha1.update(list[2].encode('utf-8'))
hashcode = sha1.hexdigest()
print("handle/GET func: hashcode, signature: ", hashcode, signature)
if hashcode == signature:
return echostr
else:
return ""
except Exception as Argument:
return Argument

def POST(self): # 新增加的POST函数
try:
webData = web.data()
print("Handle Post webdata is ", webData)
# 背景打日志
recMsg = receive.parse_xml(webData)
if isinstance(recMsg, receive.Msg) and recMsg.MsgType == 'text':
toUser = recMsg.FromUserName
fromUser = recMsg.ToUserName
content = "test" # 这里是答复内容
replyMsg = reply.TextMsg(toUser, fromUser, content)
return replyMsg.send()
else:
print("临时不处置")
return "success"
except Exception as Argment:
return Argment

现在代码都写好了,保存后输入python(3) main.py 80,办事器启动。然后便可以停止测试了。

正幸亏测试时代有读者答复,下面是截图:



初步test成功,不外还没有到达我们的要求。现在简单的消息答复功用就实现了。

下一步预告

经过一番试探,我们买通了办事器与微信公众号,也简单实现了消息答复功用,虽然还不是那末理想。

别的在测试中发现,本来设备的自界说菜单不见了关注也没有答复了答复语音达不到结果。。。

下一步,我们将停止以下尝试,对接智能机械人,让答复更有本性关注与关键字答复语音也能很好的答复自界说菜单又出现了等功用。

本期尝试记录到此竣事,感激您的阅读。假如您喜好这期文章,请点赞,支持一下。

您可以关注公众号:JiawuLab,提早体验更多功用,大概给我留言,说说你碰到的题目,我们一路探讨。




文中资本:

1、微信公众号官方文档地址:
https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
2、WeRoBot github地址:
https://github.com/offu/WeRoBot/tree/master/werobot
3、WeRoBot文档地址:
https://werobot.readthedocs.io/zh_CN/latest/

▼▼▼▼▼▼



高端人脉微信群

高端人脉微信群

人脉=钱脉,我们相信天下没有聚不拢的人脉,扫码进群找到你所需的人脉,对接你所需的资源。

商业合作微信

公众号开发合作

本站创始人微信,13年互联网营销经验,擅长引流裂变、商业模式、私域流量,高端人脉资源丰富。

精彩点评

查看全部评论>>

相关推荐

从零开始 Python 微信公众号开发

从零开始 Python 微信公众号开发

前些日子在知乎上看到了一篇文章 Python公众号开发部分代码开源 - 学习编程 - 知乎专

新手如何开通一个属于自己的公众号(教程)

新手如何开通一个属于自己的公众号(教程)

▼纯教程,并没有多少技术含量▼在16年的时候,我就开始弄公众号了,断断续续到现在也

详细教你微信公众号正文页SVG交互开发

详细教你微信公众号正文页SVG交互开发

现在很多公众号都直接在正文页通过SVG交互动画增加文章的阅读交互体验,而不再跳转H5

Windows 11 运行安卓子系统安装教程

Windows 11 运行安卓子系统安装教程

Windows 11在发布初期,微软就画了个大饼,表示将提供WSA,一个可以在PC上运行Android

玩转公众号自定义菜单的6个方法(基础篇+开发篇)

玩转公众号自定义菜单的6个方法(基础篇+开发篇)

​公众号运营系列 NO.3:自定义菜单关键词:公众号菜单怎么设置 公众号自定义菜单 公

基于Spring Boot的注解驱动式公众号极速开发框架FastBootWeixin

基于Spring Boot的注解驱动式公众号极速开发框架FastBootWeixin

本框架基于Spring Boot实现,使用注解完成快速开发,可以快速的完成一个微信公众号,

情侣天气推送(微信公众号)

情侣天气推送(微信公众号)

一、简介最近抖音上面有个很火的天气推送的公众号,可以给自己爱的人进行定时推送。效

如何建立一个微信公众号(个人)

如何建立一个微信公众号(个人)

如何建立一个微信公众号一、定位首先要对公众号有一个定位,比如说美妆、时尚、校园生

Python微信公众号开发—小白篇(一)

Python微信公众号开发—小白篇(一)

本文面向想通过Python学习公众号开发的同学。一站式解决新手开发微信公众号遇到的所有

我的公众号开发(第一步)简单功能实现

我的公众号开发(第一步)简单功能实现

作者:JiawuZhang 出品:JiawuLab(ID:jiawulab) 实验记录系列是JiawuLab原创栏目,

几分钟内上线一个网站,GitHub 又一低代码神器,开源了 ...

几分钟内上线一个网站,GitHub 又一低代码神器,开源了 ...

众所周知,每家公司在发展过程中都需要构建大量的内部系统, 比如运营使用的用户管理

手把手教你快速搭建一个属于自己的微信公众号服务平台

手把手教你快速搭建一个属于自己的微信公众号服务平台

今天给大家分享一下如何快速搭建一个公众号服务平台。基本服务端的搭建1、首先搭建最

只要三分钟,创建一个属于你的微信公众号

只要三分钟,创建一个属于你的微信公众号

最近有许多人在问怎么注册微信公众号,今天我就给大家做一个注册微信公众号的教程。微

会布局的才是运营高手!3200字教会你如何搭建公众号矩阵

会布局的才是运营高手!3200字教会你如何搭建公众号矩阵

编辑导语:如何搭建微信公众号矩阵?首先,你需要了解微信公众号矩阵是什么、建立微信

手把手教你搭建公式识别公众号

手把手教你搭建公式识别公众号

上次弄了个公式识别的公众号,有人问如何实现,今天趁着周末把整个流程讲下。其实我对

微信公众号开发 腾讯云 Python

微信公众号开发 腾讯云 Python

最近申请了个微信公众号,发现其提供的基础功能只有一个——向用户推送图文消息,其他

9个公众号排版编辑网站,有3个是完全免费的!

9个公众号排版编辑网站,有3个是完全免费的!

大家好,我是番喜,今天给大家分享9个自媒体排版编辑网站,这年头谁还没有个公众号鸭

用 Python 进行微信公众号开发

用 Python 进行微信公众号开发

今天看到篇教程,是用python开发微信公众号的,觉得有意思,就敲代码实现了一下,成功

我开发了一款插件,Notion Converter帮你实现Notion一键 ...

我开发了一款插件,Notion Converter帮你实现Notion一键 ...

2023.1.2更新:当前产品已经发布上线你好呀,我是盾宇,我是一名测试开发工程师,最近

JavaScript——记一次微信公众号开发过程

JavaScript——记一次微信公众号开发过程

微信公众号是社交平台上一个不错的选择,构建与读者之间良好的互动,但对于开发者来说

商业洽谈 文章投递 寻求报道
电话咨询: 15924191378
关注微信