wechatpy.work.client.api.jsapi 源代码
# -*- coding: utf-8 -*-
import time
from wechatpy.client.api.base import BaseWeChatAPI
from wechatpy.utils import WeChatSigner
[文档]class WeChatJSAPI(BaseWeChatAPI):
"""
https://work.weixin.qq.com/api/doc#90001/90144/90539
"""
[文档] def get_ticket(self):
"""
获取企业的jsapi_ticket
https://work.weixin.qq.com/api/doc#90001/90144/90539/获取企业的jsapi_ticket/
:return: 返回的 JSON 数据包
"""
return self._get("get_jsapi_ticket")
[文档] def get_jsapi_signature(self, noncestr, ticket, timestamp, url):
"""
获取 JSAPI 签名
https://work.weixin.qq.com/api/doc#90001/90144/90539/签名算法/
:param noncestr: nonce string
:param ticket: JS-SDK ticket
:param timestamp: 时间戳
:param url: URL
:return: 签名
"""
data = [
f"noncestr={noncestr}",
f"jsapi_ticket={ticket}",
f"timestamp={timestamp}",
f"url={url}",
]
signer = WeChatSigner(delimiter=b"&")
signer.add_data(*data)
return signer.signature
[文档] def get_agent_ticket(self):
"""
获取应用的jsapi_ticket
https://work.weixin.qq.com/api/doc#90001/90144/90539/获取应用的jsapi_ticket/
:return: 返回的 JSON 数据包
"""
return self._get("ticket/get", params={"type": "agent_config"})
[文档] def get_jsapi_ticket(self):
"""
获取微信 JS-SDK ticket
该方法会通过 session 对象自动缓存管理 ticket
:return: ticket
"""
ticket_key = f"{self._client.corp_id}_jsapi_ticket"
expires_at_key = f"{self._client.corp_id}_jsapi_ticket_expires_at"
ticket = self.session.get(ticket_key)
expires_at = self.session.get(expires_at_key) or 0
if not ticket or expires_at < int(time.time()):
jsapi_ticket = self.get_ticket()
ticket = jsapi_ticket["ticket"]
expires_at = int(time.time()) + int(jsapi_ticket["expires_in"])
self.session.set(ticket_key, ticket)
self.session.set(expires_at_key, expires_at)
return ticket
[文档] def get_agent_jsapi_ticket(self):
"""
获取应用的jsapi_ticket
该方法会通过 session 对象自动缓存管理 ticket
:return: ticket
"""
ticket_key = f"{self._client.corp_id}_agent_jsapi_ticket"
expires_at_key = f"{self._client.corp_id}_agent_jsapi_ticket_expires_at"
ticket = self.session.get(ticket_key)
expires_at = self.session.get(expires_at_key) or 0
if not ticket or expires_at < int(time.time()):
jsapi_ticket = self.get_agent_ticket()
ticket = jsapi_ticket["ticket"]
expires_at = int(time.time()) + int(jsapi_ticket["expires_in"])
self.session.set(ticket_key, ticket)
self.session.set(expires_at_key, expires_at)
return ticket