diff --git a/utils/weixin_broadcast.py b/utils/weixin_broadcast.py index 88c1b4e..4893e8a 100644 --- a/utils/weixin_broadcast.py +++ b/utils/weixin_broadcast.py @@ -9,6 +9,11 @@ from users.models import OfficialAccountUser logger = logging.getLogger('weixin_broadcast') +# 服务号模板「新订单待受理通知」(类目:休闲娱乐) +# 字段:游戏类型 short_thing4、下单项目 thing15 +ORDER_NOTIFY_TEMPLATE_ID = 'jZ73G_0KbmFK864WVUr0QABDc0EfsjeXXLPS86Vwo-4' + + class WeixinBroadcastSender: """ 微信模板消息广播发送器 - 调试版 @@ -17,7 +22,7 @@ class WeixinBroadcastSender: def __init__(self): self.appid = getattr(settings, 'WEIXIN_OFFICIAL_APPID', '') 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 @@ -50,48 +55,32 @@ class WeixinBroadcastSender: def build_order_message_data(self, order_info): """ - 构建订单消息数据 - 【调试关键点1】 - 打印传入的 order_info 和构建出的最终数据 + 构建「新订单待受理通知」模板数据。 + short_thing4=游戏类型(最多5字),thing15=下单项目/描述(最多20字)。 """ - # 🟡 调试点1:打印传入的参数 - logger.info(f"🟡【调试-输入】build_order_message_data 收到的 order_info: {json.dumps(order_info, ensure_ascii=False, indent=2)}") + logger.info( + 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 = { - "short_thing5": { - "value": order_info.get('order_type', '平台发单'), - "color": "#173177" - }, "short_thing4": { - "value": order_info.get('game_type', '游戏订单'), - "color": "#173177" + "value": game_type[:5], + "color": "#173177", }, "thing15": { - "value": str(order_info.get('order_desc', '新订单'))[:20], - "color": "#173177" + "value": order_desc[:20], + "color": "#173177", }, - "amount8": { - "value": f"{order_info.get('amount', '0')}元", - "color": "#173177" - } } - # 🟡 调试点2:打印构建出的最终数据结构 - logger.info(f"🟡【调试-输出】构建完成的模板数据 data 字段:") + logger.info("🟡【调试-输出】构建完成的模板数据 data 字段:") for key, content in data.items(): logger.info(f" 字段名: '{key}' -> 值: '{content.get('value', '')}'") 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