QQ小程序已经推出好长时间了,但是普及程度较微信小程序差了太多。实际上QQ小程序基本算是复刻了微信小程序,但是不知道是复刻的水平有限还是官方故意为之,QQ小程序也有很多和微信小程序不一样的地方,也有好多微信小程序没有的坑,今天来填一下模板消息的坑。
本来模板消息这个东西照着官方文档去写应该就行了,但是这坑恰恰就在官方文档上,先来看一下官方文档。

再来往下看。

都不用多说,大家仔细对比一下前面的参数说明,appid作为一个必填项,而下面的请求示例里却没有了?
没错,我反复试了无数遍,才发现参数说明压根就是错的。
经过几次新的尝试,我终于成功地把模板消息发出去了,下面是我对官方文档的更正。

附一份代码。
val accessToken = "ACCESS_TOKEN"
val res = Jsoup.connect("https://api.q.qq.com/api/json/template/send?access_token=$accessToken")
.header("content-type","application/json")
.requestBody("""
{
"touser": "OPENID",
"template_id": "TEMPLATE_ID",
"form_id": "FORM_ID",
"data": {
"keyword1": {
"value": "KEYWORD1"
},
"keyword2": {
"value": "KEYWORD2"
}
}
}
""".trimIndent())
.method(Connection.Method.POST)
.ignoreContentType(true)
.execute()
代码是用kotlin+Jsoup写的,和java版本的有点不一样,但是相信大家应该能看懂。
解决问题的过程中在微信小程序社区还有一些博客上看到一些大佬提到openid不属于当前小程序或者配置文件里appid错误之类的问题也会导致40003,这些问题大家也要好好检查一下。
网友评论