小程序与线下对接时,需要用到普通二维码。

例如,管理后台设置了商品分享二维码,需要分享商品详情页面,希望用户打开后,直接跳转到小程序的商品详情页。

查看官方文档,刚好有这样的功能,能够通过普通的网页url跳转小程序。

首先、需要在小程序中官方平台中配置规则。

同时、在代码中接受特定的参数。

例如www.pangxieke.com/pages/goods/detail/detail?sku_id=123

这样的链接,在用户用微信扫码时,就可以跳转到小程序了。

普通二维码的区别

此方法和调用小程序产生的分享二维码不同。

在小程序官方文档中,有获取二维码的接口。通过调用小程序接口,传入scene 字段,获取对应二维码。

scene 字段的值会作为 query 参数传递给小程序/小游戏。用户扫描该码进入小程序/小游戏后,开发者可以获取到二维码中的 scene 值,再做处理逻辑

但在线下,这种方式就过于繁琐,不太适合。

官方文档:

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html

官方介绍

https://developers.weixin.qq.com/miniprogram/introduction/qrcode.html#功能介绍

为了方便小程序开发者更便捷地推广小程序,兼容线下已有的二维码,微信公众平台开放扫描普通链接二维码跳转小程序能力。

普通链接二维码,是指开发者使用工具对网页链接进行编码后生成的二维码。

线下商户可不需更换线下二维码,在小程序后台完成配置后,即可在用户扫描普通链接二维码时打开小程序,使用小程序的功能。

对于普通链接二维码,目前支持使用微信“扫一扫”或微信内长按识别二维码跳转小程序。

原有二维码链接为 http://www.qq.com/a/123456 ,其中12345为业务参数,则可配置规则 http://www.qq.com/a/ 实现扫码打开小程序。

小程序配置

想要扫描普通链接二维码打开小程序,必须在小程序后台进行配置,只有后台配置了相对于的规则的链接,才能跳转小程序。

1,首先进入微信公众平台,登录小程序后台管理

img

2,菜单栏选中最后一项“设置”,然后选中“开发设置”,页面下滑到最后一项“扫普通链接二维码打开小程序”,“启用”该功能

img

img

3,进入配置,配置前建议先仔细阅读开发文档,可以配置测试链接,在开发时测试

img

这里面可能会遇到校验文件出错,调试了很久才解决。

代码开发

微信识别二维码后进入小程序,会将二维码链接当成参数”q”的形式传入小程序,在onLoad事件中提取“q”参数并自行UrlDecode一次,获取原二维码的完整内容。

我们通过“onload”的“ options”参数对象获取页面传入的参数

1
2
3
4
onLoad: 
function (options){
console.log(decodeURIComponent(options.q));
}

详细代码如下(uni-app项目)

例如我们有这样的url

https://www.pangxieke.com/pages/goods/detail/detail?sku_id=123&soucre_member

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
onLoad(data) {
this.skuId = data.sku_id || 0;
this.preview = data.preview || 0;
if (data.source_member) {
uni.setStorageSync('source_member', data.source_member);
}
// 小程序扫码进入
if (data.scene) {
var sceneParams = decodeURIComponent(data.scene);
sceneParams = sceneParams.split('&');
if (sceneParams.length) {
sceneParams.forEach(item => {
if (item.indexOf('sku_id') != -1) {
this.skuId = item.split('-')[1];
}
if (item.indexOf('source_member') != -1) {
uni.setStorageSync('source_member', item.split('-')[1]);
}
});
}
}
// 普通二维码打开小程序
if (data.q){
var q = decodeURIComponent(data.q);
var skuId = this.getQueryString(q, 'sku_id')
var source_member = this.getQueryString(q, 'source_member')
if( skuId ){
this.skuId = skuId;
}
if (source_member){
uni.setStorageSync('source_member', source_member);
}
}
}

其中getQueryString方法可以获取对应参数

1
2
3
4
5
6
7
8
9
10
methods: {
getQueryString(url, name){
var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')
var r = url.substr(1).match(reg)
if (r != null) {
return r[2]
}
return null;
}
}

测试

在小程序开发者工具中,有二维码编译模式

image-20201105191444116

我们可以上传我们的二维码,然后测试,打印调试信息

参考文章

扫普通链接二维码打开小程序
扫描普通二维码打开小程序获取参数