支付宝的模板消息分为三类:订阅类、交易类和表单类。其中订阅类显而易见,需要用户的授权才能推送,也就是说小程序需要调起用户授权这样的显式弹框。

参考其他同类产品,发现有的小程序存在静默授权的情况,即不用调起授权也可以发送模板消息的情况。研究了一会儿,能发现的只是小程序设置里的「消息管理」的「接收消息提醒」在新用户使用时默认是打开的。

一开始尝试创建的是交易类的模板消息,但发现预授权冻结订单只有在转支付后才会有 tradeNo 字段(作为 form_id 入参提交),其他订单免费的情况(撤销或完全解冻)都没有 tradeNo。提交错误的 tradeNo 会报错:tradeNo只能发送给实际付款人。这样的话,交易类的模板消息应用范围就不适合当前的情况了。

转而创建订阅类的模板消息,但显而易见也不能成功,提示用户未授权,发送失败。

最后的最后,还是表单类的模板消息最适合了。在申请业务流程中存储 form_id,然后需要的时候发送模板消息。需要注意的是,表单类的模板消息也有限制,最长有效期为 7 天,一个 form_id 最多使用 3 次。