做小程序运营或开发,迟早都会遇到生成二维码的需求。可能是给线下海报印一个活动入口,也可能要给每个分销员生成带参数的专属邀请码。场景不一样,合适的做法差别其实不小。下面把几种常用方案梳理一遍——从官方接口,到纯前端实现,再到完全不写代码的路子,你可以按自己的实际情况挑着用。
先说最正统的路:调微信官方API。这个方案需要后端配合,但可控性最强。官方提供了两个接口,选哪个主要看你要生成多少码、参数是否动态。
接口A(getwxacode)适合数量少、页面固定的场景,比如活动页、商品详情页这类一次生成、长期使用的需求。它生成的码永久有效,听起来很美,但有个硬限制——总数上限10万个。这个数字看着不少,真放到批量铺量的业务里很快就见底,得省着点用。调用时传参很直接:
{
"path": "pages/detail/detail?id=123",
"width": 430
}
其中path是必填的小程序页面路径,width控制二维码宽度,可选。

接口B(getwxacodeunlimit)则是为大批量、动态参数的场景准备的。像邀请码、分销链接这种一人一个码的玩法,只能走它。数量上没有限制,代价是参数得通过scene字段传递,还要先做URL编码;用户扫码进来后,页面端得自己解析这个参数,才能拿到里面的内容。调用时长这样:
{
"scene": "invite_code=ABC123",
"page": "pages/index/index",
"width": 430
}
page字段可以省略,默认落到首页。
无论用哪个接口,第一步都是先拿access_token,用小程序的appid和secret去换:
GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
要注意的是,这个token有效期只有两小时。每次现取既浪费又容易撞频率限制,正常做法是服务端缓存起来,快过期时自动刷新。拿到token之后就能调生成接口了,以接口B为例:
POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
接口返回的不是图片链接,而是二进制图片数据,前端拿到后还得转一道——要么存成文件,要么转成Base64直接渲染。小程序里转Base64可以这样写(需要基础库2.1.0以上):
wx.request({
url: 'API_URL',
responseType: 'arraybuffer',
success: (res) => {
const base64 = 'data:image/png;base64,' + wx.arrayBufferToBase64(res.data);
this.setData({ qrcode: base64 });
}
});
不想碰后端的话,纯前端也能画出二维码。社区里用得比较多的是weapp-qrcode这个库,够轻量,颜色、尺寸、纠错级别都能自定义,拿来快速验证想法或者做个原型特别顺手。用法很简单,先把库拉下来:

git clone https://github.com/yingye/weapp-qrcode.git
然后在页面里引入调用:
import drawQrcode from '../../utils/weapp-qrcode.js';
Page({
data: { qrcode: '' },
onLoad() {
drawQrcode({
width: 200,
height: 200,
canvasId: 'myQrcode',
text: 'https://your-page-path?param=123',
background: '#ffffff',
foreground: '#000000'
});
}
});
WXML里放一个对应的canvas即可:
<canvas canvas-id="myQrcode" style="width: 200px; height: 200px;" />
不过有一点要心里有数:前端画出来的是普通二维码,内容就是一段文本或链接,和微信官方那种带小程序logo的圆形码不是一回事,扫码后的跳转逻辑也得自己处理好。

要是完全不想写代码,也有现成的路子。登录微信公众平台,进入小程序管理,找到目标小程序,「设置」里有个「小程序码及线下物料下载」入口。官方直接提供了多种预设尺寸——正方形、带圆形logo的款式都有,配色方案也能挑,下载下来直接印物料。对运营同学来说,这是最省事的一条路。
觉得官方样式太素、想要更花哨的效果,可以试试第三方平台。草料二维码(cli.im)支持嵌入LOGO、渐变色,甚至能生成艺术风格的二维码;hotapp(weixin.hotapp.cn)则专注小程序码这个细分领域,还附带数据统计功能,能看到扫码量之类的表现。操作流程大同小异:填小程序的APPID和页面路径,调一调颜色、尺寸、LOGO这些样式,生成下载,几分钟就能搞定。

最后有几件事得提醒一下,都是容易踩的坑。第一,小程序必须已经发布,没发布的版本调API是生成不了码的。第二,动态参数务必用encodeURIComponent处理,比如scene要写成invite%3D123这种形式,漏了编码参数就废了。第三,二维码指向的页面路径必须提前在app.json里定义过,否则用户扫了码跳不过去,体验直接崩掉。第四,appid和secret千万捂好,泄露出去别人就能冒用你的身份调接口,后果可大可小。
简单收个尾:少量固定页面用接口A,量大且参数动态用接口B,只想快速出个原型就上weapp-qrcode,压根不沾代码的话,公众平台后台和第三方工具足够覆盖日常需求。方案没有绝对的好坏,对得上场景就行。
今すぐログイン