【超详细!超多图!】Python微信公众号开发(1)

 进行微信公众号开发,首先需要准备以下内容:

  • 微信公众号:没有的可以自行去申请,这里不细讲,申请网址:微信公众平台
  • 服务端

本文为Python微信公众号开发的第1篇文章,主要介绍环境准备(主要讲服务端环境)微信公众号鉴权校验流程。

0. 进行微信公众号配置

在进行微信公众号开发之前,需要对微信公众号进行一些配置,先来看一下需要的配置项:

(1)点击公众号后台页面中的“设置与开发” --> 基本配置

(2)在右侧“基本配置”页面,你可以看到开发者ID(AppID),启用开发者密码(AppSecret)。开发者密码需要自己记录下,平台不会记录也不会再次展示给你,如果忘了,需要点"重置"再次获取。

(3)下方服务器配置,点击“修改配置”,进入以下界面,需要填写的信息:

  • URL:服务器地址,域名或公网ip
  • Token:自己随便定
  • EncodingAESKey:点击右侧“随机生成”按钮即可
  • 消息加解密方式:暂时使用默认“明文模式”即可

可以看到,微信公众要开发需要我们准备一个服务器URL。我上面将URL填写标红了,这是配置中最容易踩坑的一步,我在这里被坑了一天。。。几度想要放弃。接下来我用我血和泪的教训帮你避坑。

1. 准备服务器

1.1 服务器的作用

在准备服务器前,我们先来搞懂这里的服务器是用来干什么的。答案是用来接收微信消息和事件

在上面服务器配置添加服务器的URL,然后在点击"提交"按钮后,微信服务器将发送GET请求到填写的服务器URL上,GET请求携带四个参数:

参数描述
signature微信加密签名,signature结合了你在上面填写的自定义的Token参数和请求中的timestamp参数、nonce参数。
timestamp时间戳
nonce随机数
echostr随机字符串

开发者接收到这四个参数之后,根据【一定的规则】生成一个signature,跟微信服务器发过来的signature进行对比,一致则说明此次GET请求来自微信服务器,原样返回echostr参数内容,接入生效,成为开发者成功,否则接入失败。

这个【一定的规则】如下:

  1. 将token、timestamp、nonce三个参数进行字典序排序
  2. 将三个参数字符串拼接成一个字符串进行sha1加密
  3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

让我们先把开发者接收到参数后进行校验的代码写出来,后面在服务端使用(记得在上面配置点“提交”前,先在服务器上将下面代码运行起来!):

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

from flask import Flask, request
import hashlib

app = Flask(__name__)

@app.route('/')
def index():
    # 设置token,开发者配置中心使用
    token = '你配置的自定义Token'    # <------ 修改这里

    # 获取微信服务器发送过来的参数
    data = request.args
    signature = data.get('signature')
    timestamp = data.get('timestamp')
    nonce = data.get('nonce')
    echostr = data.get('echostr')

    # 对参数进行字典排序,拼接字符串
    temp = [timestamp, nonce, token]
    temp.sort()
    temp = ''.join(temp)

    # 加密
    if (hashlib.sha1(temp.encode('utf8')).hexdigest() == signature):
        return echostr
    else:
        return 'error', 403

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80, debug=True) # <----- 这里指定80端口,不要指定其它

1.2 服务器选择

上面写了公众号服务器配置URL的要求:域名 或者 公网ip

1.2.1 使用本地机器

刚开始我是想用本地环境来作为服务器的,这样直接在本地写代码就可以了。但是问题来了,本地IP是私网IP,无法被公众平台访问到。如果URL中填入本地的IP地址,点“提交”后会一直报错“系统发生错误,请稍后重试”。

本地运行上面的校验代码后是这样的:

将运行的本地ip地址填入服务器URL,点“提交”,报错:

这个错误的原因一般是微信公众号访问不到服务器,或者服务器内部发生错误。一般服务器内部发生错误,会在服务器终端中报错误,类似如下:

如果你的服务器终端什么都没打印,那就是微信服务器的请求无法访问到你的服务器上。

那么,如何将本地机器作为服务器呢?

