小程序里嵌了 web-view 承载活动页,同一笔支付完成后,报表里的订单转化数正好是真单量的两倍,两条记录的时间戳只差四百毫秒。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
wx.miniProgram.postMessage({ data: { event: 'pay_success', orderId } });
// H5 只监听消息,不再调用自己的 track('purchase')
// 服务端 INSERT IGNORE INTO track_event(order_id, ...) VALUES (?, ...)
原生层和 web-view 里的 H5 各引了一套统计 SDK,支付成功回调同时触发两次上报,没有统一的订单号去重。两套 SDK 的匿名 ID 还不一样,报表看不出是同一个人。这一点先确认清楚,后面就不用反复试。
「小程序 H5 重复统计」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
具体做法是,支付成功只在一个层上报,交给原生层,H5 收到原生消息后不再重复发;上报参数带订单号,服务端按订单号建唯一索引,重复的直接丢;两端用同一套用户标识,登录后统一映射到 uid。
改完照着核一遍,同一笔订单在报表里只出现一次,转化数与支付成功回调的次数一致。
