python 微信公众号开发[1] 后台服务器端配置与公众号开发配置

article/2025/10/16 19:43:43

更新时间:2020年3月7日

微信公众号开发的硬件必备条件:(1)申请一个公众号 (2)有公网ip的服务器(最好是阿里云,腾讯云等的云服务器)(3)解析到(2)中服务器地址的域名(阿里云,腾讯云购买即可)。

1. 微信公众号申请

个人可申请订阅号,申请教程参考:https://jingyan.baidu.com/article/020278113d07531bcc9ce5a5.html

2. 后台服务器配置

微信公众号只是相当于流量转发,而具体功能的实现需要在后端服务器上去具体实现。而微信公众号开始只支持域名访问(不支持ip直接访问,这也是为什么要域名的原因),只支持80端口(http)或者443端口(https)

2.1 nginx的安装与配置

后端服务器需要有软件提供网页服务器功能,我们采用nginx,比较方便。
安装流程:
(1)安装gcc(使用gcc -v可以查看gcc是否安装):

yum -y install gcc

(2)安装依赖:

yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

(3) 下载nginx

wget http://nginx.org/download/nginx-1.9.9.tar.gz  

(4)解压与安装

tar -zxvf  nginx-1.9.9.tar.gz

解压完成后进入该文件夹

cd nginx-1.9.9

安装,管理员账户下运行:

./configuremakemake install

在浏览器输入域名:www.xxxxx.cn 后:
在这里插入图片描述
(5)nginx配置
因为微信公众号只能利用80端口或者433端口,所以我们可以使用nginx做端口转发,使得服务器得到充分利用。
在nginx.conf文件中(vim /usr/local/nginx/conf/nginx.conf)加入下面代码:

		# hsb_signal_towerlocation /data/hsb_signal_tower {proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Scheme $scheme;proxy_pass http://127.0.0.1:8000;}

这样 访问www.xxxx.cn/data/hsb_signal_tower 就会转发到8000端口,之后在8000端口部属自己的开发服务.

2.2 python安装

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel  libffi-devel 
# 下载文件后执行下面的操作#释放文件:tar -xvzf Python-3.5.1.tgz#进入目录:cd Python-3.5.1/# 添加配置:./configure --prefix=/usr/local/python3# 这里配置自己的安装目录,接下来编译源码:make# 执行安装:make install# 重新建立连接mv /usr/bin/python /usr/bin/python.bakln -s /usr/local/python3/bin/python3 /usr/bin/python#配置yum,因为yum是基于python2的vim /usr/bin/yum把#! /usr/bin/python修改为#! /usr/bin/python2vim /usr/libexec/urlgrabber-ext-down把#! /usr/bin/python 修改为#! /usr/bin/python2# 添加环境量vim .bashrcexport PATH=/usr/local/python3/bin:$PATH# pip3 软连接到pipln -s /usr/local/python3/bin/pip3 /usr/bin/pip

3 公众号配置

这一块儿分两部分,相当于微信公众号与后端服务器的通信验证。微信公众号端有唯一的token,在服务器端验证这个token来完成整个通讯验证工作。token是惟一的,所以一定要保密。

3.1 微信公众号端配置

(1)进入公众号拉到最下面,进入基本配置。
在这里插入图片描述(2)填写信息
在这里插入图片描述(a) url填写域名,一定要与nginx配置中一致
(b)token中自己填写,这是公众号开发的唯一识别符,请牢记。
(c)第三个点随机生成。
填完之后先不要提交,接下来在服务器端构建一个验证服务。

3.2 服务器端构建验证服务

本实例使用flask构建web应用
python代码如下,文件名为:wechat.py.需要修改的是使用自己的token。:

