65 lines
3.1 KiB
Python
65 lines
3.1 KiB
Python
import hashlib
|
|
import hmac
|
|
from datetime import datetime
|
|
from zoneinfo import ZoneInfo
|
|
|
|
import pydash
|
|
from pydantic import BaseModel, Field
|
|
from ulid import ULID
|
|
|
|
from wechat_微信支付证书.江苏六果科技有限公司支付证书.江苏六果科技有限公司支付参数 import sixpay六果科技公司
|
|
|
|
|
|
class stock发送代金券功能(BaseModel):
|
|
# demo_必填: int = Field(..., description="描述") # 必传属发生
|
|
# demo_可选: Optional[int] = None # 可选值
|
|
# demo_默认值: int = Field(default=100001, description="描述") # 有默认值
|
|
# demo_联合类型: Literal["xiao", "zizi"] = Field(..., description="描述")
|
|
pass
|
|
stock_id_代金券批次号: str = Field(..., description="发放代金券是创建的批次号")
|
|
|
|
def send发券并返回前端需要的数据(self):
|
|
"""前端请求:将这个字典对象返回给前端,前端调用小程序原生插件领取券"""
|
|
pass
|
|
# 第一步:准备数据
|
|
out_request_no = str(ULID()) # 商家侧的发券订单号
|
|
rfc3339 = datetime.now().astimezone(tz=ZoneInfo("Asia/Shanghai")).isoformat() # 代金券发券时的时间,因为代金券设置了起效的时间
|
|
mchid = sixpay六果科技公司.mchid
|
|
apiv2_key = sixpay六果科技公司.apiv2
|
|
# 第二步: 创建好需要的数据并验名
|
|
params每一张券需要验名的数据格式 = {
|
|
"out_request_no0": out_request_no, # 商家侧的发券订单号
|
|
"stock_id0": "22512292", # 代金券创建的批次号
|
|
"send_coupon_merchant": mchid, # 发券的商家商户号
|
|
# 如果是支付券,必须包含此项并参与签名;商家券则去掉
|
|
"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}"
|
|
# # 4. 生成 HMAC-SHA256 签名并转大写
|
|
sign = hmac.new(key=apiv2_key.encode("utf-8"), msg=sign_str.encode("utf-8"), digestmod=hashlib.sha256, ).hexdigest().upper()
|
|
# 3. 拼接参数串
|
|
params = {
|
|
"out_request_no": out_request_no,
|
|
"stock_id": "22512292",
|
|
"create_coupon_merchant": sixpay六果科技公司.mchid,
|
|
"customize_send_time": rfc3339,
|
|
"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,
|
|
}
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(00000000)
|