目录

  • 一、微信了解
    • 1、微信相关功能
    • 2、公众号
  • 二、微信公众号开发—准备工作
    • 1、appID、appsecret
    • 2、Ngrok获得公网域名
    • 3、测试验证是否配置成功
  • 三、微信公众号开发—实现自动回复文本/图片
    • 1、代码流程图
    • 2、python脚本实现
  • 四、微信公众号开发—获取accessToken
    • 1、python脚本实现
  • 五、微信公众号开发—网页授权拉取用户信息
    • 1、操作步骤
    • 2、python脚本实现
    • 3、html模板

一、微信了解

1、微信相关功能

  • 公众平台服务号、订阅号、企业微信、小程序的相关说明
  • 接口权限功能

2、公众号

  • 公众号类型
类型 功能 适用人群
订阅号 为媒体和个人提供一种新的信息传播方式,主要功能是在微信侧给用户传达资讯;(功能类似报纸杂志,提供新闻信息或娱乐趣事) 个人、媒体、企业、政府或其他组织
服务号 为企业和组织提供更强大的业务服务与用户管理能力,主要偏向服务类交互(功能类似12315,114,银行,提供绑定信息,服务交互的) 媒体、企业、政府或其他组织
  • 区别:
区别 订阅号 服务号
发送次数 每天多一次 每月最多一次
显示位置 消息折叠出现在订阅号的文件夹中,不会收到微信提醒 消息出现在微信聊天列表中,会像收到消息一样有微信提醒
支付功能 认证的服务号有支付功能

二、微信公众号开发—准备工作

  • 微信公众号开发官方文档

1、appID、appsecret

  • 微信公众号开发需要appID、appsecret,可使用微信开发平台测试账号扫码登录获取;

2、Ngrok获得公网域名

  • 微信公众号开发需要公网ip域名,可以使用Ngrok它可以把你的本地ip映射成一个公网域名,比如127.0.0.1:8080>http://wecht.test.idce.com
  • 比如URL填写http://wecht.test.idce.com/wechat ; Token填写Testha

3、测试验证是否配置成功

  • 运行Ngrok(python sunny.py --clientid=*****)>运行python脚本>提交配置>显示配置成功
  • python脚本如下,常量部分需替换成自己的, 第一次接入微信服务器的验证流程图;
from flask import Flask, request, abort, render_template
import hashlib# 常量
WECHAT_TOKEN = "***"  # 微信的token令牌,可随便写,但和配置时的token要统一
WECHAT_APPID = "****"  # appID
WECHAT_APPSECRET = "*****"  # AppSecretapp = Flask(__name__)@app.route("/wechat", methods=["GET", "POST"])
def wechat():"""对接微信公众号服务器"""# 1、提取微信服务器发送的参数signature = request.args.get("signature")timestamp = request.args.get("timestamp")nonce = request.args.get("nonce")# 2、校验参数,确定数据源是不是微信后台if not all([signature, timestamp, nonce]):abort(400)# 3、按照微信的流程进行计算签名,进行sha1加密, 得到正确的签名值li = [WECHAT_TOKEN, timestamp, nonce]li.sort()tmp_str = "".join(li)sign = hashlib.sha1(tmp_str.encode("utf-8")).hexdigest()# 4、判断计算的签名值与请求的签名参数是否等,如果相同,则证明请求来自微信服务器if signature != sign:abort(403)else:# 5、表示是第一次接入微信服务器的验证if request.method == "GET":echostr = request.args.get("echostr")if not echostr:abort(400)return echostrif __name__ == '__main__':app.run(host="127.0.0.1", port=8080, debug=True)

三、微信公众号开发—实现自动回复文本/图片

  • 接收普通消息,当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上

1、代码流程图

2、python脚本实现

  • 运行Ngrox,以及python脚本,在浏览器打开http://wecht.test.idce.com/wechat(wecht.test.idce.com替换成你自己的域名)
  • 手机扫描测试号二维码,在手机端的公众号发送消息,即可体验自动回复内容
