微信小程序码生成与保存需调用getwxacodeunlimit接口,正确签名、url-safe编码scene、配置合法page路径、缓存access_token,并用php保存为png文件,注意权限与命名规范。

微信小程序码生成与保存,核心在于调用微信官方接口获取二维码图片流,再用 PHP 将其写入服务器本地或云存储。关键不是“框架”,而是正确签名、合法参数和安全保存。
小程序码接口调用要点
微信提供三个生成接口:getWXACode(带参数,无过期)、getWXACodeUnlimit(无限量,推荐)、getWXACodeWithParams(已下线,勿用)。生产环境务必用 getWXACodeUnlimit,它支持 10 万+ 有效码,且可携带 32 字节内自定义参数(如 user_id=123)。
- 需后端调用,不能前端直连(需 access_token,涉密)
- access_token 必须缓存,有效期 2 小时,避免频繁刷新
- scene 参数需 URL-safe 编码(如
rawurlencode('uid=1001')),否则扫码解析失败 - path 必须是已在小程序后台「开发管理 > 业务域名」中配置的合法页面路径(如
pages/index/index)
PHP 生成并保存小程序码(含错误处理)
以下为精简可靠的实现逻辑(不依赖框架,原生 cURL 即可):
公众号运营:文章发布至草稿、样式封面、评论与用户管理、数据统计等。用户要求将 Markdown 发送到公众号草稿、查看阅读量统计或类似后台操作时,使用本技能。
- 先获取有效的 access_token(建议封装成独立方法,加文件缓存)
- 构造 POST 请求体:JSON 格式,含
scene、page、width(建议 430)、auto_color(true 可适配深色/浅色模式) - 用
curl_exec()请求https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=xxx - 检查返回 HTTP 状态码 200 且响应头
Content-Type: image/png,才是成功;否则解析 JSON 错误信息(如 errcode=41030 表示 page 路径未发布) - 将二进制响应内容用
file_put_contents()保存为 .png 文件,路径建议按日期分目录(如./qrcode/202405/abc123.png)
保存路径与权限注意点
生成的小程序码是静态图片,适合直接通过 Nginx/Apache 暴露访问,无需走 PHP 脚本中转:
- 保存目录需 Web 用户(如 www-data)有写权限,但禁止执行 PHP(设置
php_flag engine off或 Nginx location deny .php) - 建议用唯一哈希命名(如
md5($scene . $timestamp)),避免中文或特殊字符 - 定期清理过期码(如 90 天未访问的文件),可用定时脚本 +
filemtime()判断 - 若部署在多台服务器,需统一存到对象存储(如腾讯云 COS),用 SDK 上传并返回外链
扫码后参数获取方式
用户扫码进入小程序时,参数从 scene 中来,不是 query:
- 在 App.js 的
onLaunch或页面onLoad中,通过options.scene获取(已自动 base64 解码) - 例如 scene 值为
uid%3D1001(即 uid=1001),解码后得到uid=1001,再用parse_str()提取变量 - 注意:真机调试时需用「体验版」或「线上版」扫码才生效,开发版不支持 scene 参数
不复杂但容易忽略——参数编码、token 缓存、文件权限、路径合法性,这四点卡住 80% 的初学者。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