# coding:utf-8
from flask import Flask, request, abort, render_template
import hashlib
import xmltodict
import time
# 用它可以访问http请求地址
import urllib.request as urllib2
import urllib
import json# 微信的token令牌
WECHAT_TOKEN = 'your token'
app = Flask(__name__)@app.route("/data/hsb_signal_tower", methods=["GET", "POST"])
def wechat():"""验证服务器地址的有效性"""# 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:# signature:微信加密, signature结合了开发者填写的token参数和请求中的timestamp参数 nonce参数# timestamp:时间戳(chuo这是拼音)# nonce: 随机数# echostr: 随机字符串# 接收微信服务器发送参数signature = request.args.get("signature")timestamp = request.args.get("timestamp")nonce = request.args.get("nonce")# 校验参数# 校验流程:# 将token、timestamp、nonce三个参数进行字典序排序# 将三个参数字符串拼接成一个字符串进行sha1加密# 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信if not all([signature, timestamp, nonce]):# 抛出400错误abort(400)# 按照微信的流程计算签名li = [WECHAT_TOKEN, timestamp, nonce]# 排序li.sort()# 拼接字符串tmp_str = "".join(li)tmp_str = tmp_str.encode('utf-8')# 进行sha1加密, 得到正确的签名值sign = hashlib.sha1(tmp_str).hexdigest()# 将自己计算的签名值, 与请求的签名参数进行对比, 如果相同, 则证明请求来自微信if signature != sign:# 代表请求不是来自微信# 弹出报错信息, 身份有问题abort(403)else:# 表示是微信发送的请求if request.method == "GET":# 表示第一次接入微信服务器的验证echostr = request.args.get("echostr")# 校验echostrif not echostr:abort(400)return echostrelif request.method == "POST":# 表示微信服务器转发消息过来# 拿去xml的请求数据xml_str = request.data# 当xml_str为空时if not xml_str:abort(400)# 对xml字符串进行解析成字典xml_dict = xmltodict.parse(xml_str)xml_dict = xml_dict.get("xml")# MsgType是消息类型 这里是提取消息类型msg_type = xml_dict.get("MsgType")if msg_type == "text":# 表示发送文本消息# 够造返回值, 经由微信服务器回复给用户的消息内容# 回复消息# ToUsername: (必须传) 接收方账号(收到的OpenID)# FromUserName: (必须传) 开发者微信号# CreateTime: (必须传) 消息创建时间(整形)# MsgType: (必须传) 消息类型# Content: (必须传) 回复消息的内容(换行:在Content中能够换行, 微信客户端就支持换行显示)resp_dict = {"xml":{"ToUserName":xml_dict.get("FromUserName"),"FromUserName":xml_dict.get("ToUserName"),"CreateTime":int(time.time()),"MsgType":"text","Content":xml_dict.get("Content")}}else:resp_dict = {"xml": {"ToUserName": xml_dict.get("FromUserName"),"FromUserName": xml_dict.get("ToUserName"),"CreateTime": int(time.time()),"MsgType": "text","Content": "对不起,不能识别您发的内容!"}}# 将字典转换为xml字符串resp_xml_str = xmltodict.unparse(resp_dict)# 返回消息数据给微信服务器return resp_xml_str
if __name__ == '__main__':app.run(port=8000, debug=True)

以上代码参考大神的博客,原博客使用python2,上面代码适用于python3。再使用命令: python wechat.py 没有报错且出现以下信息则表示没有问题:
在这里插入图片描述
之后在(1)的配置页面点击提交按钮,如果验证失败则会提示验证token失败,此时服务器端会有相应的错误。如果验证成功,则用户可以在公众号中发送信息,公众号会返回发送信息。
希望大家耐心调试。


http://chatgpt.dhexx.cn/article/LsPD7XPK.shtml

相关文章

微信小程序微信服务号开发微信公众平台开发前端开发框架

1、Frozen UI 手Q出品,组件更丰富,视觉舒适度也不错,适合我这种前端较生疏,需要开箱即用的程序员。 推荐度:5星 演示地址:FrozenUI Demo 2、WeUI 官方出品,情怀满满,但是组件不够用。…

微信公众号开发流程指南

微信公众号开发流程指南 一.物料准备二.开发须知0.接入验证1.消息类型概括(MsgType)2.申请服务号的原因为账号类型所支持功能不同,职能不同3.当开启服务器配置后,公众号的原始菜单将会失效, 会以自定义菜单为准4.如下文介绍Api中出现Token字样, 则统一为通过AppId和AppSecret获…

微信公众号开发

文章目录 一、微信公众号简介二、注册/登录微信公众号三、功能介绍1、编辑模式(个人开发者,无需服务器)2、开发模式 四、实战开发1、配置服务器2、模块化 五、获取 access_token1、access_token 是什么?2、获取 access_token 功能…

公众号开发配置,服务号对接第三方服务器配置方法

很多公司企业在注册服务号后,通常需要对接第三方的开发平台,进行一些功能的完善补充。 市面上第三方平台非常之多,但是因微信官方限制,所需要的配置总结下来就这么几点,下面给大家讲解下配置的要点: 一、…

公众号开发

1.本地调试:打开微信开发者工具——》微信开发者工具选项——》更换开发模式——》公众号网页调试 2.使用 http://127.0.0.1:8080 本地调试会 the permission value is offline verifying 解决方法:先在输入框输入 http://demo.open.weixin.qq.com/jssdk,再输入你之…

微信公众号开发(一)服务器及接口的配置

微信公众号开发(一)服务器及接口的配置 关于微信公众号中的订阅号和服务的区别这里不多加讨论,网上有很多资源可以搜到,这里直接进入正题,如果是个人开发者,这里建议使用测试号进行开发学习,测…

微信公众号开发相关流程及功能介绍

