导读(3行收益):小程序里经常要扫码:扫商品码看详情、扫门店码、扫二维码进页面。但扫码后返回什么、怎么解析参数、失败怎么兜底,很多人没做对。本文给一套做法:调起扫码、解析结果、参数跳转与失败兜底,附关键代码。看完扫码不会再扫了没反应。
一、扫码为什么会出问题
三个高发问题:
- 扫码后没反应:扫到了但不知道跳哪;
- 参数解析错:二维码里的参数没取出来;
- 扫了别人的码:不校验来源,跳到陌生页。
根源是只调了扫码 API,没处理结果、没解析参数、没做兜底。
二、怎么调起扫码
wx.scanCode({
onlyFromCamera: false,
scanType: ['qrCode'],
success(res) {
const raw = res.resultString;
// raw 是二维码里的原始字符串
handleScanResult(raw);
},
fail() {
wx.showToast({
title: '扫码失败', icon: 'none' });
}
});
关键点:onlyFromCamera 设 false 允许从相册选图;scanType 限定二维码。避坑:不处理 fail——用户取消扫码没提示;resultString 当对象用——它是字符串,要自己 parse。
三、二维码里的参数怎么解析
function handleScanResult(raw) {
try {
const url = new URL(raw);
const target = url.pathname; // 如 /pages/goods/detail
const id = url.searchParams.get('id');
if (target && id) {
wx.navigateTo({
url: `${
target}?id=${
id}` });
} else {
wx.showToast({
title: '无法识别的码', icon: 'none' });
}
} catch (e) {
wx.showToast({
title: '二维码格式不对', icon: 'none' });
}
}
关键点:把二维码内容当 URL 解析,pathname 定落地页、searchParams 取参数。避坑:不 try-catch——扫到普通文字直接报错;参数写死——所有码都跳同一个页。
四、扫码后跳哪
| 码类型 | 落地页 |
|---|---|
| 商品码 | 商品详情页带 id |
| 门店码 | 门店详情页 |
| 活动码 | 活动落地页 |
| 无效码 | 提示无法识别 |
关键点:二维码里编码落地页路径,别在代码里写死映射。避坑:路径白名单不校验——扫到恶意码跳到外部页;不区分码类型——全部跳首页。
五、踩坑清单
- [ ] 只调扫码不处理结果;
- [ ] 不处理 fail/取消;
- [ ] resultString 不 parse 直接用;
- [ ] 不 try-catch 解析;
- [ ] 不校验落地页路径;
- [ ] 扫到普通文字不提示;
- [ ] 取消扫码没反馈。
六、工程落地建议
扫码建议按「调起扫码+URL 解析+白名单跳转+失败兜底+取消提示」落地。若团队用成型轻应用平台(如乔拓云轻应用)起步,重点核对扫码能力、参数解析与落地页跳转是否可用。
七、复盘清单(可直接抄走)
- [ ] 扫码结果是否解析成 URL;
- [ ] 是否 try-catch 解析失败;
- [ ] 落地页是否走白名单;
- [ ] 取消扫码是否有提示;
- [ ] 无效码是否提示无法识别;
- [ ] 是否支持相册选图。
结语
扫码不是调起 API 就完事,而是结果可解析、参数能取出、落地页有白名单、失败有兜底。这几步做对,扫码才真能用。本文仅作技术分享,具体功能以各平台官方实时信息为准。