微信的事件监听

本文详细介绍了微信原生小程序在APP.js中实现的事件管理和通信机制。通过`on`函数注册事件处理函数,将回调存储在bus对象中,而`emit`函数则触发事件并调用对应的回调,实现组件间的通信。这种机制对于理解小程序内部工作原理及优化应用性能至关重要。

微信原生小程序放在APP.js里面
on: function(key, func) {
if (!bus[key]) {
bus[key] = [func];
} else {
bus[key].push(func)
}
},
emit: function(key, params) {
if (!bus[key]) return;
for (let v of bus[key]) {
v(params)
}

}
### 实现企业微信消息监听事件 为了实现企业微信的消息监听事件,在Python环境中可以采用如下方法: #### 使用Flask框架创建Webhook接口 首先,需要安装`flask`库用于构建HTTP服务器端口来接收来自企业微信的通知。接着定义路由函数处理接收到的数据。 ```python from flask import Flask, request, make_response import json app = Flask(__name__) @app.route('/wechat/callback', methods=['POST']) def wechat_callback(): data = request.get_json() if not isinstance(data, dict): return "Invalid Request", 400 msg_type = data.get('MsgType') event_key = data.get('EventKey') response_data = { "errcode": 0, "errmsg": "ok" } resp = make_response(json.dumps(response_data)) resp.content_type = 'application/json' return resp ``` 此代码片段展示了如何设置一个简单的回调URL `/wechat/callback` 来接受POST请求,并解析传入的企业微信消息体[^2]。 #### 验证签名与加密数据解密 对于安全性的考虑,企业微信会对接收到的信息进行加签操作。因此还需要验证消息的真实性以及对加密内容做相应解码工作。 ```python from Crypto.Cipher import AES import base64 import hashlib import xml.etree.ElementTree as ET class WXBizMsgCrypt(object): def __init__(self, sToken, sEncodingAESKey, sCorpID): self.sToken = sToken self.sEncodingAESKey = sEncodingAESKey self.sReceiveId = sCorpID # ...省略其他必要成员函数... def VerifyURL(self, sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr): sha1 = hashlib.sha1() list = [self.sToken, str(sVerifyTimeStamp), str(sVerifyNonce)] list.sort() sha1.update("".join(list).encode()) ret = True if sha1.hexdigest() == sVerifyMsgSig else False if(ret != True): return False, "" encodingAesKey = base64.b64decode(self.sEncodingAESKey+"=") aes = AES.new(encodingAesKey[:32], AES.MODE_CBC, IV=encodingAesKey[-16:]) plain_text = unpad(aes.decrypt(base64.b64decode(sVerifyEchoStr))) from_xml = ET.fromstring(plain_text.decode()) encrypt = from_xml.find("Encrypt").text decryptor = AES.new(encodingAesKey[:32], AES.MODE_CBC, IV=encrypt[-16:].encode()) decrypted_msg = unpad(decryptor.decrypt(base64.b64decode(encrypt[:-16]))) return True, decrypted_msg.decode() def pad(text): while len(text) % 16 != 0: text += b'\0' return text def unpad(text): return text.rstrip(b'\0') ``` 上述类实现了对企业微信推送过来的消息校验和解密功能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值