小程序码解析

小程序码通过微信私有编码协议生成,只能用微信客户端扫码解析。小程序通过调用 wx.scanCode 方法,可以获取到属主小程序生成小程序码携带的信息。而如果扫的是其他小程序的码,则会被屏蔽 result 字段,只有 rawData 字段经过 base64 解码后,携带有一些信息,这里记录下这部分信息的一些规律。

通过小程序 AppID查 的 “全能扫码” 功能,可以从小程序码图片中获取到解码后的 rawData 信息

以 l 开头的小程序码

unlimit 接口 生成的码,“l” 后紧跟的一位数字,表示最后有几位数字是 scene 的原始数据(未被加密)。

如:l8Kw0~HWs1c=sBGD78.8$y8L4,cp=0 ,是扫场所码得到的,该场所码的 scene 值 id=MD8G8L4,cp=0,后 8 位 8L4,cp=0 就是原始的值。

以 m 开头的小程序码

是赞赏码。如:m01YyY9!OagTRPt?KngpY&2

k 开头和其他

应该就是 limit 接口 生成的码

一些扫码数据

小程序 rawData 解码 scene
赞赏码 m01YyY9!OagTRPt?KngpY&2 未知
场所码 l8Kw0~HWs1c=sBGD78.8$y8L4,cp=0 id=MD8G8L4,cp=0
地铁 kg1g5b_IXJ0E~1nUbVlf20S81IL&s@F#n; id=6DRWFHU,cp=0
自成e家 kheSsuGHDL7I~AIPgxvcbflU6T/dO&7Hm 未知
美团 kbCgFRJGUiVg~1qOa:+1ZTCly7Z5apCx#i 未知
小商店 klGvdEJA8c6c~8TNJ?df@X?(1WcRNE?3. 未知
跨时空 kk2MzNRhsd8g~?VByX4WijpMa7Dw-y:#& 未知
跨时空2 kntzcTxALmmM~&Dc?Nb7$b,,’(rC0u- 未知
跨时空3 kfRZvDYGxyeI~h6=gp/Bm2vxYDJd3M4ix 未知
场所码 l82bkmOs8?1bo47!Ya3xQN?EFU,cp=0 YCN9EFU,cp=0
场所码 l8zPkX=!o0-7!o1xeod9T/8L4,cp=0 YC8G8L4,cp=0
场所码 l82A@Tw(RK4lb7ci(fd9M&3EFU,cp=0 2ZN9EFU,cp=0
场所码 l81aKD,wfz!M@e*HS7z=Zw-EFU,cp=0 MCN9EFU,cp=0

小结

生成小程序码时,传入 scene 参数的限制是 “最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)” 。而 rawData 解码后的长度,有出现长度为 30 的,低于 32 ,理论上是承载不下完整的 scene,猜测是需要配合接口查询来完成数据还原,类似短网址还原。

如果希望生成的小程序码,在别的小程序也可以通过 scanCode 方法读取到信息,可以生成 scene 长度短于 8 位的码,然后截取后八位。如上表最后的四个场所码,如果去掉尾部的 ,cp=0 就可以通过任意小程序拿到场所码 ID 了。

当前微信还未开放第三方 App 扫小程序码的能力,这大概是目前 粤省事App 还不支持扫自家生成的场所码的原因吧 😂

广东省政务服务数据管理局答复:粤省事APP可以扫场所码吗?

即便后续在各方对推动下,微信开放该能力,估计对第三方 App 也会有诸多条件限制。

分享到:

评论完整模式加载中...如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理