UPGRADE_CONFIG_URL = "/cgi-bin/kf/customer/get_upgrade_service_config" UPGRADE_SERVICE_URL = "/cgi-bin/kf/customer/upgrade_service" CANCEL_UPGRADE_URL = "/cgi-bin/kf/customer/cancel_upgrade_service" class WeChatKFUpgradeManager: def __init__(self, gateway): self._gateway = gateway async def get_config(self, open_kfid: str) -> dict: return await self._post(UPGRADE_CONFIG_URL, {"open_kfid": open_kfid}) async def upgrade( self, open_kfid: str, external_user_id: str, servicer_userid: str | None = None, chat_id: str | None = None, ) -> dict: payload = {"open_kfid": open_kfid, "external_user_id": external_user_id} if servicer_userid: payload["type"] = 1 payload["member"] = {"userid": servicer_userid} elif chat_id: payload["type"] = 2 payload["groupchat"] = {"chat_id": chat_id} return await self._post(UPGRADE_SERVICE_URL, payload) async def cancel(self, open_kfid: str, external_user_id: str) -> dict: return await self._post( CANCEL_UPGRADE_URL, {"open_kfid": open_kfid, "external_user_id": external_user_id}, ) async def _post(self, url: str, payload: dict) -> dict: token = await self._gateway.get_access_token() resp = await self._gateway._http.post(url, params={"access_token": token}, json=payload) return resp.json()