可以使用一些工具进行内网穿透,将本地的IP暴露到公网中供外部访问,例如ngrok或者cpolar工具等。因本人内网安全策略不允许内网穿透,遂放弃。如果你想用此方法,可以参考以下博文:

用Natapp(ngrok)进行微信本地开发调试 - NATAPP-内网穿透 基于ngrok的国内高速内网映射工具 icon-default.png?t=N7T8https://natapp.cn/article/wechat_local_debug

微信公众号本地开发调试 - 无公网IP,内网穿透_51CTO博客_本地微信公众号运营icon-default.png?t=N7T8https://blog.51cto.com/u_15565852/6643787

1.2.2 使用微信云开发

在微信官方文档中,提到了“小程序云开发”,可以共享开发环境给公众号,这种方式无需额外的服务器,并且用这个方式对接微信公众号,直接省去了核对token的环境,无需以上自己写的校验代码了

1开启公众号开发者模式 | 微信开放文档微信开发者平台文档icon-default.png?t=N7T8https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Getting_Started_Guide.html可惜的是,本人研究半天,没研究明白怎么用,网上教程也比较少...... 暂时搁置,后续再研究下。你如果感兴趣,欢迎指教,感激不尽!

1.2.3 使用云服务器

网络上现有资料绝大多数使用这种方式进行开发。你可以自己去申请一台云服务器,例如阿里云、百度云、华为云、腾讯云。

这种方式的缺点就是:需要花钱。但好在,一般这些大公司的云服务器,都有秒杀活动或试用活动,如果只是用来学习和试验,白嫖一个月的试用期也是可以的......

我这里就白嫖了腾讯云的一个云服务器。你可以去注册一个账号试试,新用户都可以免费试用,需要完成个人实名认证。

腾讯云 产业智变·云启未来 - 腾讯腾讯云(tencent cloud)为数百万的企业和开发者提供安全稳定的云计算服务,涵盖云服务器、云数据库、云存储、视频与CDN、域名注册等全方位云服务和各行业解决方案。icon-default.png?t=N7T8https://cloud.tencent.com/

1.2.3.1 申请云服务器

(1)打开上面腾讯云链接,选择“免费试用”板块

(2)选择一款云服务器,点“立即试用”

(3)立即试用后会让你选择安装的镜像,这里选择“宝塔Linux”,操作简单

1.2.3.2 云服务器配置

(1)进入自己的腾讯云后台,可以看到自己刚才申请的云服务器

(2)点击云服务器进入后台管理页面,“重置密码”,这个密码是后面你命令行等远程登录时候的密码。

(3)防火墙设置:“页面最上面” --> “防火墙” --> “添加规则” --> “端口号:8888” --> 确定

(4)获取宝塔面板的管理员用户名和密码:“页面最上面” --> “应用管理” --> “先复制命令” --> “登录”

(5)点击登录后你会看到用户名和密码,以及外部链接,浏览器打开外部链接,输入用户名和密码,进入宝塔界面

(6)进入后是这样的。如果没有注册过宝塔账号,需要先注册个账号,登录宝塔网页。然后再次打开上面的“外网面板地址”,就可以看到下面的界面了。

1.2.3.3 配置Python环境 - CentOS Anaconda

具体步骤可以参考下列文章,比较简单:

CentOS安装/卸载Anaconda(图文详解)-腾讯云开发者社区-腾讯云众所周知的原因,从官网下载Anaconda非常慢,因此为了加速下载,这里我们采取清华源下载。icon-default.png?t=N7T8https://cloud.tencent.com/developer/article/2065512

1.2.3.4 配置远程开发环境 - VSCode

具体步骤请参见我的上一篇文章:

【新人必会】远程开发可视化 - VSCode篇-CSDN博客文章浏览阅读108次,点赞3次,收藏2次。让远程开发可视化,不再只是面对黑洞洞的中断命令行窗口和vimhttps://blog.csdn.net/Attitude93/article/details/135368358?spm=1001.2014.3001.5502

1.2.3.5 将校验代码写到服务端,并运行

使用远程VSCode开发的好处:

  • 可视化开发,界面美观,开发感受更好
  • 可以断点和Debug !

