当然可以,下面是一个完整的【实战教程】,介绍如何在微信小程序中生成 可自定义跳转页面的方形二维码,并附带完整的代码结构、使用说明和测试指南。适合用于生成分享页、产品页、邀请页等用途。
🧪【实战教程】微信小程序生成方形二维码(可自定义跳转页面)
🧩 实现目标
- ✅ 生成方形样式的小程序二维码(非圆角)
- ✅ 支持跳转到自定义路径(如
pages/product?id=123
) - ✅ 可保存二维码图片到手机
- ✅ 附完整后端(Node.js)+ 小程序前端代码
🧰 技术准备
- 小程序端(前端):微信小程序原生框架
- 后端(API 服务):Node.js + Express(或 PHP/Java/Python)
- 微信开放能力:使用 wxacode.getUnlimited 接口
📦 后端接口代码(Node.js 示例)
创建一个 getQRCode.js
文件:
const express = require('express');
const request = require('request');
const fs = require('fs');
const router = express.Router();
const appid = '你的AppID';
const secret = '你的AppSecret';
router.get('/getQrcode', async (req, res) => {
const scene = req.query.scene || 'id=123';
const page = req.query.page || 'pages/index/index';
// 获取access_token
request({
url: `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`,
method: 'GET',
json: true
}, (err, _, body) => {
const token = body.access_token;
// 获取二维码
request({
url: `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${token}`,
method: 'POST',
encoding: null,
json: true,
body: {
scene,
page,
width: 280,
is_hyaline: false, // 不透明背景
auto_color: false,
line_color: { r: 0, g: 0, b: 0 }
}
}, (err, _, buffer) => {
res.set("Content-Type", "image/png");
res.send(buffer);
});
});
});
module.exports = router;
在 app.js
中引入:
const express = require('express');
const app = express();
const qrRoute = require('./getQRCode');
app.use('/api', qrRoute);
app.listen(3000, () => console.log('服务已启动:http://localhost:3000'));
🧱 小程序前端代码
1. 页面结构(pages/qrcode/qrcode.wxml
)
<view class="container">
<image src="{{qrcode}}" mode="aspectFit" style="width:280rpx;height:280rpx" />
<button bindtap="saveImage">保存到相册</button>
</view>
2. 逻辑处理(qrcode.js
)
Page({
data: {
qrcode: ''
},
onLoad(options) {
const scene = encodeURIComponent('id=123'); // 自定义参数
const page = encodeURIComponent('pages/product/index');
const url = `https://你的域名/api/getQrcode?scene=${scene}&page=${page}`;
this.setData({ qrcode: url });
},
saveImage() {
wx.downloadFile({
url: this.data.qrcode,
success: function (res) {
wx.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success() {
wx.showToast({ title: '保存成功', icon: 'success' });
}
});
}
});
}
});
3. 小程序配置
app.json
中配置页面路径
{
"pages": [
"pages/qrcode/qrcode",
"pages/product/index"
]
}
后台服务器配置 CORS(跨域)响应头(开发阶段)
res.setHeader("Access-Control-Allow-Origin", "*");
📸 生成效果
- 正方形二维码图片,大小 280×280 像素
- 自动包含小程序码样式,无 logo
- 可通过
scene
携带自定义参数 - 可长按识别或扫码访问小程序内部页面
🚧 注意事项
- 后端必须在公网可访问域名(需备案),并在小程序后台设置为
request 合法域名
- 小程序必须上线或使用开发者工具内登录才支持二维码跳转
- 每个
scene
限制为 32 个可见字符以内 wxacode.getUnlimited
的二维码不可以直接下载使用商用,需要遵守微信平台协议
发表回复