赞
踩
类型 | 功能 | 适用人群 |
---|---|---|
订阅号 | 为媒体和个人提供一种新的信息传播方式,主要功能是在微信侧给用户传达资讯;(功能类似报纸杂志,提供新闻信息或娱乐趣事) | 个人、媒体、企业、政府或其他组织 |
服务号 | 为企业和组织提供更强大的业务服务与用户管理能力,主要偏向服务类交互(功能类似12315,114,银行,提供绑定信息,服务交互的) | 媒体、企业、政府或其他组织 |
区别 | 订阅号 | 服务号 |
---|---|---|
发送次数 | 每天多一次 | 每月最多一次 |
显示位置 | 消息折叠出现在订阅号的文件夹中,不会收到微信提醒 | 消息出现在微信聊天列表中,会像收到消息一样有微信提醒 |
支付功能 | 无 | 认证的服务号有支付功能 |
from flask import Flask, request, abort, render_template
import hashlib
# 常量
WECHAT_TOKEN = "***" # 微信的token令牌,可随便写,但和配置时的token要统一
WECHAT_APPID = "****" # appID
WECHAT_APPSECRET = "*****" # AppSecret
app = 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
if __name__ == '__main__':
app.run(host="127.0.0.1", port=8080, debug=True)
from flask import Flask, request, abort, render_template
import hashlib
import xmltodict
import time
# 常量
WECHAT_TOKEN = "*****" # 微信的token令牌,可随便写,但和配置时的token要统一
WECHAT_APPID = "*****" # appID
WECHAT_APPSECRET = "*****" # AppSecret
app = 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.data
if 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)
from flask import Flask
import requests
# 常量
WECHAT_TOKEN = "****" # 微信的token令牌,可随便写,但和配置时的token要统一
WECHAT_APPID = "****" # appID
WECHAT_APPSECRET = "****" # AppSecret
app = 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.text
return text
if __name__ == '__main__':
app.run(host="127.0.0.1", port=8080, debug=True)
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
from flask import Flask, request, render_template
import requests
# 微信公众号的身份标识 常量
WECHAT_TOKEN = "****" # 微信的token令牌,可随便写,但和配置时的token要统一
WECHAT_APPID = "****" # appID
WECHAT_APPSECRET = "****" # AppSecret
app = 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, 及openid
url = 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)
<!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>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。