很多人以为微信模板消息的参数匹配就是照着模板ID填进去就行,结果发出去的消息要么显示“参数错误”,要么内容乱成一团。真正做对这件事,得先吃透微信接口那套规则——参数名、参数类型、常量与变量的区别,哪一步出岔子,推送就白费了。
微信模板消息的最终呈现,靠的是模板中定义的占位符与开发者传入的数据一一对应。每个占位符都有固定的 key(比如 thing1、number2、time3),而你得在代码里按模板顺序传入对应的值。搞错 key 或类型,微信直接拒绝发送。
微信模板消息的参数按数据类型分为 thing(文字)、number(数字)、time(时间)、date(日期)、keyword(关键词)等。注意:同一个模板里,即使有两个 thing 类型,它们的 key 也不一样——thing1 和 thing2 不能互换。很多开发者看到模板显示 {{thing1.DATA}},就只填 thing,丢掉了后面的序号,结果匹配失败。正确的做法是从模板详情里复制完整的 thing1、thing2 这样的 key 值,一个字符都不能错。
这是最容易踩坑的地方。模板里有些参数可能是固定的内容,比如“感谢您的购买”这种不会变的文案。微信允许在模板中设置“常量参数”,你不需要传入动态值,但必须在模板编辑时直接写死。如果你在主题或后台设置里看到了“常量”标识,却还是用变量传入,就会导致参数数量不匹配,推送失败。正确做法是:常量参数直接在模板文案里写好,不在传入字段里出现;变量参数才逐个对应 key 传入。
微信接口要求你传入的参数个数必须等于模板中定义的可变参数个数,多了少了都不行。假设你的模板有 thing1、number2 两个占位符,你就只能传两个值,按 thing1 在前、number2 在后的顺序。反过来,如果你想推送“新订单通知”,主题后台可能列了四个参数(商品名称、金额、付款时间、订单号),但你在微信模板里只找到三个匹配的,这时宁可重新搜索更贴近的模板,也不要硬凑四个参数。因为微信会按顺序匹配,一旦参数 key 或类型对不上,整个推送就失效。
拿到模板 ID 后,先在微信公众平台点开模板详情,把每个占位符的 key 和类型抄下来。然后在你的代码或主题设置里,按顺序填入对应的值。测试时用真实的订单数据跑一次,观察用户收没收到,内容是否正常。如果看到“参数格式错误”的提示,90% 是 key 写错了或者常量参数多传了。别嫌麻烦,这个核对过程只要认真走一遍,后续所有模板消息都能一通百通。
数据来源自互联网
参与讨论
参数类型不对也会报错
对,类型不匹配一样报错,踩过这个坑
常量参数那个坑真踩过,直接在模板写死就对了。
以前老报错,原来是key没写全
key少一位都不行
测试太重要了,避免踩坑
没错,多测几次才能发现问题
原来key不能丢序号啊
这坑我之前也踩过
看到“参数格式错误”直接血压升高?
老司机路过,这东西弄过一次后面都一个套路
感觉最坑的是常量参数不能用变量传,硬凑参数就报错
试过用真实订单测,结果手机收不到,原来是模板ID过期了
微信这规则就不能人性化点吗
搞开发的看这个应该秒懂,小白表示头疼
有没有更简单的工具能自动校验参数?
我之前就是多了个空格,查了半天?
说来说去就是复制模板里的key别自己脑补,这我信了
那常量参数到底在哪设置啊?公众号后台没找到
之前遇到thing1和thing2搞混,推送全挂了,气死
每次填参数都提心吊胆,生怕key写错一个字母?