from flask import Flask, request, abort, render_template
import hashlib
import xmltodict
import time# 常量
WECHAT_TOKEN = "*****"  # 微信的token令牌,可随便写,但和配置时的token要统一
WECHAT_APPID = "*****"  # appID
WECHAT_APPSECRET = "*****"  # AppSecretapp = Flask(__name__)@app.route("/wechat", methods=["GET", "POST"])
def wechat():"""对接微信公众号服务器"""# 1、提取微信服务器发送的参数signature = request.args.get("signature")timestamp = request.args.get("timestamp")nonce = request.args.get("nonce")# 2、校验参数,确定数据源是不是微信后台if not all([signature, timestamp, nonce]):abort(400)# 3、按照微信的流程进行计算签名,进行sha1加密, 得到正确的签名值li = [WECHAT_TOKEN, timestamp, nonce]li.sort()tmp_str = "".join(li)sign = hashlib.sha1(tmp_str.encode("utf-8")).hexdigest()# 4、判断计算的签名值与请求的签名参数是否等,如果相同,则证明请求来自微信服务器if signature != sign:abort(403)else:# 5、表示是第一次接入微信服务器的验证if request.method == "GET":  echostr = request.args.get("echostr")if not echostr:abort(400)return echostr# 6、对微信服务器转发粉丝发过来的消息,进行回复elif request.method == "POST":  xml_data = request.dataif not xml_data:abort(400)xml_dict = xmltodict.parse(xml_data)xml_dict = xml_dict.get("xml")msg_type = xml_dict.get("MsgType")  # 提取消息类型content = xml_dict.get("Content")if content == "hello":content = "hello,小可爱"resp_dict = {"xml": {"ToUserName": xml_dict.get("FromUserName"),"FromUserName": xml_dict.get("ToUserName"),"CreateTime": int(time.time()),}}# 7、实现“你问我答”,构造返回值,由微信服务器回复给粉丝发来的文本内容if msg_type == "text":resp_dict['xml'].update({"MsgType": "text","Content": content})# 8、实现“图”尚往来,构造返回值,由微信服务器回复给粉丝发来的图片内容elif msg_type == "image":resp_dict['xml'].update({"MsgType": "image","Image": {"MediaId": xml_dict.get("MediaId")},})# 9、如果既不是文本,也不是图片,比如语音,返回非文本、非图片else:resp_dict['xml'].update({"MsgType": "text","Content": "非文本,非图片内容"})resp_xml_str = xmltodict.unparse(resp_dict)  # 将字典转换为xml字符串return resp_xml_str  # 返回消息数据给微信服务器if __name__ == '__main__':app.run(host="127.0.0.1", port=8080, debug=True)

四、微信公众号开发—获取accessToken

  • access_token是公众号的全局唯一接口调用凭据,有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效

1、python脚本实现

  • 运行Ngrox,以及python脚本;浏览器打开http://wecht.test.idce.com/accestoken(wecht.test.idce.com替换成你自己的域名),即可获得accesstoken
from flask import Flask
import requests# 常量
WECHAT_TOKEN = "****"  # 微信的token令牌,可随便写,但和配置时的token要统一
WECHAT_APPID = "****"  # appID
WECHAT_APPSECRET = "****"  # AppSecretapp = Flask(__name__)@app.route("/accestoken")
def acc():url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=" \f"client_credential&appid={WECHAT_APPID}&secret={WECHAT_APPSECRET}"resp = requests.get(url)text = resp.textreturn textif __name__ == '__main__':app.run(host="127.0.0.1", port=8080, debug=True)

五、微信公众号开发—网页授权拉取用户信息

  • 微信公众号网页授权文档

1、操作步骤

  • 运行python脚本,并运行Ngrox(python sunny.py --clientid=你的clientid);
  • 接口权限区域:修改OAuth2.0授权回调页面域名(你的公网域名,例如wecht.test.idce.com);
  • 编写授权url如下,APPID替换成你自己的,REDIRECT_URI替换成http%3A//wecht.test.idce.com/wechat/index(wecht.test.idce.com替换成你自己的域名)
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
  • 在微信里打开上面的编好的授权url,即可显示用户信息

2、python脚本实现

  • 运行Ngrox,以及python脚本;浏览器打开http://wecht.test.idce.com/wechat/index(wecht.test.idce.com替换成你自己的域名),会显示无code;
from flask import Flask, request, render_template
import requests# 微信公众号的身份标识 常量
WECHAT_TOKEN = "****"  # 微信的token令牌,可随便写,但和配置时的token要统一
WECHAT_APPID = "****"  # appID
WECHAT_APPSECRET = "****"  # AppSecretapp = Flask(__name__)@app.route("/wechat/index")
def index():# 从微信服务器中拿去用户的资料数据# 1. 用户授权登陆后方可拿到code参数code = request.args.get("code")if not code:return "无code"# 2. 携带code、WECHAT_APPID、WECHAT_APPSECRET向微信服务器发送http请求,获取access_token, 及openidurl = f"https://api.weixin.qq.com/sns/oauth2/access_token?" \f"appid={WECHAT_APPID}&secret={WECHAT_APPSECRET}&" \f"code={code}&grant_type=authorization_code"response = requests.get(url)resp_dict = response.json()if "errcode" in resp_dict:return "获取access_token失败"access_token = resp_dict.get("access_token")open_id = resp_dict.get("openid")# 3. 通过令牌access_token, 及openid向微信服务器发送http请求,可获取用户的资料数据url = f"https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={open_id}&lang=zh_CN"response = requests.get(url)user_resp_dict = response.json()if "errcode" in user_resp_dict:return "获取用户信息失败"else:# 将用户的资料数据填充到页面中return render_template("index.html", user=user_resp_dict)if __name__ == '__main__':app.run(host="127.0.0.1", port=8080, debug=True)

3、html模板

  • 在templates文件夹下新建index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{{user["nickname"]}}</title>
