随着人工智能的不断发展,微信开发也越来越重要,很多人都开启了学习微信相关服务,本文就介绍了微信公众号和小程序的基础内容。
wechatpy 是一个微信 (WeChat) 的第三方 Python SDK, 实现了微信公众号、企业微信和微信支付等 API。
安装
pip install wechatpy -i https://pypi.tuna.tsinghua.edu.cn/simple/
接入微信公众平台开发,开发者需要按照如下步骤完成:
1、填写服务器配置
2、验证服务器地址的有效性
3、依据接口文档实现业务逻辑
第一步:填写服务器配置
登录微信公众平台官网后,在公众平台官网的开发 - 基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中 URL 是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该 Token 会和接口 URL 中包含的 Token 进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。
同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择兼容模式和安全模式需要提前配置好相关加解密代码,详情请参考消息体签名及加解密部分的文档 。
官方服务器配置文档
直接使用wechatpy来校验signature
wechatpy文档
from wechatpy.utils import check_signature
from wechatpy.exceptions import InvalidSignatureException
token = 你在公众号服务器配置上相同的
def check_signature_tool(self, signature, timestamp, nonce):
try:
check_signature(token, signature, timestamp, nonce)
return True
except InvalidSignatureException: # 处理异常情况或忽略
return False
注意⚠️返回的echostr要是int类型
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
官方获取Access token
代码如下(示例):
class WeixinWechatpy():
def __init__(self):
self.appid = WECHAT_APPID
self.secret = WECHAT_SECRET
self.token = WECHAT_TOKEN
self.prefix = 'wechatpy'
self.access_token_cache_url = "redis://localhost:6379/2"
def get_WeChatClient(self):
"""
获取WeChatClient对象
:return:WeChatClient对象
"""
redis_client = Redis.from_url(self.access_token_cache_url)
session_interface = RedisStorage(
redis_client,
prefix=self.prefix
)
return WeChatClient(
self.appid,
self.secret,
session=session_interface
)
以上就是今天要讲的内容,本文仅仅简单介绍了wechatpy的使用,而wechatpy提供了大量能使我们快速便捷地处理微信公众号,微信小程序的函数和方法。
实话有点了,只有一个 curl的实例
以下两个方式
1.本地文件
path:文件地址
files = {'p_w_picpath': open(path, 'rb')}
2。网络读取到的二进制流
content:文件二进制流
files = { 'media' : ('tmp.jpg', content, 'image/jpg')}
requests.post(url, files=files, timeout=10)
requests.post(url, data=json.dumps(data,ensure_ascii=False).encode('utf-8'))
content = "你好 /n 谢谢" # 一定要双引号
data = {
"touser": OPENID,
"msgtype": msgtype,
"text": {
"content": content
}
}
官方文档
html文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
<title>Demo</title>
</head>
<body>
<div id="app">
<wx-open-launch-weapp path="pages/index/index" id="launch-wxapp" username="xxx">
</wx-open-launch-weapp>
<wx-open-launch-app id="launch-btn" appid="xxx" extinfo='{"PageType":1001}'>
<script type="text/wxtag-template">
<style>
.btn {
padding: 12px
}
</style>
<button class="btn">点击打开APP</button>
</script>
</wx-open-launch-app>
</div>
</body>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.6.1.min.js"></script>
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>
getAppList()
function getAppList() {
$.ajax({
url: "xxxxxx",
type: "GET",
contentType: "application/json",
success: function (data) {
const result = JSON.parse(data);
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: result.data.appid, // 必填,公众号的唯一标识
timestamp: parseInt(result.data.timestamp), // 必填,生成签名的时间戳
nonceStr: result.data.noncestr, // 必填,生成签名的随机串
signature: result.data.sign, // 必填,签名
jsApiList: ['onMenuShareTimeline', 'chooseImage'], // 必填,需要使用的JS接口列表
openTagList: ['wx-open-launch-weapp', 'wx-open-launch-app'] // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']
})
wx.ready(function (res) {
});
wx.error(function (res) {
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名
});
}
});
}
</script>
</html>