当页面路径的参数是单个的时候,比如pages/store?store_id=1通过onLoad(options)中的options可以获取store_id。
但是当页面路径的参数是多个,比如pages/floors?store_id=1&floor_id=8:
当页面是pages/store?store_id=1, 扫描二维码获取单个参数store_id没有问题。
但是当页面是pages/floor?store_id=1&floor_id=8,无法正确获得store_id和floor_id
根据该页面路径生成页面二维码,用微信扫描二维码,在onLoad(options)方法中,通过console.log(options)打印出来是这个样子:
{stored_id:"1\u0026floor_id=8"}
但很久之前的行为是正确的,也就是说打印出来是{store_id: "1", floor_id: "8"}
看起来似乎&被转义成了\u0026。
而通过体验版生成的二维码,打印出来是
{stored_id:"1", amp;floor_id=8"},
也就是说&被转义成了“amp;”
在开发者工具中,因为是直接设置启动页面和启动参数,在扫面预览生成的的二维码,打印出来是完全正确的
{stored_id:"1", floor_id=8"}
请问这个是微信后端生成二维码的bug还是微信客户端扫描后解析options的bug?
怎么解决?
其实scene的理论就是你服务端保存好参数值,将其加密后的key放在url后,这样可以把大量的参数变成一个参数
如果你的参数值形式比较简单,你完全可以将几个参数通过分割字符连接成一个:store_id=1&floor_id=8 =>param_ids=1_8 类似这样的,还有就是将路由变成/key/value/这样
不过从你给的场景来看,似乎应该用b类二维码啊,ac类二维码是有调用次数限制的
https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html描述的接口C也可以使用scene这样的方式传递吗?
哦,scene的方式其实就是将你的参数加密合并:简单的可以通过_或者其他的方式连接你的参数值
官网文档:
https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html
从官网的文档上来看,用scene传递参数只适用于接口B,但是接口B生成的小程序码。
现在需要用接口C生成二维码,所以还是不能解决该问题
可以通过scene来传递二维码参数