1. 开发前准备 1.1 注册微信公众平台账号 进入的网址:https://mp.weixin.qq.com。 测试号(网址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?tsandbox/login),用户在开发之前可以通过测试号快速测试开发&#…

微信小程序开发 公众号/服务号 方法

微信小程序嵌入公众号/服务号方法 1.公众号开发方法 先去微信公众平台开启公众号选项 然后在页面中加入组件 <official-account bindload"bindload" class"official-account"></official-account> 组件细节 可查 官网文档 文档地址 本地调试…

微信服务号开发说明:测试号申请、自定义菜单添加第三方连接

微信服务号开发方式多种多样&#xff0c;本文对接触过的一种微信服务号开发模式进行记录&#xff0c;作为今后参考的依据。 1.开发模式 本文描述的开发模式如下&#xff1a; 客户或者市场部等申请服务号。开发部开发并发布移动端服务的测试版本至互联网上。使用测试号进行微…

微信公众平台-微信服务号开发

文章目录 背景:一、微信各个平台介绍二、公众平台介绍三、开发前准备四、服务器配置五、服务器验证六、消息接收七、客服消息八、获取素材九、相关工具十、最终效果展示总结 背景: 近期接到了涉及微信开放平台和微信公众平台相关的开发需求&#xff0c;开发过程中踩了许多坑&a…

启动Tomcat闪退的问题

之前启动一直没有问题&#xff0c;今天配置conf/server.xml文件&#xff0c;把我要打开的文件更改了一下就发现它要闪退了&#xff01;然后我去百度搜它闪退的原因&#xff0c;都说是环境变量没有配置好&#xff0c;可是我的是好的啊 然后其实&#xff01;&#xff01;&#x…

windows本地启动tomcat闪退

da开cmd&#xff0c; 进入tomcat所在目录的bin目录&#xff1a; 执行startup.bat 查看设置的环境变量是否正确&#xff1b;如果不正确则在windows中设置正确的相关环境变量即可&#xff1b; 转载于:https://www.cnblogs.com/YuyuanNo1/p/10341340.html

tomcat 闪退/一闪而过 问题

结论 去官网重新下载对应JDK的新版本tomcat&#xff0c;安装解压即可使用。无需配置路径。 资源 tomcat官网下载地址 JDK对应版本 实际经验 原来装好能用的tomcat&#xff0c;上课打开就闪退。 各种查bug找的解决方案都没用&#xff0c;除开最常见的尝试配环境变量和路径…

Tomcat闪退解决方案

问题 Tomcat启动后闪退, tomcat可以通过命令行startup或直接双击startup.bat执行 通常发生闪退时,我们可以尝试在命令行中执行一下startup命令 出现图片上的情况请点击这里 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 如果执行命令行没有明确信息提示,如下图这种…

tomcat闪退问题一些解决办法

1.找不到环境变量 这应该是大多数人遇到的问题&#xff0c;网上有很多配置教程就不多说了 我一开始也是这个问题然后配置完jdk和jre后&#xff0c;发现根本没有jre&#xff0c;然后在网上找了解决办法把jre弄出来了&#xff0c;这个也自行百度&#xff0c;之后依旧还在这个界面…

Tomcat 闪退问题

方法一&#xff1a;应为tomcat是依赖于jdk环境&#xff0c;首先查看环境变量是否配置 然后cmd中查看8080有没有被占用&#xff0c;找出占用8080端口的进程 发现8080端口被占用了&#xff0c;后发现是IDEA启动了tomcat. 关掉idea&#xff0c;手动启startup.bat &#xff0c;成功…

tomcat闪退问题解决办法

免安装的tomcat双击startup.bat后&#xff0c;启动窗口一闪而过&#xff0c;而且tomcat服务未启动。 原因是&#xff1a;在启动tomcat是&#xff0c;需要读取环境变量和配置信息&#xff0c;缺少了这些信息&#xff0c;就不能登记环境变量&#xff0c;导致了tomcat的闪退。 解…

解决tomcat闪退问题,亲测有效~

第一步&#xff1a;设置CATALINA_HOME的值&#xff0c;如下所示&#xff1a; 第二步&#xff1a;在path中添加CATALINA_HOME;,注意分号不要丢掉&#xff0c;如下所示&#xff1a; 重新启动tomcat&#xff0c;如果还是一闪而退&#xff0c;可以试试下述方法&#xff1a; 第一步…

Tomcat闪退问题解决

概述 在使用Tomcat进行部署应用时&#xff0c;有时候会遇到闪退的情况&#xff0c;如下图示&#xff1a; 闪退原因&#xff1a; 1.内存配置错误&#xff1b; 2.参数配置错误&#xff1b; 3.系统内存不足。 二、解决方案 先在记事本中打开startup.bat&#xff0c;找到最后一…