Files
sixGuoDjango/wechat_项目授权/企业微信网页授权.py
T
2026-08-02 14:07:04 +08:00

65 lines
3.3 KiB
Python

import datetime
import hashlib
import requests
from django.core.handlers.wsgi import WSGIRequest
from django.utils.crypto import get_random_string
from rest_framework import status
from rest_framework.decorators import action
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.routers import DefaultRouter
from rest_framework.viewsets import ViewSet
from wechat_token.token工具包 import sixToken
class wecom网页开发接口(ViewSet):
AppID = "wwbe6369dc26a9d83a" # 企微appid
AppSecret = "SIRyum7vQh-Bt36AxnqKMX0HIiE-zkYbjYgSat7reZw" # 企微secret
AgentId = "1000008" # 企微agentid
"""这个接口,是在微信开发者工具, 打开时请求的接口,进行授权状态"""
"""官网文档:https://developer.work.weixin.qq.com/document/path/91023"""
@action(detail=False, methods=["get"], url_path="web_auth")
def 企微网页授权(self, request: WSGIRequest | Request, *args, **kwargs):
""""""
code = request.data.get("code", False) #
print("code的值", code)
wecom_token = sixToken.get_wecom_token()
code_access_token = f"https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token={wecom_token}&code={code}"
json_data = requests.get(url=code_access_token, )
print("打印一下企微网页授权", json_data.json())
当用户为企业成员时在企微中打开链接返回示例如下 = {"errcode": 0, "errmsg": "ok", "userid": "USERID", "user_ticket": "USER_TICKET"}
用户不是企微的成员同时是在个微中打开的链接 = {'errcode': 0, 'errmsg': 'ok', 'openid': 'oan8ExL4vgmQwhh0B3-MBKhqrXko'} # 元宝的号 服务号的:o28bf6x8TjmK6DZlInbC1ieAowGE
用户是企微的成员是在个微中打开链接的 = {'userid': 'YuanBao1975', 'errcode': 0, 'errmsg': 'ok'}
双方都是好友同时个微不企微成员时 = {
'errcode': 0, 'errmsg': 'ok', 'openid': 'oan8ExL4vgmQwhh0B3-MBKhqrXko',
'external_userid': 'wmj4zANAAA86UQT22hrqS4izuR_iNjKw'
}
return Response(data="", status=status.HTTP_200_OK)
@action(detail=False, methods=["get", "post", "put", "delete"], url_path="sdk_auth")
def 企微号SDK授权(self, request: Request, *args, **kwargs):
"""
:param request:
:param args:
:param kwargs:
:return:
"""
url = request.data.get("url", False) #
random_string = get_random_string(length=16)
timestamp = int(datetime.datetime.now().strftime('%s'))
wecom_tick = sixToken.get_wecom_tick()
d = {"noncestr": random_string, "jsapi_ticket": wecom_tick, "timestamp": timestamp, "url": url}
# TODO 这里数据就是根据文档中,自己组装的,并没有返回值可以获取
sorted_by_key_rise = dict(sorted(d.items()))
str_list = "&".join([f"{key}={value}" for key, value in sorted_by_key_rise.items()])
sig = hashlib.new(name="sha1", data=str_list.encode("utf-8")).hexdigest()
res_data = {"nonceStr": random_string, "timestamp": timestamp, "signature": sig}
return Response(data=res_data, status=status.HTTP_200_OK)
wecom网页开发接口Router = DefaultRouter()
wecom网页开发接口Router.register(prefix="", viewset=wecom网页开发接口, basename="")