fix: 新订单服务号模板改为两字段并换新模板ID

对齐「新订单待受理通知」:short_thing4 游戏类型、thing15 下单项目;不改动广播触发点。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-21 16:27:12 +08:00
parent ab3b9f21b5
commit f36db77f6b

View File

@@ -9,6 +9,11 @@ from users.models import OfficialAccountUser
logger = logging.getLogger('weixin_broadcast') logger = logging.getLogger('weixin_broadcast')
# 服务号模板「新订单待受理通知」(类目:休闲娱乐)
# 字段:游戏类型 short_thing4、下单项目 thing15
ORDER_NOTIFY_TEMPLATE_ID = 'jZ73G_0KbmFK864WVUr0QABDc0EfsjeXXLPS86Vwo-4'
class WeixinBroadcastSender: class WeixinBroadcastSender:
""" """
微信模板消息广播发送器 - 调试版 微信模板消息广播发送器 - 调试版
@@ -17,7 +22,7 @@ class WeixinBroadcastSender:
def __init__(self): def __init__(self):
self.appid = getattr(settings, 'WEIXIN_OFFICIAL_APPID', '') self.appid = getattr(settings, 'WEIXIN_OFFICIAL_APPID', '')
self.secret = getattr(settings, 'WEIXIN_OFFICIAL_SECRET', '') self.secret = getattr(settings, 'WEIXIN_OFFICIAL_SECRET', '')
self.template_id = getattr(settings, 'WEIXIN_TEMPLATE_ID', '') self.template_id = ORDER_NOTIFY_TEMPLATE_ID
# 发送控制参数 # 发送控制参数
self.batch_size = 100 self.batch_size = 100
@@ -50,48 +55,32 @@ class WeixinBroadcastSender:
def build_order_message_data(self, order_info): def build_order_message_data(self, order_info):
""" """
构建订单消息数据 - 【调试关键点1】 构建「新订单待受理通知」模板数据。
打印传入的 order_info 和构建出的最终数据 short_thing4=游戏类型最多5字thing15=下单项目/描述最多20字
""" """
# 🟡 调试点1打印传入的参数 logger.info(
logger.info(f"🟡【调试-输入】build_order_message_data 收到的 order_info: {json.dumps(order_info, ensure_ascii=False, indent=2)}") f"🟡【调试-输入】build_order_message_data 收到的 order_info: "
f"{json.dumps(order_info, ensure_ascii=False, indent=2)}"
)
game_type = str(order_info.get('game_type') or '游戏订单').strip() or '游戏订单'
order_desc = str(order_info.get('order_desc') or '新订单').strip() or '新订单'
# 这是你现在的构建逻辑,我们原样保留但加上调试
# 注意这里保持你目前的字段名short_thing5, short_thing4, thing15, amount8
data = { data = {
"short_thing5": {
"value": order_info.get('order_type', '平台发单'),
"color": "#173177"
},
"short_thing4": { "short_thing4": {
"value": order_info.get('game_type', '游戏订单'), "value": game_type[:5],
"color": "#173177" "color": "#173177",
}, },
"thing15": { "thing15": {
"value": str(order_info.get('order_desc', '新订单'))[:20], "value": order_desc[:20],
"color": "#173177" "color": "#173177",
}, },
"amount8": {
"value": f"{order_info.get('amount', '0')}",
"color": "#173177"
}
} }
# 🟡 调试点2打印构建出的最终数据结构 logger.info("🟡【调试-输出】构建完成的模板数据 data 字段:")
logger.info(f"🟡【调试-输出】构建完成的模板数据 data 字段:")
for key, content in data.items(): for key, content in data.items():
logger.info(f" 字段名: '{key}' -> 值: '{content.get('value', '')}'") logger.info(f" 字段名: '{key}' -> 值: '{content.get('value', '')}'")
logger.info(f"🟡【调试-输出】完整 data 结构: {json.dumps(data, ensure_ascii=False)}") logger.info(f"🟡【调试-输出】完整 data 结构: {json.dumps(data, ensure_ascii=False)}")
# 🔴 关键检查:确认 short_thing5 是否存在,值是否为空
if 'short_thing5' not in data:
logger.error("❌【致命错误】构建的数据中根本没有 'short_thing5' 这个字段!")
else:
st5_value = data['short_thing5'].get('value', '')
if not st5_value:
logger.error(f"❌【致命错误】'short_thing5' 字段的值为空!")
else:
logger.info(f"'short_thing5' 字段存在,值为: '{st5_value}'")
return data return data