Files
sixGuoDjango/wechat_项目工具包/企业微信工具包/联系我与客户入群方式(联系我)工具.py
2026-08-02 14:07:04 +08:00

188 lines
10 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""客户联系我管理"""
import os
from datetime import datetime
import django
import requests
from pydantic import BaseModel, Field
from sixGuoDjango.settings import BASE_DIR
from wechat_token.token工具包 import sixToken
from wechat_数据库.用户数据库.小程序登陆用户 import weiuser
from wechat_项目工具包.数据库的工具包.更新用户积分 import miniUser用户角色
os.environ.setdefault(key="DJANGO_SETTINGS_MODULE", value=f"{BASE_DIR.name}.settings")
django.setup()
import pydash
from requests import post
six六果对象xiao, six是否新创建值 = weiuser.objects.update_or_create(unionid="六果",
defaults={
"user_IP地址": None, "user_昵称": "六果", "user_用户当前的等级": 0, "user_省份": "六果", "user_城市": "六果", "user_区县": "六果",
"user_街道信息": "六果", "user_头像": "https://hudie.xiao.band/%E6%9C%AA%E5%91%BD%E5%90%8D.png", "user_绑定企微usrID账号": "六果", "user_角色权限": "六果", "external_userid": "六果",
"parent_id": "六果", "mini_openid": "wxf612e825377328f0", "wechat_openid": "六果", "wecom_openid": "wwbe6369dc26a9d83a", "codeConfigId": "六果", "codeRemark": "六果",
"codeQrCode": "https://hudie.xiao.band/mini.jpg",
"user_企微角色权限": "六果", "user_绑定企微UNIONID": "六果"
})
class wecom客户联系_联系我_管理(BaseModel):
"""
https://developer.work.weixin.qq.com/document/path/92228#%E9%99%84%E5%BD%95
"""
addres_省: str = Field(..., description="addres_省")
address_市: str = Field(..., description="address_市")
address_区县: str = Field(..., description="address_区县")
def 配置客户联系_联系我_方式(self, state企微二维码绑定的唯一值: str, userid_list: list[str]):
"""
通过API添加的「联系我」不会在管理端进行展示,每个企业可通过API最多配置50万个「联系我」。
用户需要妥善存储返回的config_id,config_id丢失可能导致用户无法编辑或删除「联系我」。
临时会话模式不占用「联系我」数量,但每日最多添加10万个,并且仅支持单人。
临时会话模式的二维码,添加好友完成后该二维码即刻失效。
请求方式:POST(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_contact_way?access_token=ACCESS_TOK
:return:
:rtype:
"""
# wecom_token = "500hJr2pfJIa5vCJoUOK_zJRcKG_4fKdC_pilCgsEds7lQ3VZGlg1FN6iGDKZsMpUqZO4Di9BJfEMxk7V01yz5NYNwaekvby9vw3gZBw40uXr-YqlAVkP6ZRA0Wf6IkHfiYUTDQAk1
# -hUANg42srD6f3AfooEi1ZbbmAvXRjsPa17HVgzxLP7NnGTZPbaTOZRU2Cr269GjxZhgx0dVHu1Q"
wecom_token = sixToken.get_wecom_token()
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_contact_way?access_token={wecom_token}"
state = "oy4Jw6Lyfyj1VvgZFodzq9oqJzHE"
请求数据 = {
"type": 1, # 联系方式类型,1-单人, 2-多人
"scene": 2, # 场景,1-在小程序中联系,2-通过二维码联系
"style": 1, # 否 在小程序中联系时使用的控件样式,详见附表
"remark": "渠道客户", # 否 联系方式的备注信息,用于助记,不超过30个字符
"skip_verify": True, # 否 外部客户添加时是否无需验证,默认为true
"state": state企微二维码绑定的唯一值, # 是 区分业务用的;
"user": userid_list,
}
data = requests.post(url=uri, json=请求数据).json()
print(data)
config_id = pydash.get(obj=data, path="config_id")
qr_code = pydash.get(obj=data, path="qr_code")
def 获取企业已配置的_联系我_列表(self, start时间戳):
"""
获取六果公司已经创建的全部的添加我联系我二维码 列表数据🆔
"""
wecom_token = sixToken.get_wecom_token() # list_contact_way
print(datetime(year=2026, month=1, day=1).timestamp())
start时间戳 = int(datetime(year=2026, month=1, day=1).timestamp())
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list_contact_way?access_token={wecom_token}"
data = post(url=uri, json={"start_time": start时间戳}).json()
print(data, "=========")
return data
def 获取企业已配置的_联系我_方式(self, config_id: str):
"""
获取企业已配置的_联系我_方式
:param config_id:
:type config_id:
"""
wecom_token = sixToken.get_wecom_token()
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_contact_way?access_token={wecom_token}"
请求数据 = {"config_id": config_id}
data = post(url=uri, json=请求数据).json()
return data
def 更新企业已配置的_联系我_方式(self):
"""
更新企业配置的「联系我」二维码和「联系我」小程序按钮中的信息,如使用人员和备注等。
请求方式:POST(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/externalcontact/update_contact_way?access_token=ACCESS_TOKEN
"""
wecom_token = sixToken.get_wecom_token()
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/update_contact_way?access_token={wecom_token}"
# oy4Jw6A1T3WkKOOhMxcbQTDSM8rs
请求示例数据 = {"config_id": "9b18a3ac534e236162a850f77bdd20d0", "remark": "渠道客户", "skip_verify": True, "style": 1, "state": "oy4Jw6A1T3WkKOOhMxcbQTDSM8rs", "type": 2,
"user": ["YuanBao1975"],
}
data = post(url=uri, json=请求示例数据).json()
print("更新企业已配置的_联系我_方式", data)
def 删除企业已配置的_联系我_方式(self, config_id: str):
"""
删除一个已配置的「联系我」二维码或者「联系我」小程序按钮。
请求方式:POST(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/externalcontact/del_contact_way?access_token=ACCESS_TOKEN
"""
print(config_id, type(config_id))
wecom_token = sixToken.get_wecom_token()
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/del_contact_way?access_token={wecom_token}"
请求数据 = {"config_id": config_id}
data = post(url=uri, json=请求数据).json()
print(data, "==========")
return data
def 结束临时会话(self):
"""
结束临时会话
"""
pass
def 结束语定义(self):
"""
结束语定义
"""
pass
def 最终处理完整的企微二维码信息(self, start时间戳):
# 调用获取所有的 原先创建的 列表 得到 config_id
config_id_list_data = self.获取企业已配置的_联系我_列表(start时间戳=start时间戳)
contact_way = pydash.get(obj=config_id_list_data, path="contact_way")
for configID in contact_way:
config_id = pydash.get(obj=configID, path="config_id")
data_详情数据 = self.获取企业已配置的_联系我_方式(config_id=config_id)
qr_code = pydash.get(obj=data_详情数据, path="contact_way.qr_code")
state = pydash.get(obj=data_详情数据, path="contact_way.state")
userID = pydash.get(obj=data_详情数据, path="contact_way.user.0")
remark = pydash.get(obj=data_详情数据, path="contact_way.remark")
print(qr_code)
wei_obj对象, wei_obj首次创建 = weiuser.objects.get_or_create(unionid=state)
if wei_obj首次创建:
# 当对象是首次创建时:需要更新一下数据
wei_obj对象.user_绑定企微usrID账号 = userID
wei_obj对象.codeConfigId = config_id
wei_obj对象.codeQrCode = qr_code
wei_obj对象.codeRemark = remark
wei_obj对象.parent_id = "六果" # 如果是首次创建就需要将当前对象的父元素 默认为 六果公司
wei_obj对象.user_企微角色权限 = "企微员工"
wei_obj对象.user_省份 = self.addres_省
wei_obj对象.user_城市 = self.address_市
wei_obj对象.user_区县 = self.address_区县
wei_obj对象.user_绑定企微UNIONID = state
wei_obj对象.save()
print("首次创建,并且数据库更新成功了")
else:
wei_obj对象.user_绑定企微usrID账号 = userID
wei_obj对象.codeConfigId = config_id
wei_obj对象.codeQrCode = qr_code
wei_obj对象.codeRemark = remark
wei_obj对象.user_企微角色权限 = miniUser用户角色().企微员工
wei_obj对象.parent_id = wei_obj对象
wei_obj对象.user_用户当前的等级 = 1
wei_obj对象.user_省份 = self.addres_省
wei_obj对象.user_城市 = self.address_市
wei_obj对象.user_区县 = self.address_区县
wei_obj对象.user_绑定企微UNIONID = state
wei_obj对象.save()
print("企微员的用户已经存在,并且更新了相关的信息")
# 接着 查询所有的 父元素为当前对象的所有用户,再将绑定的二维码信息,更新为当前的对象
weiuser.objects.filter(parent=wei_obj对象).update(codeConfigId=wei_obj对象.codeConfigId, user_绑定企微usrID账号=userID,
codeQrCode=wei_obj对象.codeQrCode, codeRemark=wei_obj对象.codeRemark)
if __name__ == '__main__':
pass
#
# resData = wecom客户联系_联系我_管理().获取企业已配置的_联系我_方式( config_id="bbc5220b82e614ceeff98fd9f2b04827" )
# wecom客户联系_联系我_管理().获取企业已配置的_联系我_列表()
start时间戳 = datetime(year=2026, month=1, day=1).timestamp()
wecom客户联系_联系我_管理(addres_省="江苏省", address_市="泰州市", address_区县="海陵区").最终处理完整的企微二维码信息(start时间戳=start时间戳) # wecom客户联系_联系我_管理().删除企业已配置的_联系我_方式(config_id="13ee9dcd9a4f7a50ab0f293af90daf3c")