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="")