更新时间: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失败,此时服务器端会有相应的错误。如果验证成功,则用户可以在公众号中发送信息,公众号会返回发送信息。
希望大家耐心调试。

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

  1. python 微信机器人自动聊天+回怼表情包+Adidas公众号自动抽签 四、获取表情包中的文字并进行同类型回怼

    前言 在前文自动回怼表情包中, 只是做到爬取表情包存放在本地 ,然后当微信好友发送表情包给你的时候,随机抓取本地一个表情包进行回复.太不灵活 识别表情包中的文字 from __future__ imp ...

  2. Python微信公众号后台开发003:自定义菜单

    有同学问道微信公众号后台开发的自定义菜单怎么实现? 这个问题本来想放到后面的,因为的确对公众号的影响挺明显的, 因为开启后台服务,公众号的自定义菜单就不见了,很影响使用, 也有同学问这个问题,就提前了 ...

  3. python微信公众号开发教程_python微信公众号开发简单流程实现

    本文为大家分享了python微信公众号开发的简单过程,供大家参考,具体内容如下 网上有很多微信公众号的开发教程,但是都是好几年前的了,而且很多都是抄袭其他人的,内容几乎一模一样.真的无语了.只好自己总 ...

  4. Python微信公众号开发平台

    上大学的时候,对微信公众号开发浅尝辄止的玩了一下,感觉还是挺有意思的. //www.jb51.net/article/133677.htm后来服务器到期了,也就搁置了.由于发布web程序,使用PHP很 ...

  5. 记一次微信公众号的开发与后台搭建

    一.背景 刚入新公司不久,就碰见一个同事要离职,就交接了这个项目给我.同事的离职比较仓促,所以交接的也不是很好,这也是后面问题偏多的一个客观原因.项目如题所示,前端采用vue.js+node.js开发 ...

  6. Python学习笔记:7.5.8 Django快速建站 - Web开发实战 微信公众号开发3

    前言:本文是学习网易微专业的<python全栈工程师 - Django快速建站>课程的笔记,欢迎学习交流.同时感谢老师们的精彩传授! 一.课程目标 自定义菜单 利用测试公众号进行测试 二. ...

  7. python 微信公众号 语音推送_微信公众平台消息接口开发(40)语音识别

    微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别 微信公众平台开发 语音识别 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/archive/2 ...

  8. python发微信红包_微信公众号开发小记——5.python微信红包

    描述 有时候产品有这么一些需求,当用户满足一定条件时,给他发一定金额的红包. 微信各个服务是独立的,比较蛋疼,要用红包功能,首先你需要注册一个微信商户平台账号. 代码位置 分支pay-20160802 ...

  9. Python微信公众号

    ###  类似花生壳的 内网穿透工具:https://ngrok.cc/ 尽管很多人吐槽王者荣耀里的小学生太坑爹,但不得不承认,近年来腾讯的变现能力确实强大地吓人.这之中微信和QQ作为用户的入口,起到 ...

最新文章

  1. foobar2000 ios版怎么添加音乐_抖音怎么设置说完话后再放音乐 视频先配音后半段添加背景音乐...
  2. Linux的解决vmware的Linux系统IP自动变化
  3. python-循环语句基础知识
  4. postfix过滤器名称不一致导致postfix/qmg:warning: connect to transport xxxx: No such file or directory...
  5. C语言——冒泡排序法
  6. 艾伟_转载:趣味问题:你能用Reflection.Emit生成这段代码吗?(答案)
  7. 价值12万汽车网上售价1万?老哥拍下后4S店不认账:标错价了
  8. 以太坊创世区块源码分析
  9. Oracle中是用case...when语句进行判断
  10. Java 疑问自问自答
  11. css 标签太长的时候隐藏为点点
  12. shell命令的退出状态码(exit status)
  13. ZigBee学习之NXP JN5169开发环境搭建
  14. ajax请求406,SpringMVC ajax请求406 错误解决方案
  15. 使用Weka进行数据挖掘(Weka教程三)Weka数据之Instances和Instance
  16. 二战中真实的打酱油船
  17. 《论工业社会及其未来》—泰德.卡辛斯基
  18. 山东大学项目实训小组一——基于深度学习的AI视频剪辑器“易剪”
  19. jQuery实现商品楼层的感觉
  20. 《乌合之众》中的50金句

热门文章

  1. Pr:导出设置之元数据
  2. 负数二进制转换十进制
  3. ColorMatrix 矩阵效果,即美图秀秀图片滤镜效果的思路
  4. 【BZOJ】3168: [Heoi2013]钙铁锌硒维生素
  5. Android 知识点——Method put in org.json.JSONObject not mocked
  6. 佛祖保佑永无BUG 代码 (各种样式)
  7. hdu(杭电oj)第一页题目题解
  8. SVN(subversion )服务端和客户端的下载安装使用
  9. FOR ALL ENTRIES
  10. HDU 6078 Wavel Sequence【动态规划】