</head>
<body><img alt="头像" src="{{user['headimgurl']}}"><table><tr><th>openid</th><td>{{user['openid']}}</td></tr><tr><th>province</th><td>{{user['province']}}</td></tr><tr><th>city</th><td>{{user['city']}}</td></tr></table></body>
</html>

Python开发微信公众号相关推荐

  1. python开发微信公众号开发教程百度云_Python开发微信公众号后台(系列一)

    Python 开发微信公众号后台(系列一) 專 欄段晓晨,写过一点爬虫,写过几篇文章.能力虽 有限,会尽量把想说的东西讲清楚. 知乎 ID :段小草 知乎专栏:小段同学的杂记, https://zhu ...

  2. python开发微信公众号自动回复音乐

    利用python开发微信公众号,对接实现自动回复音乐,并下载音乐,是公众号更自动化. 本次采用新浪sae部署,新浪sae 1.新浪SAE 创建python应用 1)选择共享环境,使用多少扣费多少,不适 ...

  3. Python开发微信公众号后台(系列三)

    原文链接:点击打开链接 摘要: 之前有主流的小黄鸡机器人,但是没找到官方的网页版.(小黄鸡提供付费 API )尝试使用http://www.niurenqushi.com/app/simsimi/(虽 ...

  4. python训练营微信公众号真实性_用python进行微信公众号开发(仅测试学习)

    今天看到篇教程,是用python开发微信公众号的,觉得有意思,就敲代码实现了一下,成功后更觉得好玩,故记录,方便开发深入时使用. 基础背景介绍: 首先得有个人微信号(没有自行注册),为方便测试学习: ...

  5. 视频教程-基于python的微信公众号开发教程-微信开发

    基于python的微信公众号开发教程 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试(软考)--"信 ...

  6. 基于python的微信公众号开发教程_基于python的微信公众号开发教程

    应广大python学员的期盼,九宝老师精心制作的"基于python的微信公众号开发"视频教程即将上线. 该课程秉承九宝培训一贯的"简单.高效.快速"的讲课原则, ...

  7. Python进行微信公众号开发

    一.微信公众号的准备: 1. 注册 访问地址:https://mp.weixin.qq.com/ 按照提示注册即可 注意:本文样例使用个人公众号,由于个人公众号没有接口权限,自定义菜单无法进行开发,同 ...

  8. 公众号python接入机器人_使用python实现小机器人自动回复可扩展开发微信公众号的小机器人...

    api来之图灵机器人.我们都知道微信公众号可以有自动回复,我们先用python脚本编写一个简单的自动回复的脚本,利用图灵机器人的api. http://www.tuling123.com/help/h ...

  9. 使用Python进行微信公众号开发(三)回复消息

    写在前面 <使用Python进行微信公众号开发>系列文章将与大家分享如何使用Python一步步搭建微信公众号后台服务器. 效果体验 扫码"是雯子吖"公众号进行体验 配置 ...

  10. 使用Python进行微信公众号开发(二)接收消息

    写在前面 <使用Python进行微信公众号开发>系列文章将与大家分享如何使用Python一步步搭建微信公众号后台服务器. 效果体验 扫码"是雯子吖"公众号进行体验 配置 ...

最新文章

  1. Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐[转]
  2. matlab simulink 视频,使用 MATLAB 和 Simulink 让控制系统的开发更轻松
  3. 利用nvm管理Node的版本
  4. Linux学习笔记——Centos6.4
  5. opengl开启垂直同步_玩游戏卡顿?只要简单2步,开启电脑最大性能,速度提升10倍!...
  6. mongodb 字符串转bson_MongoDB之bson的介绍
  7. 面试被问项目上线没_从面试官角度谈观察到的程序员技能瓶颈
  8. mysql references关键字_mysql关键字有哪些?
  9. mysql postgresql nav_Mysql/postgreSQL
  10. 电脑端输入法的一些设置
  11. CouchBase简单介绍
  12. 【T3】打印凭证没有任何反应
  13. linux的打开文件工具,xdg-open|从Liunx终端工具打开文件系统说起
  14. 电商RPA:直播行业必不可少的工具
  15. 中国传统文化2022秋雨课堂期末测试答案
  16. ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)
  17. Android制作简单的计算器
  18. MySQL WEEK函数介绍
  19. 电动车充电显示服务器无响应,纯电动汽车在充电时屏幕显示BMS无响应是怎么回事?...
  20. 成就感和尊严,给你快乐

热门文章

  1. 洛谷P1640 [SCOI2010]连续攻击游戏(二分图)
  2. 1.12 Cubemx_STM32F4 步进电机(四)----S曲线理论
  3. 数据库设计(一、二、三及BCNF范式)
  4. UWB简介及其定位方法
  5. Ps如何把背景图片拉长并不变形!
  6. ckplayer php,ckplayer播放器
  7. 国际人工智能领域著名科学家,受聘同济大学名誉教授
  8. Linux 安装谷歌浏览器
  9. 固态硬盘用软件测试掉速严重,固态硬盘掉速别慌张,教你如何快速进行调节!...
  10. 【英语四六级-必背单词】高中英语单词 (H)-MP3试听与下载