最近有几个客户找到我们,问的都是同一个问题:"微信小程序和公众号能不能打通?怎么打通?"说实话,这个问题看似简单,但实际操作起来坑不少。前阵子我们刚做完一个零售行业的项目,客户希望用户在小程序下单后,公众号能自动推送订单状态。听起来挺顺理成章的吧?结果光是搞清楚微信的接口权限就花了小一周。今天就来聊聊这件事儿。

微信生态里,小程序和公众号的用户标识是不同的。小程序用的是OpenID,公众号用的是另一个OpenID。如果直接用这两个ID,根本对不上号。这时候就需要UnionID了。UnionID是用户在微信开放平台下的唯一标识,只要把小程序和公众号绑定到同一个开放平台账号,就能拿到这个ID。
不过这里有个坑:用户必须已经关注公众号且登录过小程序,才能生成UnionID。没满足条件的话,接口返回的就是空的。我们有个项目就在这栽过跟头,后来是通过引导用户先关注公众号解决的。
公众号的模板消息和小程序的订阅消息,看起来功能类似,但权限和用法完全不一样。模板消息需要用户触发,而且有严格的次数限制;订阅消息更灵活,但需要用户主动授权。
我们的经验是:高频通知用订阅消息,低频重要通知用模板消息。有个客户之前把所有通知都堆在模板消息上,结果一个月就用完了额度,后来调整策略才解决问题。
小程序和公众号的数据同步,可以用微信的云开发数据库,也可以走自己的服务器。如果对实时性要求高,建议用WebSocket;如果不是那么急,定时任务拉取也行。
个人比较推荐云开发方案,省去了服务器维护的麻烦。但要注意,云开发的查询性能有限,数据量大时还是得考虑自建服务。

我们之前做过一个连锁餐饮的项目,客户有20多家门店,希望用户在小程序点单后,公众号能推送取餐码。听起来简单吧?结果对接的时候发现,每家门店的公众号都是独立运营的,连开放平台账号都不一样。
最后的解决方案是:先把所有公众号迁移到同一个主体下,再统一绑定到开放平台。技术实现上,用云函数处理订单状态变更,通过模板消息推送给用户。上线后,取餐环节的投诉减少了将近一半,用户复购率也提升了两成左右。