扫描二维码 上传二维码
域名商店
选择防红平台类型,避免链接被拦截
选择允许访问的平台类型

微信二维码跳转小程序

想让用户扫一个二维码就直接打开小程序的某个页面,普通网页链接是办不到的,必须走微信官方提供的接口。整个流程谈不上复杂,但有几个环节容易踩坑,下面就按实操顺序完整过一遍。



动手之前,先准备两样东西。一是小程序的 AppID 和 AppSecret,登录微信公众平台(mp.weixin.qq.com),在「开发」-「开发管理」-「开发设置」里就能找到。二是一个自己的后端服务,Node.js、Python、Java 都行。为什么不能在前端直接调?因为接口要用到 AppSecret,这种敏感信息一旦写进前端代码,等于把家门钥匙挂在门外,任何人抓个包就能拿走。

微信官方提供了两个生成二维码的接口,选哪个主要看业务量级。



如果只是少量固定场景的码,比如某个活动页、一张海报,用 getwxacode 就够了。接口地址是 https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN(GET 请求),最多支持生成十万个,每个码对应一个明确的小程序路径,参数直接跟在路径后面:

{
"path": "pages/index/index?id=123",
"width": 430
}


如果面对的是海量场景——比如给每件商品生成一个溯源码——就得换成 getwxacodeunlimit,地址是 https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN(POST 请求)。它不限数量,代价是传参方式变了:不再走完整路径,而是通过一个最长 32 字符的 scene 字段传递唯一标识,页面路径单独放在 page 里:

{
"scene": "item_123",
"page": "pages/detail/detail",
"width": 430
}


这也意味着你需要自己维护 scene 和业务数据之间的映射,比如用 "item_123" 对应数据库里编号为 123 的商品,用户扫码后再反查出来。

具体开发分三步走。

第一步是拿 access_token。它是调用所有微信接口的通行证,用 AppID 和 AppSecret 去换:

import requests

appid = "YOUR_APPID"
appsecret = "YOUR_APPSECRET"
url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={appsecret}"
response = requests.get(url).json()
access_token = response['access_token']


第二步,带着 token 调二维码接口。返回的是图片二进制数据,直接存成文件即可:



url = f"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={access_token}"
data = {
"scene": "item_123",
"page": "pages/detail/detail",
"width": 430
}
response = requests.post(url, json=data).content
with open("qrcode.png", "wb") as f:
f.write(response)




第三步最简单,把生成的图片嵌到网页或印刷物料上:

<img src="https://your-domain.com/qrcode.png" alt="小程序二维码">


用户扫码之后,小程序这边怎么接参数?在目标页面的 onLoad 生命周期里解析。普通二维码的参数直接从 options 里取;scene 参数则要多一步解码,否则拿到的可能是转义后的字符串:

Page({
onLoad(options) {
const { id } = options; // 普通二维码的路径参数
const scene = decodeURIComponent(options.scene); // 无限二维码的 scene
}
})


拿到参数后就可以按业务逻辑走了:加载商品详情、跳转活动报名页,都随你。

另外还有几个细节值得留心。服务器域名要提前在公众平台配置好(「开发」-「开发管理」-「服务器域名」),没配置的域名请求会被直接拦下。有效期方面,普通二维码永久有效,无限二维码默认七天过期,想长期使用需要在接口里设置 is_hyaline=1。scene 的 32 字符上限也要心里有数,业务标识复杂的话,得自己设计一套编码规则,比如分段拼接或者 Base64 压缩。测试阶段不用真把码打印出来,微信开发者工具的「扫码预览」加上真机调试就足够验证了。

这套机制跑通之后,还能往外延伸出不少玩法。比如结合数据库动态生成带唯一标识的码做分销追踪——用户扫了哪个码进来的、归属于哪个推广员,一清二楚。再配合扫码后的日志记录,每个二维码的扫描量和转化率都能沉淀下来,对后续运营复盘很有帮助。

说到底,核心链路就一句话:后端拿 token、调接口、存图片,前端展示,小程序内解析参数。第一次跑通可能要花点时间,之后就都是重复劳动了。