six_003
This commit is contained in:
@@ -33,11 +33,10 @@ class ems_parameters物流的状态(BaseModel):
|
||||
|
||||
|
||||
class ems邮政物流工具(BaseModel):
|
||||
# ems_biz_id: str = "1100244903172"
|
||||
# ems_delivery_id: str = "EMS"
|
||||
ems_password: str = "xiao@792282"
|
||||
ems_biz_id: str = Field("test_biz_id", description="ems_biz_id")
|
||||
ems_delivery_id: str = Field("TEST", description="ems_biz_id")
|
||||
# ems_biz_id = Field(default="1100244903172", description="发放代金券是创建的批次号")
|
||||
# ems_delivery_id: str = Field(default="EMS", description="发放代金券是创建的批次号")
|
||||
ems_biz_id: str = Field(default="test_biz_id", description="ems_biz_id")
|
||||
ems_delivery_id: str = Field(default="TEST", description="ems_biz_id")
|
||||
|
||||
def ems发件人信息(self):
|
||||
ems发件人信息数据 = {
|
||||
@@ -61,9 +60,9 @@ class ems邮政物流工具(BaseModel):
|
||||
cityName = pydash.get(obj=orderData, path="order用户配送地址.address.cityName") # 市
|
||||
countyName = pydash.get(obj=orderData, path="order用户配送地址.address.countyName") # 区
|
||||
detailInfoNew = pydash.get(obj=orderData, path="order用户配送地址.address.detailInfoNew") # 详细地址
|
||||
telNumber = pydash.get(obj=orderData, path="order用户配送地址.address.telNumber") # 详细地址
|
||||
telNumber = pydash.get(obj=orderData, path="order用户配送地址.address.telNumber") # 联系电放
|
||||
detailInfo = pydash.get(obj=orderData, path="order用户配送地址.address.detailInfo") # 详细地址
|
||||
userName = pydash.get(obj=orderData, path="order用户配送地址.address.userName") # 详细地址
|
||||
userName = pydash.get(obj=orderData, path="order用户配送地址.address.userName") # 收件人昵称
|
||||
nationalCode = pydash.get(obj=orderData, path="order用户配送地址.address.nationalCode") # 详细地址
|
||||
print("\n🍎 🍏 🍊 🍎 🍏 🍊 🍎 🍏 🍊 🍎 🍏 🍊 🍎 🍏 \n", telNumber)
|
||||
return {
|
||||
@@ -213,14 +212,7 @@ class ems邮政物流工具(BaseModel):
|
||||
"action_type": action_type,
|
||||
"action_msg": action_msg,
|
||||
}
|
||||
print("打印 一下模拟的数据,主要就是看一下时间戳的问题", 模拟数据)
|
||||
data = requests.post(url=模拟更新物流状态,
|
||||
data=orjson.dumps(模拟数据, option=orjson.OPT_SORT_KEYS, ).decode(encoding="utf-8"))
|
||||
print("🍎 🍏 🍊 🍎 🍏 🍊 🍎 🍏 🍊 🍎 🍏 🍊 🍎 🍏 ", data.json())
|
||||
|
||||
def 查询运单轨迹(self, order物流商家侧订单号):
|
||||
""""""
|
||||
mini_token = sixToken.get_mini_token()
|
||||
requests.post(url=模拟更新物流状态, data=orjson.dumps(模拟数据, option=orjson.OPT_SORT_KEYS, ).decode(encoding="utf-8"))
|
||||
|
||||
def 更新物流快递数据(self, order物流公司订单编号, ):
|
||||
""""""
|
||||
@@ -292,20 +284,21 @@ class ems邮政物流工具(BaseModel):
|
||||
订单更新对象.order物流状态 = "已确认"
|
||||
订单更新对象.save()
|
||||
# 备注一下返回数据类型
|
||||
responseDataa = {'ToUserName': 'gh_f754c53eb962', 'FromUserName': 'ohQkD7HmLYEYrFjFau6juOhduRU8', 'CreateTime': 1784666355, 'MsgType': 'event', 'Event': 'trade_manage_order_settlement',
|
||||
'transaction_id': '4200003114202607213777723688', 'merchant_id': '1700383419', 'sub_merchant_id': '', 'merchant_trade_no': 'OAT01KY1BZ3T9SFSSRNS10R95B5XH', 'pay_time': 1784605024,
|
||||
'shipped_time': 1784666354,
|
||||
'estimated_settlement_time': 1784839154
|
||||
}
|
||||
# responseDataa = {'ToUserName': 'gh_f754c53eb962', 'FromUserName': 'ohQkD7HmLYEYrFjFau6juOhduRU8', 'CreateTime': 1784666355, 'MsgType': 'event', 'Event': 'trade_manage_order_settlement',
|
||||
# 'transaction_id': '4200003114202607213777723688', 'merchant_id': '1700383419', 'sub_merchant_id': '', 'merchant_trade_no': 'OAT01KY1BZ3T9SFSSRNS10R95B5XH', 'pay_time': 1784605024,
|
||||
# 'shipped_time': 1784666354,
|
||||
# 'estimated_settlement_time': 1784839154
|
||||
# }
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 当脚本直接运行时执行的代码
|
||||
# ems邮政物流工具().生成运单(out_trade_no商家侧支付订单号="")
|
||||
ems邮政物流工具().模拟更新订单状态(order物流公司订单编号="EMS01KZAH47JZA3HCY2R5NS0WD3VN_waybill_id", action_type=100001, action_msg="揽件成功")
|
||||
order物流公司订单编号 = "EMS01KZBJBPHFR9E924DKDW86CGJT_waybill_id"
|
||||
ems邮政物流工具().模拟更新订单状态(order物流公司订单编号=order物流公司订单编号, action_type=100001, action_msg="揽件成功")
|
||||
time.sleep(30)
|
||||
ems邮政物流工具().模拟更新订单状态(order物流公司订单编号="EMS01KZAH47JZA3HCY2R5NS0WD3VN_waybill_id", action_type=300002, action_msg="开始派送")
|
||||
ems邮政物流工具().模拟更新订单状态(order物流公司订单编号=order物流公司订单编号, action_type=300002, action_msg="开始派送")
|
||||
time.sleep(30)
|
||||
|
||||
ems邮政物流工具().模拟更新订单状态(order物流公司订单编号="EMS01KZAH47JZA3HCY2R5NS0WD3VN_waybill_id", action_type=300003, action_msg="签收成功")
|
||||
ems邮政物流工具().模拟更新订单状态(order物流公司订单编号=order物流公司订单编号, action_type=300003, action_msg="签收成功")
|
||||
# ems邮政物流工具().更新物流快递数据(order物流公司订单编号="EMS01KZAD94RDQFQBVVX705YNH6SE_waybill_id")
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
class wecom推广二维码:
|
||||
@classmethod
|
||||
def 设置授权应用可见范围(cls):
|
||||
"""
|
||||
调用该接口前提是开启通讯录迁移,收到授权成功通知后可调用。企业注册初始化安装应用后,应用默认可见范围为根部门。
|
||||
如需修改应用可见范围,服务商可以调用该接口设置授权应用的可见范围。
|
||||
该接口只能使用注册完成回调事件或者查询注册状态返回的access_token,
|
||||
调用设置通讯录同步完成后或者access_token超过30分钟失效(即解除通讯录锁定状态)则不能继续调用该接口
|
||||
:return:
|
||||
:rtype:
|
||||
"""
|
||||
@@ -1,63 +0,0 @@
|
||||
import dataclasses
|
||||
|
||||
import jmespath
|
||||
import pydash
|
||||
import requests
|
||||
from asgiref.sync import async_to_sync
|
||||
from channels.layers import get_channel_layer
|
||||
|
||||
from sixGuoDjango import redis_5
|
||||
from wechat_项目工具包.企业微信工具包.客户管理 import wecom客户管理
|
||||
from wechat_项目工具包.企业微信工具包.消息推送工具 import wecom消息推送
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class six企微回调业务处理方法():
|
||||
pass
|
||||
|
||||
def 添加企业客户事件(self, as_data):
|
||||
""""""
|
||||
"""
|
||||
添加企业客户事件
|
||||
参数 说明 配置了客户联系功能的成员添加外部联系人时,回调该事件
|
||||
ToUserName 企业微信CorpID
|
||||
FromUserName 此事件该值固定为sys,表示该消息由系统生成
|
||||
CreateTime 消息创建时间 (整型)
|
||||
MsgType 消息的类型,此时固定为event
|
||||
Event 事件的类型,此时固定为change_external_contact
|
||||
ChangeType 此时固定为add_external_contact
|
||||
UserID 企业服务人员的UserID
|
||||
ExternalUserID 外部联系人的userid,注意不是企业成员的账号
|
||||
State 添加此用户的「联系我」方式配置的state参数,或在获客链接中指定的customer_channel参数,可用于识别添加此用户的渠道
|
||||
WelcomeCode 欢迎语code,可用于发送欢迎语
|
||||
"""
|
||||
# 这是用户在添加企微好友成功时的回调信息;
|
||||
ToUserName = pydash.get(obj=as_data, path="xml.ToUserName") # toUser 企业微信CorpID
|
||||
FromUserName = pydash.get(obj=as_data, path="xml.FromUserName") # sys 此事件该值固定为sys,表示该消息由系统生成
|
||||
CreateTime = pydash.get(obj=as_data, path="xml.CreateTime") # 1403610513 消息创建时间 (整型)
|
||||
MsgType = pydash.get(obj=as_data, path="xml.MsgType") # event 消息的类型,此时固定为event
|
||||
Event = pydash.get(obj=as_data, path="xml.Event") # change_external_contact 事件的类型,此时固定为change_external_contact
|
||||
ChangeType = pydash.get(obj=as_data, path="xml.ChangeType") # add_external_contact 此时固定为add_external_contact
|
||||
UserID = pydash.get(obj=as_data, path="xml.UserID") # UserID 企业服务人员的UserID
|
||||
ExternalUserID = pydash.get(obj=as_data, path="xml.ExternalUserID", ) # woAJ2GCAAAXtWyujaWJHDDGi0mAAAA 外部联系人的userid,注意不是企业成员的账号
|
||||
State = pydash.get(obj=as_data, path="xml.State", ) # teststate 添加此用户的「联系我」方式配置的state参数,或在获客链接中指定的customer_channel参数,可用于识别添加此用户的渠道
|
||||
WelcomeCode = pydash.get(obj=as_data, path="xml.WelcomeCode") # WELCOMECODE 欢迎语code,可用于发送欢迎语
|
||||
# 发送欢迎语
|
||||
print("添加企业客户事件")
|
||||
|
||||
res_welcom_code = wecom消息推送.发送新客户欢迎语(CALLBACK_CODE=WelcomeCode)
|
||||
# 获取用户的 unionid (主要就是获取用户的unionid的值)
|
||||
res = wecom客户管理.获取客户详情(external_userid=ExternalUserID)
|
||||
print(res)
|
||||
unionid = jmespath.search(data=res, expression="external_contact.unionid")
|
||||
print(unionid)
|
||||
wecom_pay_data = requests.post(url="https://xiao.sixgou.com/demopay/transfer/", json={"unionid": unionid})
|
||||
# 存储数据(用户添加后的数据)
|
||||
print("打印数据类型", wecom_pay_data.json())
|
||||
print("打印数据类型", type(wecom_pay_data.json()))
|
||||
payData = wecom_pay_data.json()
|
||||
channels_name = redis_5.get(name=unionid)
|
||||
default_channel_layer = get_channel_layer(alias="default")
|
||||
async_to_sync(awaitable=default_channel_layer.send)(channel=channels_name, message={"type": "chat_subMsg", "data": payData})
|
||||
pass
|
||||
# 调用发红包的功能
|
||||
@@ -2,6 +2,7 @@
|
||||
import os
|
||||
|
||||
import django
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from sixGuoDjango.settings import BASE_DIR
|
||||
from wechat_token.token工具包 import sixToken
|
||||
@@ -9,40 +10,36 @@ from wechat_token.token工具包 import sixToken
|
||||
os.environ.setdefault(key="DJANGO_SETTINGS_MODULE", value=f"{BASE_DIR.name}.settings")
|
||||
django.setup()
|
||||
|
||||
import datetime
|
||||
|
||||
import jmespath
|
||||
import requests
|
||||
|
||||
from requests import post
|
||||
|
||||
|
||||
class wecom管理企业标签:
|
||||
class wecom管理企业标签(BaseModel):
|
||||
"""
|
||||
管理企业标签
|
||||
最后更新:2023/12/01
|
||||
企业客户标签是针对企业的外部联系人进行标记和分类的标签,由企业统一配置后,企业成员可使用此标签对客户进行标记。
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def 获取企业标签库(cls):
|
||||
wecom_token: str = sixToken.get_wecom_token()
|
||||
agentid: str = Field(default="1000025", description="agentid")
|
||||
|
||||
def 获取企业标签库(self, ):
|
||||
"""
|
||||
在这里返回结果为:企业微信创建的所有的企业标签,不包含个人标签
|
||||
企业可通过此接口获取企业客户标签详情。请求方式: POST(HTTP)
|
||||
"""
|
||||
pass
|
||||
wecom_token = sixToken.get_wecom_token()
|
||||
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_corp_tag_list?access_token={wecom_token}"
|
||||
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_corp_tag_list?access_token={self.wecom_token}"
|
||||
data = post(url=uri).json()
|
||||
print(data)
|
||||
tag_group = jmespath.search(data=data, expression="tag_group")
|
||||
for tag in tag_group:
|
||||
print(tag)
|
||||
|
||||
|
||||
return data
|
||||
|
||||
@classmethod
|
||||
def 添加企业客户标签(cls):
|
||||
|
||||
def 添加企业客户标签(self):
|
||||
"""
|
||||
企业可通过此接口向客户标签库中添加新的标签组和标签,每个企业最多可配置10000个企业标签。
|
||||
注意:
|
||||
@@ -55,33 +52,26 @@ class wecom管理企业标签:
|
||||
:return:
|
||||
:rtype:
|
||||
"""
|
||||
wecom_token = sixToken.get_wecom_token()
|
||||
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_corp_tag?access_token={wecom_token}"
|
||||
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_corp_tag?access_token={self.wecom_token}"
|
||||
请求数据示例 = {
|
||||
"group_id": "etj4zANAAA1Zh_RyLIpjOr6IbuMPRB8g", # 否 标签组id
|
||||
# "group_name": "泰州市", # 否 标签组名称,最长为30个字符
|
||||
"group_name": "我的新标签组",
|
||||
"order": 1,
|
||||
"tag": [
|
||||
{
|
||||
"name": "未知", # 是 添加的标签名称,最长为30个字符
|
||||
"order": 1, # 否 标签次序值。order值大的排序靠前。有效的值范围是[0, 2^32)
|
||||
},
|
||||
],
|
||||
# "agentid": 1000014, # 授权方安装的应用agentid。仅旧的第三方多应用套件需要填此参数
|
||||
{"name": "标签1", "order": 1},
|
||||
{"name": "标签2", "order": 2}
|
||||
]
|
||||
}
|
||||
data = post(url=uri, json=请求数据示例).json()
|
||||
print(data)
|
||||
|
||||
@classmethod
|
||||
def 编辑客户企业标签(cls, userid: str, external_userid: str, add_tag: str):
|
||||
|
||||
def 编辑客户企业标签(self, userid: str, external_userid: str, add_tag: str):
|
||||
"""
|
||||
企业可通过此接口为指定成员的客户添加上由企业统一配置的标签;注意,每个成员对同一个客户最多可以添加3000个标签。
|
||||
:return:
|
||||
:rtype:
|
||||
"""
|
||||
|
||||
wecom_token = sixToken.get_wecom_token()
|
||||
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/mark_tag?access_token={wecom_token}"
|
||||
|
||||
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/mark_tag?access_token={self.wecom_token}"
|
||||
请求数据示例 = {
|
||||
# "userid": "YuanBao1975", # 是 添加外部联系人的userid
|
||||
"userid": userid, # 是 添加外部联系人的userid
|
||||
@@ -93,32 +83,23 @@ class wecom管理企业标签:
|
||||
}
|
||||
data = post(url=uri, json=请求数据示例).json()
|
||||
print(data)
|
||||
|
||||
@classmethod
|
||||
def 更新所有的企业标签并存储到数据库(cls):
|
||||
|
||||
def 删除企业客户标签(self, 标签组ID, 标签子标签ID=None):
|
||||
pass
|
||||
data = cls.获取企业标签库()
|
||||
tag_group = jmespath.search(data=data, expression="tag_group", )
|
||||
for tag_list in tag_group:
|
||||
print(tag_list)
|
||||
# tag_list = jmespath.search(data=tag_list, expression="tag", )
|
||||
group_id = jmespath.search(data=tag_list, expression="group_id", )
|
||||
group_name = jmespath.search(data=tag_list, expression="group_name", )
|
||||
create_time = jmespath.search(data=tag_list, expression="create_time", )
|
||||
# create_time = pydash.get(obj=tag_list, path="create_time", )
|
||||
# 需要将时间戳转为时间格式
|
||||
print(create_time, "========", )
|
||||
create_time_1 = datetime.datetime.fromtimestamp(create_time)
|
||||
#
|
||||
|
||||
tag_child_list = jmespath.search(data=tag_list, expression="tag", )
|
||||
|
||||
@classmethod
|
||||
def 更新所有的用户性别组标签(cls):
|
||||
"""删除已经创建的 企业标签 tag_id和group_id不可同时为空。如果一个标签组下所有的标签均被删除,则标签组会被自动删除"""
|
||||
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/del_corp_tag?access_token={self.wecom_token}"
|
||||
删除的数据 = {
|
||||
# "tag_id": [],
|
||||
"group_id": [标签组ID],
|
||||
}
|
||||
postData = requests.post(url=uri, json=删除的数据)
|
||||
print(postData.text)
|
||||
# print(postData.json())
|
||||
|
||||
def 更新所有的用户性别组标签(self):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def 打标签性别(cls, userid: str, external_userid: str, gender: int):
|
||||
|
||||
def 打标签性别(self, userid: str, external_userid: str, gender: int):
|
||||
"""
|
||||
:param gender:
|
||||
:type gender:
|
||||
@@ -129,22 +110,24 @@ class wecom管理企业标签:
|
||||
"""
|
||||
print("单独更新用户性别标签")
|
||||
if gender == 1:
|
||||
cls.编辑客户企业标签(
|
||||
self.编辑客户企业标签(
|
||||
userid=userid, external_userid=external_userid,
|
||||
add_tag="et74kdKAAAO9rCHIG-GcT7ZU_gsTslkg",
|
||||
)
|
||||
if gender == 2:
|
||||
cls.编辑客户企业标签(
|
||||
self.编辑客户企业标签(
|
||||
userid=userid, external_userid=external_userid,
|
||||
add_tag="et74kdKAAAJUou62OZwyu3LeavfmxAhw",
|
||||
)
|
||||
if gender == 0:
|
||||
cls.编辑客户企业标签(
|
||||
self.编辑客户企业标签(
|
||||
userid=userid, external_userid=external_userid,
|
||||
add_tag="et74kdKAAAI_VNWc-Gzakmo_jGnK-Glw",
|
||||
)
|
||||
|
||||
def 给个微好友打标签(self):
|
||||
|
||||
def 给个微好友打标签(self, userID企微员工账号, external_userid要打标签的好友ID, add_tag要给好友添加的标签ID, remove_tag要对好友删除的标签ID=None):
|
||||
if remove_tag要对好友删除的标签ID is None:
|
||||
remove_tag要对好友删除的标签ID = []
|
||||
pass
|
||||
uri = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/mark_tag"
|
||||
请求数据 = {
|
||||
@@ -153,16 +136,13 @@ class wecom管理企业标签:
|
||||
"add_tag": ["et74kdKAAAO9rCHIG-GcT7ZU_gsTslkg"], # 测试标签ID
|
||||
# "remove_tag": ["et74kdKAAAO9rCHIG-GcT7ZU_gsTslkg"] # 删除企业微信好友的 标签
|
||||
}
|
||||
wecom_token = sixToken.get_wecom_token()
|
||||
response_data = requests.post(url=uri, params={"access_token": wecom_token}, json=请求数据)
|
||||
response_data = requests.post(url=uri, params={"access_token": self.wecom_token}, json=请求数据)
|
||||
print(response_data.json())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
pass
|
||||
wecom管理企业标签.获取企业标签库()
|
||||
# wecom管理企业标签.添加企业客户标签()
|
||||
# wecom管理企业标签.更新所有的用户性别组标签()
|
||||
# wecom管理企业标签.更新所有的企业标签并存储到数据库()
|
||||
# wecom管理企业标签.获取企业标签库()
|
||||
# wecom管理企业标签().给个微好友打标签()
|
||||
|
||||
wecom管理企业标签().获取企业标签库()
|
||||
# wecom管理企业标签().删除企业客户标签(标签组ID="etj4zANAAA1Zh_RyLIpjOr6IbuMPRB8g")
|
||||
# wecom管理企业标签().添加企业客户标签()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import hashlib
|
||||
import hmac
|
||||
from datetime import datetime
|
||||
from typing import Literal
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import pydash
|
||||
@@ -8,6 +9,18 @@ from pydantic import BaseModel, Field
|
||||
from ulid import ULID
|
||||
|
||||
from wechat_微信支付证书.江苏六果科技有限公司支付证书.江苏六果科技有限公司支付参数 import sixpay六果科技公司
|
||||
from wechat_数据库.微信支付券.代金券数据库 import stock券数据表
|
||||
|
||||
|
||||
class stock券的状态(BaseModel):
|
||||
demo_必填: int = Field(..., description="描述") # 必传属发生
|
||||
|
||||
# demo_可选: Optional[int] = None # 可选值
|
||||
# demo_默认值: int = Field(default=100001, description="描述") # 有默认值
|
||||
# demo_联合类型: Literal["xiao", "zizi"] = Field(..., description="描述")
|
||||
|
||||
def model_post_init(self, __context):
|
||||
print("初始化完成,自动调用 model_post_init")
|
||||
|
||||
|
||||
class stock发送代金券功能(BaseModel):
|
||||
@@ -17,8 +30,11 @@ class stock发送代金券功能(BaseModel):
|
||||
# demo_联合类型: Literal["xiao", "zizi"] = Field(..., description="描述")
|
||||
pass
|
||||
stock_id_代金券批次号: str = Field(..., description="发放代金券是创建的批次号")
|
||||
stock券的状态: Literal["待领券", "已领券"] = Field(..., description="stock券的状态")
|
||||
stock券待领券: Literal["待领券", "已领券"] = Field(default="待领券", description="stock券的状态")
|
||||
stock券已领券: Literal["待领券", "已领券"] = Field(default="已领券", description="stock券的状态")
|
||||
|
||||
def send发券并返回前端需要的数据(self):
|
||||
def send发券并返回前端需要的数据(self, self_mini_openid, self_mini_unionid):
|
||||
"""前端请求:将这个字典对象返回给前端,前端调用小程序原生插件领取券"""
|
||||
pass
|
||||
# 第一步:准备数据
|
||||
@@ -35,12 +51,10 @@ class stock发送代金券功能(BaseModel):
|
||||
"create_coupon_merchant0": mchid, # 发券的商家商户号
|
||||
"customize_send_time0": rfc3339, # 当前的领券的时间
|
||||
}
|
||||
|
||||
# iteratee为0是按key iteratee是以value的值来排序 reverse=False(从小到大) reverse=True(从大到小)
|
||||
sorted_dict = dict(pydash.sort_by(collection=params每一张券需要验名的数据格式.items(), iteratee=0, reverse=False))
|
||||
print(sorted_dict)
|
||||
# 拼接组装好的数据
|
||||
sign_str = "&".join([f"{k}={v}" for k, v in sorted_dict.items() if v]) + f"&key={apiv2_key}"
|
||||
sign_str = pydash.join(array=[f"{key}={value}" for key, value in sorted_dict.items()], separator="&") + f"&key={apiv2_key}"
|
||||
# # 4. 生成 HMAC-SHA256 签名并转大写
|
||||
sign = hmac.new(key=apiv2_key.encode("utf-8"), msg=sign_str.encode("utf-8"), digestmod=hashlib.sha256, ).hexdigest().upper()
|
||||
# 3. 拼接参数串
|
||||
@@ -52,12 +66,24 @@ class stock发送代金券功能(BaseModel):
|
||||
"send_coupon_merchant": sixpay六果科技公司.mchid,
|
||||
}
|
||||
send_coupon_params: list[dict] = [params, ] # 发放代金券需要返回给前端的参数必须为列表 list[dict]
|
||||
return {
|
||||
生成发券的数据 = {
|
||||
"send_coupon_params": send_coupon_params,
|
||||
"sign": sign,
|
||||
"send_coupon_merchant": sixpay六果科技公司.mchid,
|
||||
"suggest_immediate_use": True,
|
||||
}
|
||||
# 最后需要处理一下当前用户的 数据库
|
||||
stock券数据表.objects.update_or_create(stock_商家侧订单号=out_request_no,
|
||||
stock_未领取券的数据=生成发券的数据,
|
||||
stock_批次号=self.stock_id_代金券批次号, stock_use_券状态=self.stock券的状态, stock_归属商户号=mchid,
|
||||
mini_openid=self_mini_openid, mini_unionid=self_mini_unionid, defaults={"stock_use_发券时间": rfc3339})
|
||||
return 生成发券的数据
|
||||
|
||||
def 领券后更新当前券的状态(self, self_mini_openid, self_mini_unionid):
|
||||
pass
|
||||
stock券数据表.objects.filter(mini_openid=self_mini_openid, mini_unionid=self_mini_unionid, stock_批次号=self.stock_id_代金券批次号,
|
||||
stock_use_券状态=self.stock券待领券
|
||||
).update(stock_use_券状态=self.stock券已领券)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -13,7 +13,7 @@ class weiPay服务商电子发票(BaseModel):
|
||||
# demo_联合类型: Literal["xiao", "zizi"] = Field(..., description="描述")
|
||||
|
||||
def model_post_init(self, __context):
|
||||
print("初始化完成,自动调用 model_post_init")
|
||||
pass
|
||||
|
||||
def 获取开通服务商电子发票能力邀请链接(self):
|
||||
pass
|
||||
@@ -23,16 +23,16 @@ class weiPay服务商电子发票(BaseModel):
|
||||
path="/v3/new-tax-control-fapiao/fapiaomerchant/getspinviteurl",
|
||||
query={
|
||||
"operation_type": "AUTH_BINDING",
|
||||
"fapiao_mode": ["TENCENT_DIGITAL_TAX"], # 【开票模式】 邀请商户开通服务商电子发票的可选开票模式
|
||||
"fapiao_mode": ["TENCENT_DIGITAL_TAX"], # 【开票模式】 邀请商户开通服务商电子发票的可选开票模式
|
||||
"fapiao_ability_type_list": ["BASE_ABILITY"],
|
||||
"invite_code": "code_20260805_123", # 必填 【服务商邀请code】 服务商邀请的唯一标识,由服务商生成,可根据邀请code查询邀请开通情况
|
||||
# "sub_mchid": "1700383419"
|
||||
"taxpayer_id":"91321202MAE608K31Q"
|
||||
"taxpayer_id": "91321202MAE608K31Q"
|
||||
}
|
||||
)
|
||||
print(uri)
|
||||
headers = wechatPay(payment=six六果服务商支付参数).构造签名串(uri=str(uri), method="GET")
|
||||
headers.update({"Wechatpay-Serial":"1880A972F4400AF653A108F5F0C7A71585A4338E"})
|
||||
headers.update({"Wechatpay-Serial": "1880A972F4400AF653A108F5F0C7A71585A4338E"})
|
||||
getData = requests.get(url=uri, headers=headers)
|
||||
print(getData.text)
|
||||
|
||||
|
||||
@@ -24,9 +24,9 @@ class miniUser提现状态(BaseModel):
|
||||
# demo_可选: Optional[int] = None # 可选值
|
||||
# demo_默认值: int = Field(default=100001, description="描述") # 有默认值
|
||||
# demo_联合类型: Literal["xiao", "zizi"] = Field(..., description="描述")
|
||||
不可提现: str = Field("不可提现", description="不可提现")
|
||||
可提现: str = Field("可提现", description="可提现")
|
||||
提现中: str = Field("提现中", description="提现中")
|
||||
不可提现: str = Field(default="不可提现", description="不可提现")
|
||||
可提现: str = Field(default="可提现", description="可提现")
|
||||
提现中: str = Field(default="提现中", description="提现中")
|
||||
|
||||
|
||||
class miniUser用户角色(BaseModel):
|
||||
@@ -34,21 +34,21 @@ class miniUser用户角色(BaseModel):
|
||||
# demo_可选: Optional[int] = None # 可选值
|
||||
# demo_默认值: int = Field(default=100001, description="描述") # 有默认值
|
||||
# demo_联合类型: Literal["xiao", "zizi"] = Field(..., description="描述")
|
||||
推广员: str = Field("推广员", description="推广员")
|
||||
企微员工: str = Field("企微员工", description="企微员工")
|
||||
代理商: str = Field("代理商", description="代理商")
|
||||
普通会员: str = Field("普通会员", description="普通会员")
|
||||
用工关系已绑定: str = Field("用工关系已绑定", description="用工关系已绑定")
|
||||
新人红包首次添加企微积分值: int = Field(100, description="新人红包首次添加企微积分值")
|
||||
发券奖励积分值: int = Field(10, description="添加通知好友积分")
|
||||
每日积分积分值: int = Field(50, description="发券奖励积分值")
|
||||
小程序分享积分值: int = Field(10, description="小程序分享积分值")
|
||||
推广员: str = Field(default="推广员", description="推广员")
|
||||
企微员工: str = Field(default="企微员工", description="企微员工")
|
||||
代理商: str = Field(default="代理商", description="代理商")
|
||||
普通会员: str = Field(default="普通会员", description="普通会员")
|
||||
用工关系已绑定: str = Field(default="用工关系已绑定", description="用工关系已绑定")
|
||||
新人红包首次添加企微积分值: int = Field(default=100, description="新人红包首次添加企微积分值")
|
||||
发券奖励积分值: int = Field(default=10, description="添加通知好友积分")
|
||||
每日积分积分值: int = Field(default=50, description="发券奖励积分值")
|
||||
小程序分享积分值: int = Field(default=10, description="小程序分享积分值")
|
||||
|
||||
|
||||
class miniUser积分(BaseModel):
|
||||
share分享者unionidID: str = Field(..., description="分享者的unionid")
|
||||
click点击者unionidID: str = Field(..., description="点击者的的openid")
|
||||
bind绑定的企微unionidID: str = Field("", description="click绑定的企微unionidID")
|
||||
bind绑定的企微unionidID: str = Field(default="", description="click绑定的企微unionidID")
|
||||
|
||||
def update更新用户头像(self):
|
||||
pass
|
||||
@@ -58,32 +58,38 @@ class miniUser积分(BaseModel):
|
||||
# 注意,这里的每日签到: 分享者 同时 也是点击者
|
||||
share分享者对象 = weiuser.objects.get(unionid=self.share分享者unionidID)
|
||||
click点击都对象 = weiuser.objects.get(unionid=self.click点击者unionidID)
|
||||
wecom绑定的企微ID的员工账号 = weiuser.objects.get(unionid=click点击都对象.user_绑定企微UNIONID)
|
||||
print("打印绑定了企微的对象", wecom绑定的企微ID的员工账号)
|
||||
print("---------", click点击都对象.user_绑定企微UNIONID)
|
||||
today当天的日期 = datetime.now(tz=ZoneInfo("Asia/Shanghai")).date()
|
||||
share对象, share布尔值 = share积分表.objects.update_or_create(
|
||||
share分享者unionid=self.share分享者unionidID, share分享者openid=share分享者对象.mini_openid, share点击者openid=click点击都对象.mini_openid, share点击者unionid=self.click点击者unionidID,
|
||||
share分享者积分值=share分享者积分值, share分享类型=share积分类型, share日期=today当天的日期, share积分是否可以提现的状态=miniUser提现状态().可提现,
|
||||
defaults={"share分享者头像": share分享者对象.user_头像, "share分享者昵称": share分享者对象.user_昵称,
|
||||
"share点击者头像": click点击都对象.user_头像, "share点击者昵称": click点击都对象.user_昵称
|
||||
},
|
||||
)
|
||||
if wecom绑定的企微ID的员工账号.user_区县 == click点击都对象.user_区县:
|
||||
share对象, share布尔值 = share积分表.objects.update_or_create(
|
||||
share分享者unionid=self.share分享者unionidID, share分享者openid=share分享者对象.mini_openid, share点击者openid=click点击都对象.mini_openid, share点击者unionid=self.click点击者unionidID,
|
||||
share分享者积分值=share分享者积分值, share分享类型=share积分类型, share日期=today当天的日期, share积分是否可以提现的状态=miniUser提现状态().可提现,
|
||||
defaults={"share分享者头像": share分享者对象.user_头像, "share分享者昵称": share分享者对象.user_昵称,
|
||||
"share点击者头像": click点击都对象.user_头像, "share点击者昵称": click点击都对象.user_昵称
|
||||
},
|
||||
)
|
||||
|
||||
def add添加通知好友积分(self, share积分类型: Literal["通知好友", "发券奖励"], share分享者积分值: int = miniUser用户角色().发券奖励积分值, ):
|
||||
pass
|
||||
"""这个积分对应的是 小程序主页面 分享3元券的图片 """
|
||||
share分享者对象 = weiuser.objects.get(unionid=self.share分享者unionidID)
|
||||
click点击都对象 = weiuser.objects.get(unionid=self.click点击者unionidID)
|
||||
share对象, share布尔值 = share积分表.objects.update_or_create(
|
||||
share分享者unionid=self.share分享者unionidID, share分享者openid=share分享者对象.mini_openid,
|
||||
share点击者openid=click点击都对象.mini_openid, share点击者unionid=self.click点击者unionidID,
|
||||
share分享者积分值=share分享者积分值, share分享类型=share积分类型, share积分是否可以提现的状态=miniUser提现状态().可提现,
|
||||
defaults={"share分享者头像": share分享者对象.user_头像, "share分享者昵称": share分享者对象.user_昵称,
|
||||
"share点击者头像": click点击都对象.user_头像, "share点击者昵称": click点击都对象.user_昵称
|
||||
},
|
||||
)
|
||||
if share布尔值:
|
||||
print("发券奖励积分 添加成功")
|
||||
else:
|
||||
print("发券奖励积分 已经存在领过的")
|
||||
wecom绑定的企微ID的员工账号 = weiuser.objects.get(unionid=click点击都对象.user_绑定企微UNIONID)
|
||||
if share分享者对象.user_区县 == click点击都对象.user_区县 or click点击都对象.user_区县 == wecom绑定的企微ID的员工账号.user_区县:
|
||||
share对象, share布尔值 = share积分表.objects.update_or_create(
|
||||
share分享者unionid=self.share分享者unionidID, share分享者openid=share分享者对象.mini_openid,
|
||||
share点击者openid=click点击都对象.mini_openid, share点击者unionid=self.click点击者unionidID,
|
||||
share分享者积分值=share分享者积分值, share分享类型=share积分类型, share积分是否可以提现的状态=miniUser提现状态().可提现,
|
||||
defaults={"share分享者头像": share分享者对象.user_头像, "share分享者昵称": share分享者对象.user_昵称,
|
||||
"share点击者头像": click点击都对象.user_头像, "share点击者昵称": click点击都对象.user_昵称
|
||||
},
|
||||
)
|
||||
if share布尔值:
|
||||
print("发券奖励积分 添加成功")
|
||||
else:
|
||||
print("发券奖励积分 已经存在领过的")
|
||||
|
||||
def add添加用户分享商品推荐的积分(self, share积分类型: Literal["好物推荐"], share分享者积分值: int, share分享的商品ID: str):
|
||||
pass
|
||||
@@ -91,9 +97,8 @@ class miniUser积分(BaseModel):
|
||||
share分享者对象 = weiuser.objects.get(unionid=self.share分享者unionidID)
|
||||
click点击都对象 = weiuser.objects.get(unionid=self.click点击者unionidID)
|
||||
six六果对象, sixBool = weiuser.objects.get_or_create(unionid="六果")
|
||||
if share分享者对象.parent == six六果对象 or share分享者对象.unionid == click点击都对象.unionid:
|
||||
pass
|
||||
else:
|
||||
wecom绑定的企微ID的员工账号 = weiuser.objects.get(unionid=click点击都对象.user_绑定企微UNIONID)
|
||||
if share分享者对象.user_区县 == click点击都对象.user_区县 or click点击都对象.user_区县 == wecom绑定的企微ID的员工账号.user_区县:
|
||||
share对象, share布尔值 = share积分表.objects.update_or_create(
|
||||
share分享者unionid=self.share分享者unionidID, share分享者openid=share分享者对象.mini_openid,
|
||||
share点击者openid=click点击都对象.mini_openid, share点击者unionid=self.click点击者unionidID,
|
||||
@@ -109,14 +114,16 @@ class miniUser积分(BaseModel):
|
||||
pass
|
||||
share分享者对象 = weiuser.objects.get(unionid=self.share分享者unionidID)
|
||||
click点击都对象 = weiuser.objects.get(unionid=self.click点击者unionidID)
|
||||
share对象, share布尔值 = share积分表.objects.update_or_create(
|
||||
share分享者unionid=share分享者对象.unionid, share分享者openid=share分享者对象.mini_openid,
|
||||
share点击者openid=click点击都对象.mini_openid, share点击者unionid=self.click点击者unionidID,
|
||||
share分享者积分值=share分享者积分值, share分享类型=share积分类型, share积分是否可以提现的状态=miniUser提现状态().可提现,
|
||||
defaults={"share分享者头像": share分享者对象.user_头像, "share分享者昵称": share分享者对象.user_昵称,
|
||||
"share点击者头像": click点击都对象.user_头像, "share点击者昵称": click点击都对象.user_昵称
|
||||
},
|
||||
)
|
||||
wecom绑定的企微ID的员工账号 = weiuser.objects.get(unionid=click点击都对象.user_绑定企微UNIONID)
|
||||
if share分享者对象.user_区县 == click点击都对象.user_区县 or click点击都对象.user_区县 == wecom绑定的企微ID的员工账号.user_区县:
|
||||
share对象, share布尔值 = share积分表.objects.update_or_create(
|
||||
share分享者unionid=share分享者对象.unionid, share分享者openid=share分享者对象.mini_openid,
|
||||
share点击者openid=click点击都对象.mini_openid, share点击者unionid=self.click点击者unionidID,
|
||||
share分享者积分值=share分享者积分值, share分享类型=share积分类型, share积分是否可以提现的状态=miniUser提现状态().可提现,
|
||||
defaults={"share分享者头像": share分享者对象.user_头像, "share分享者昵称": share分享者对象.user_昵称,
|
||||
"share点击者头像": click点击都对象.user_头像, "share点击者昵称": click点击都对象.user_昵称
|
||||
},
|
||||
)
|
||||
|
||||
def add添加好友助力下单返利积分(self, share积分类型: Literal["好友下单"], order支付商家侧订单号):
|
||||
pass
|
||||
@@ -145,7 +152,6 @@ class miniUser积分(BaseModel):
|
||||
share点击者unionid=click点击者unionidID, share点击者openid=click点击都对象.mini_openid,
|
||||
share分享者积分值=order好友下单助力计算后的积分值, share支付订单商家侧的订单号=order支付商家侧订单号,
|
||||
share分享类型=share积分类型, share积分是否可以提现的状态=miniUser提现状态().可提现,
|
||||
|
||||
defaults={"share分享者头像": share分享者对象.user_头像, "share分享者昵称": share分享者对象.user_昵称,
|
||||
"share点击者头像": click点击都对象.user_头像, "share点击者昵称": click点击都对象.user_昵称
|
||||
},
|
||||
@@ -197,7 +203,6 @@ class miniUser积分(BaseModel):
|
||||
click点击都对象.save()
|
||||
# 第一个逻辑,先判断,当前这个添加企微的 用户,是否已经领过红包了,如果领了过了就直接返回了
|
||||
is是否领过红包 = share积分表.objects.filter(share分享者unionid=click点击都对象.unionid, share分享类型="新人红包", share分享者积分值=100).exists()
|
||||
print("打印一下这里的值是不是已经存在了", is是否领过红包)
|
||||
if is是否领过红包:
|
||||
print("当前添加者已经领过新人红包了,直接return")
|
||||
return
|
||||
@@ -213,7 +218,7 @@ class miniUser积分(BaseModel):
|
||||
"share点击者头像": click点击都对象.user_头像, "share点击者昵称": click点击都对象.user_昵称
|
||||
},
|
||||
)
|
||||
print("添加企微者,并且是同城的情况下,可提现状态,", share布尔值)
|
||||
print("添加企微者,并且是同城的情况下,可提现状态,积分添加成功了", share布尔值)
|
||||
# 接着还需要处理,推广员, 并且还得是同城的情况下, 才可以给推广员添加积分了
|
||||
if click点击者父元素.user_角色权限 == miniUser用户角色().推广员 and bindRwecom企微员工对象.user_区县 == click点击者父元素.user_区县 == click点击都对象.user_区县:
|
||||
# 这里的状态为可以提现
|
||||
@@ -225,11 +230,11 @@ class miniUser积分(BaseModel):
|
||||
"share点击者头像": click点击都对象.user_头像, "share点击者昵称": click点击都对象.user_昵称
|
||||
},
|
||||
)
|
||||
print("分享者,可提现状态", share布尔值)
|
||||
print("分享者,可提现状态 推广员,分享积分添加成功了", share布尔值)
|
||||
return
|
||||
# 在这里判断的是 给当前公司的企微推广员, 添加积分
|
||||
if bindRwecom企微员工对象.user_企微角色权限 == miniUser用户角色().企微员工 and bindRwecom企微员工对象.user_区县 == click点击都对象.user_区县:
|
||||
# 这里的状态为可以提现 这里的积分是给企微员工添加的,
|
||||
# 这里的状态为可以提现 这里的积分是给企微员工添加的,这里处理的是: 当前用户的是企微员工时的 积分添加;
|
||||
share对象, share布尔值 = share积分表.objects.update_or_create(
|
||||
share分享者unionid=bindRwecom企微员工对象.unionid, share分享者openid=bindRwecom企微员工对象.mini_openid,
|
||||
share点击者openid=click点击都对象.mini_openid, share点击者unionid=self.click点击者unionidID,
|
||||
@@ -238,7 +243,7 @@ class miniUser积分(BaseModel):
|
||||
"share点击者头像": click点击都对象.user_头像, "share点击者昵称": click点击都对象.user_昵称
|
||||
},
|
||||
)
|
||||
print("企微", share布尔值)
|
||||
print("企微员工,积分添加成功", share布尔值)
|
||||
return
|
||||
|
||||
|
||||
@@ -246,5 +251,5 @@ if __name__ == "__main__":
|
||||
pass
|
||||
# (miniUser积分(share分享者unionidID="", click点击者unionidID="")
|
||||
# .add添加好友助力下单返利积分(order支付商家侧订单号="OAT01KYDESHM9ADEXGY7BW0AVHFSG", share积分类型="好友下单", ))
|
||||
(miniUser积分(share分享者unionidID="oy4Jw6A1T3WkKOOhMxcbQTDSM8rs", click点击者unionidID="oy4Jw6P1FnuTNF-hSoJHNztSAoQ0", bind绑定的企微unionidID="oy4Jw6A1T3WkKOOhMxcbQTDSM8rs")
|
||||
.add添加点击者添加企微员工双向红包积分(share积分类型="新人红包", share分享者二维码state="oy4Jw6A1T3WkKOOhMxcbQTDSM8rs"))
|
||||
(miniUser积分(share分享者unionidID="oy4Jw6P1FnuTNF-hSoJHNztSAoQ0", click点击者unionidID="oy4Jw6P1FnuTNF-hSoJHNztSAoQ0", bind绑定的企微unionidID="oy4Jw6A1T3WkKOOhMxcbQTDSM8rs")
|
||||
.add添加每日积分(share积分类型="每日签到", share分享者积分值=50))
|
||||
|
||||
Reference in New Issue
Block a user