想给微信小程序生成二维码,官方其实给了两条路:一条完全不用写代码,在后台点几下就能拿到图片;另一条走 API 接口,适合动态生成、批量产出的场景。具体选哪种,取决于你的需求量和技术条件。
先说最省事的那种。登录微信公众平台,进入小程序管理后台,在「开发管理」里找到「开发工具」,里面就有一个二维码生成器。把页面路径填进去——格式类似 pages/index/index——要是还想统计扫码来源,可以在路径后面挂上参数,比如 pages/index/index?id=123。点一下生成,图片就能下载到本地。默认尺寸是 430px,拿到手之后可以随意缩放。唯一不太方便的是,后台生成器只能出黑白样式,想自定义颜色,就得靠接口来实现了。

需求量不大的话,手动生成完全够用。可一旦涉及批量产出、动态参数,或者想把生成能力嵌进自己的系统里,就必须走 API 这条路了。

调接口的第一步,永远是先拿 Access Token。用小程序的 APPID 和 SECRET,向微信服务器发一个 GET 请求:
curl -X GET "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET"
Token 到手之后,就可以调用生成接口了。常用的有两个,适用场景不太一样。
第一个是 wxacode.createUrlLink,用来生成带参数的二维码:
curl -X POST "https://api.weixin.qq.com/wxa/createwxaqrcode?access_token=TOKEN" \
-H "Content-Type: application/json" \
-d '{
"path": "pages/index/index?id=123",
"width": 430
}'

第二个是 wxacode.getUnlimited。顾名思义,它没有数量上限,特别适合需要海量生成的业务,比如给每个用户、每件商品各配一个专属码。不过这个接口有个前提:小程序必须已经发布,体验版是调不通的。
curl -X POST "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=TOKEN" \
-H "Content-Type: application/json" \
-d '{
"scene": "自定义场景值",
"page": "pages/index/index",
"width": 430
}'
不管走哪条路,有几个坑最好提前心里有数。
先说数量。手动生成和 createUrlLink 接口都有每天 10 万次的上限,对大多数场景绰绰有余;真有更大体量,直接上 getUnlimited 就行。有效期倒是省心——二维码生成后永久有效,除非对应的页面路径被删掉或改掉了。

参数传递是出错的高发区。路径参数必须以 ? 开头,写成 pages/detail?id=123 这种形式;如果用的是 getUnlimited,场景值 scene 的长度不能超过 32 个字符。另外,微信官方对二维码的使用场景有明确规定,诱导分享、违规内容这类红线碰不得。还有一点值得再强调一遍:只有正式发布的小程序,才能生成有效的二维码。
真出了问题,排查思路也不复杂。二维码扫不出来或者失效,先检查页面路径是否真实存在,再确认小程序是不是已经发布;参数不生效,多半是格式问题,看看 ?key=value 写对了没有,尽量避开特殊字符;API 报错的话,十有八九是 Access Token 过期了,重新获取一次再试。
掌握了基础用法,还能玩出不少花样。比如结合用户 ID 动态生成专属二维码,pages/user?uid=123 这样的路径能让每个码对应到具体的人;做渠道投放时,给不同渠道配上不同参数,?channel=ad1、?channel=ad2,扫码来源一目了然;需要批量导出的场景,写个循环调 API,把生成的二维码图片一张张存到服务器上就行。
选择起来其实很简单:临时用一下,就走后台手动生成;长期用、大量用,就接 API,按需取舍就好。
지금 로그인