至此,服务器终于配好了,可以接收来自微信服务器的消息了。

2. 配置提交

回到微信公众号配置界面,点“提交”。如果不出意外,提交成功!

3. 一些坑

如果你完全按我以上的文档走下来,应该已经成功了。下面我只是列出我踩的一些坑:

(1)Token验证错误:

  • 校验代码中的Token和微信公众号配置中的Token不一致
  • python3需要修改代码,不能直接使用官方的代码,官方的是python2,直接使用本文中的代码即可解决

(2)本文代码需要提前安装的一些python包

pip install web.py
pip install flask
pip install flask_cors

(3)AttributeError: 'ThreadedDict' object has no attribute 'env'

  • 直接使用本文中的代码即可解决

从今天开始,持续学习,开始搞事情。踩坑不易,欢迎关注我,围观我!

### 回答1: 可以使用Python开发微信公众号,常用的Python库包括itchat、wechatpy、wxpy等。这些库可以帮助开发者实现微信公众号的功能,例如自动回复、消息推送、菜单设置等。 其中,itchat是一个非常流行的Python库,提供了微信个人号和公众号的API,可以通过Python代码来实现微信的自动化操作。而wechatpy则是一个专门针对微信公众号Python库,支持高级接口和企业微信接口,可以方便地进行公众号开发。 wxpy则是一个基于itchat的Python库,可以快速地实现微信机器人的开发,具有良好的扩展性和定制性。通过wxpy,开发者可以轻松地实现微信自动回复、消息推送和群聊机器人等功能。 总之,使用Python开发微信公众号可以大大提高开发效率,使得开发者可以更加专注于业务逻辑的实现。 ### 回答2: Python 微信公众号是一个使用Python编程语言开发微信服务平台。它提供了丰富的功能和工具,可以帮助开发者创建和管理自己的微信公众号。 首先,Python 微信公众号可以实现接收和发送消息的功能。开发者可以通过编写Python代码来处理用户发送的文本、片、音频等消息,并根据需要进行相应的回复。这为开发者提供了与用户实时互动的机会,可以更好地满足用户的需求。 其次,Python 微信公众号还支持自定义菜单的创建和管理。开发者可以通过简单的配置文件或代码来创建自己的菜单,包括一级菜单和二级菜单。这样用户在关注公众号后,就可以通过菜单快速访问所需的功能,提高用户的使用体验。 此外,Python 微信公众号还可以实现素材管理的功能。开发者可以上传和管理素材,包括文消息、片、视频等,方便随时更新公众号的内容。通过这个功能,开发者可以灵活地运营公众号,提供更有趣和有用的内容。 最后值得一提的是,Python 微信公众号还支持数据统计和分析功能。开发者可以获取公众号的用户数量、关注和取消关注的动态等信息,并可以通过分析工具进行数据分析,了解用户的兴趣和行为习惯,从而更好地为用户提供个性化的服务。 综上所述,Python 微信公众号是一个强大的工具,可以帮助开发者轻松创建和管理自己的微信公众号,提供更好的用户体验和优质的服务。无论是个人开发者还是企业,都可以通过Python 微信公众号实现自己的创业梦想或运营需求。 ### 回答3: Python 微信公众号是基于Python开发的一个平台,可以通过微信公众号进行各种与Python相关的操作和交流。在这个公众号中,用户可以学习Python语言的基础知识、进阶技巧以及实际应用。公众号会提供Python编程入门教程, 提供一些编程示例和案例,帮助用户更好地理解和掌握Python的使用。 公众号的功能还包括推送最新的Python技术热点和行业动态,让用户了解Python在各个领域的应用和发展趋势。同时,公众号还会分享一些Python编程的实践经验和技巧,帮助用户解决实际应用中遇到的问题。 此外,Python 微信公众号还会定期举办一些线上线下的活动,如Python编程比赛、技术分享会等,旨在促进Python开发者之间的交流和学习。 总体来说,Python微信公众号是一个面向Python开发者和爱好者的平台,通过这个公众号,用户可以获取到Python语言相关的最新资讯、学习资源和社区互动,提升自己的编程能力和技术水平。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

同学小张

如果觉得有帮助,欢迎给我鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值