资讯详情

资讯详情

WiFi大师小程序独立版源码部署:二维码连WiFi与微信手机号登录实战

简介WIFI大师小程序4.1.9独立版源码是一套可直接部署的完整项目面向希望搭建本地共享WiFi平台的创业者、团长、拓展员、商家以及技术开发者旨在解决公共场所网络接入不便、商家获客粘性低等运营难题。压缩包共包含2004个文件其中php文件承担后端服务与接口逻辑js与css负责小程序前端交互与界面样式png、jpg等图片提供丰富的UI资源json、md及sql等用于配置、说明与数据库结构整体包体约70.09MB目录条理清晰便于按需改动。目前该资源已有39人学习浏览对于想快速进入共享WiFi赛道的入门及中级开发者来说是一份值得参考的实践源码。通过阅读代码可深入理解团长管理、拓展员推广、商家入驻、扫码连网等核心流程的落地方式同时也能借助现成的前端页面和后端配置快速完成自有平台的搭建与验证节省从零开发的时间。 “店里的WiFi密码贴纸被撕了三次服务员一天要被问十几遍密码”——WiFi大师小程序就是专门解决这个场景的。4.1.9独立版源码.zip是一套前后端完整的小程序工程包顾客扫二维码直接连WiFi店主在后台上管理多个WiFi账号和密码后端还能通过微信手机号登录把“扫码连网”沉淀成店铺的会员触点。它不是一个只能看的演示工程而是小程序端代码、PHP接口、数据库脚本都齐的独立部署版。你只要准备一台服务器和一个备案域名就能把它完全跑在自己名下所有数据和流量归属自己。适合想给实体店做WiFi连接页的开发者也适合拿真实前后端源码练手的入门者。2. 源码拆解WiFi大师的业务闭环、二维码原理与独立版选型2.1 从页面与接口看WiFi大师的业务闭环先别急着解压。以这一类“WiFi管理小程序”最常见的设计来看4.1.9版本里的页面和接口是围绕三条链路组织的部署前先看懂这三条链路后面改代码才知道去哪里下手。链路一WiFi信息流。后端数据库里维护WiFi名称、密码、位置、描述小程序首页拉取列表详情页展示当前WiFi信息并生成连接二维码。链路二二维码连接。详情页根据WiFi的加密类型WPA/WEP/开放网络生成一个特定格式的uri字符串再把uri画成二维码用户用手机系统相机扫这个码系统解析后自动发起连接。链路三微信手机号登录。用户进入页面后小程序端用wx.login拿临时code换openid再通过按钮授权手机号后端把手机号和openid绑定成账号。这一条链路就是很多商家看重的“留资”连个WiFi把手机号留给了店铺。这三条链路对应到源码里就是三块代码前端pages目录里的页面逻辑、前端utils目录里的请求封装和二维码工具类、后端api目录里的PHP接口。大多数人部署失败不是因为PHP环境有多难配而是没搞清这三块代码之间的数据流——比如接口返回的字段名和小程序页面里解析的字段名对不上页面就会一直空白。2.2 WiFi二维码连接的真原理一个字符串决定成败最容易翻车的是二维码连接这个功能。WiFi二维码不是“把密码画成二维码”这么简单系统相机扫出来能不能自动连取决于字符串是否符合规范格式。常见格式如下WIFI:T:WPA;S:mystore-wifi;P:pass12345;H:false;;各字段含义T加密类型WPA/WPA2/WEP/nopassSWiFi名称SSID中文SSID建议做百分号编码多数安卓机直接放中文也能识别iPhone对中文SSID兼容性一般生成时统一转码最保险P密码开放网络时整段省略H是否隐藏网络false表示可见结尾的两个分号第一个表示参数结束第二个是uri结尾标记很多生成工具丢了这个尾分号导致部分机型识别失败。在源码里这个字符串的拼接一般放在前端工具类中。我习惯单独建一个utils/wifi.js不把字符串拼在页面里方便多处复用// utils/wifi.js function toWifiUri(ssid, password, type) { const t type || WPA; // 默认按 WPA 处理 const p password ? P:${encodeURIComponent(password)}; : ; const uri WIFI:T:${t};S:${encodeURIComponent(ssid)};${p}H:false;;; return uri; } module.exports { toWifiUri };逻辑说明encodeURIComponent处理SSID和密码一是解决中文SSID的识别问题二是防止密码里出现;或#时把uri结构打断。微信小程序自带的wx.scanCode也能识别二维码内容但实际场景里更多是用户用系统相机直接扫所以uri格式必须严格。生成二维码时常见做法是引入一个前端canvas绘制库比如 weapp.qrcode 这类把toWifiUri的返回值画到canvas上如果你拿到的源码用的是后端接口生成二维码图片那就把同一个uri字符串传给后端由后端的二维码库输出图片两端格式保持一致即可。2.3 独立版与SaaS版怎么选一张表说清楚标题里“独立版”三个字值得展开。市面上类似的WiFi连接服务很多是SaaS模式你注册它的平台它给你一段嵌入代码或一个小程序模板数据都留在别人服务器上。而独立版源码意味着数据库、接口、前端代码全部在你手里。怎么选看下面这张表对比项独立版源码SaaS平台服务器成本自备月租几十到几百通常包含在套餐里数据归属完整掌握可导出受平台限制二次开发可改任意逻辑只能改配置项上线周期需要自己配环境1-3天当天可用长期风险无平台跑路风险平台停服则业务中断我一般会建议哪怕只做一个店的WiFi页面也优先考虑独立版。原因不是成本而是这套源码的数据模型——商家列表、WiFi账号、扫码记录、手机号绑定关系——是将来做多门店、做会员运营的底子。用SaaS平台这些数据每一条都在别人手上想迁出来的时候会发现接口不给你导出。独立版初期多花一天部署时间后面省掉的是被平台绑死的风险。3. 后端部署从zip到PHP服务跑通最小可用操作路径独立版意味着你要亲手把后端架起来。这类小程序源码最稳妥的选型是 PHP MySQL Nginx三个组件就够了不需要上框架。后端部署的核心就三件事解压放好、导入数据库、改配置。下面按这个顺序走。3.1 解压出两个工程前端目录与后端目录要分开拿到WIFI大师小程序4.1.9独立版源码.zip后先看解压出来的结构。常见做法是压缩包里有前后端两个目录一个放小程序前端工程另一个放PHP后端工程也有可能后端被单独压成了子zip。在服务器上操作时我一般先建两个目录# 在服务器上创建站点目录 mkdir -p /var/www/wifi-api mkdir -p /var/www/html/wifi-admin # 如果需要网页后台就单独放 # 解压到临时目录确认文件结构 unzip WIFI大师小程序4.1.9独立版源码.zip -d /tmp/wifi-src ls -la /tmp/wifi-src逻辑说明unzip解压后先不要急着移动文件。用ls看目录层级找到PHP后端那一层通常能看到index.php、api文件夹、数据库.sql文件、配置文件再把它移动到Nginx的站点根目录。前端小程序工程不需要放到服务器上它是要导入微信开发者工具的后面第4章再说。后端目录移动到位后给PHP进程一个运行权限同时确保runtime或logs这类缓存目录可写否则接口会报“目录不可写”之类的错误。参数说明如果服务器上还没有Nginx和PHP用CentOS系的yum install nginx php php-fpm php-mysqlnd一键装齐全家桶Debian系则用apt install nginx php-fpm php-mysql。PHP版本建议7.4以上很多老源码在PHP 8.0下会因为数组函数用法报warning但7.4大多数能兼容。3.2 数据库导入与连接配置两个命令搞定后端目录里一般会带一个.sql文件这是数据库脚本。不要用phpMyAdmin直接导入大文件容易超时截断命令行导入最可靠# 建库数据库名以你手里的sql脚本内为准常见是 wifi_db mysql -uroot -p -e CREATE DATABASE IF NOT EXISTS wifi_db DEFAULT CHARACTER SET utf8mb4; # 导入数据表 mysql -uroot -p wifi_db /var/www/wifi-api/wifi_db.sql逻辑说明先建库再导表。用utf8mb4是因为WiFi名称和店铺名可能包含emoji旧版utf8存不了四字节字符。导入成功后用mysql -uroot -p -e USE wifi_db; SHOW TABLES;确认表数量常见会有账号表、WiFi信息表、扫码记录表、系统配置表这几张。如果表数量为零说明sql文件路径写错了或sql文件本身是空的先检查文件大小。接下来改PHP连接配置。这类源码的配置文件常见名字是config.php、database.php或根目录下include/config.php内容结构大同小异?php // 数据库连接配置示例以实际文件字段为准 return [ host 127.0.0.1, port 3306, dbname wifi_db, user wifi_user, password 改为你的数据库密码, charset utf8mb4, ];逻辑说明注意host填127.0.0.1而不是填服务器公网IP减少不必要的授权开销。如果PHP和MySQL在同一台机器保持默认即可。修改完配置后重启PHP-FPM让配置生效systemctl restart php-fpm。3.3 curl验证接口部署完成别急着开小程序后端配置好了先别急着打开小程序。用curl直接打一个不需要登录态的接口确认PHP环境和数据库链路通不通。小程序项目里通常有一个获取WiFi列表的公开接口路径写在utils/api.js里对着那个路径改一下域名来测# 假设接口路径是 /api/wifi/list curl -s http://your-domain.com/api/wifi/list | head -c 500逻辑说明返回一段JSON里面能看到WiFi列表数据说明PHP、MySQL、Nginx整条链路已通。如果返回空数组说明数据库表里没有数据先把一条测试WiFi记录插进去。如果返回HTML错误页看是Nginx 404站点根目录指错还是PHP 500PHP版本不兼容或配置缺失按错误码逐项排查。这时用tail -f /var/log/nginx/error.log和tail -f /var/log/php-fpm/error.log看实时日志比瞎猜效率高得多。另外注意一个小坑接口域名必须是HTTPS上面curl测试用http能通但微信小程序真机请求会被拦。这一步测试通过后先去配HTTPS证书再进小程序端配置。4. 小程序端接入开发者工具导入、接口域名切换与手机号登录对齐后端跑通了小程序端才能接到同一套数据上。这一步的难点不在写代码而在于把微信开发者工具里的配置、项目里写死的接口地址、微信公众后台的域名白名单三者对齐。三者对不齐的表现都一样真机上一片空白。4.1 导入小程序工程后第一件事是改AppID打开微信开发者工具选择“导入项目”目录指向解压出来的小程序前端工程。导入时有两个选项使用测试号或使用自己的AppID。测试号能跑通UI但手机号登录这类能力必须在真实小程序账号下才有所以直接用你自己的AppID导入最省事。# 在 project.config.json 里核对 appid 字段 # 常见位置project.config.json 的 appid 字段 { appid: wx你的小程序AppID, projectname: wifi-master, setting: { urlCheck: false } }逻辑说明urlCheck是开发者工具里“不校验合法域名”的开关。开发阶段设成false可以请求任意HTTPS接口方便本地调试。但这个开关只对开发者工具生效真机预览时微信会强制走域名白名单校验。所以上线前一定要把它改回true并在微信公众后台配置好合法域名。参数说明AppID在微信公众平台“设置-基本信息”里查和「小程序AppSecret」是两回事AppSecret是后端换取openid时用的不要写进前端源码里。很多泄露事故就是把AppSecret写死在config.js里这个字段只应该出现在PHP后端配置中。4.2 接口基地址切换本地调试用测试号真机必须走正式域名小程序前端工程里接口地址一般集中在utils/config.js或utils/request.js里。把里面写死的开发地址换成你的正式HTTPS域名// utils/config.js module.exports { // 旧地址可能是 http://192.168.1.100/api/ 之类的 // 改成你自己的正式域名注意必须带 https:// baseUrl: https://wifi.yourdomain.com, // 接口路径前缀按源码实际约定填写 apiPrefix: /api, };逻辑说明为什么必须HTTPS微信小程序对request接口的三个硬性要求必须是HTTPS、域名必须ICP备案、必须在小程序后台加入“request合法域名”。注意IP地址和端口号都不行哪怕你本地调试也要先搞个带域名的HTTPS环境。开发阶段有个临时方案开发者工具右上角“详情-本地设置-不校验合法域名”勾上就能请求 http 或 IP 地址的接口只在本地联调时用一旦真机预览就必须换正式域名。请求封装里建议加一层统一错误处理而不是让每个页面各写各的wx.request。常见做法是封装一个request.js统一拼接baseUrl、统一处理登录态过期、统一弹出错误提示。这样后端接口返回的code字段比如约定200成功、401未登录只需要在一处判断避免页面里到处散落着同样的if。4.3 wx.login getPhoneNumber把手机号登录链路完整跑通手机号登录是这套源码区别于普通WiFi工具页的核心功能。微信现在的手机号获取方式是用button的open-typegetPhoneNumber用户点击后微信返回加密的手机号数据再由后端调用微信接口解密。前端要配合两件事调wx.login拿code把code传给后端换openid拿到手机号授权后把codeencryptedDataiv一同交给后端。// 登录逻辑页面加载时先静默登录 wx.login({ success: (res) { const loginCode res.code; // 把 loginCode 发给后端后端用 AppSecret code 换 openid // 接口形如 POST /api/auth/login wx.request({ url: ${baseUrl}${apiPrefix}/auth/login, method: POST, data: { code: loginCode }, success: (resp) { // 后端返回 openid 和自定义登录态 token存入 storage wx.setStorageSync(token, resp.data.token); } }); } }); // 页面上的授权按钮 button open-typegetPhoneNumber bindgetphonenumberonGetPhoneNumber 微信手机号一键登录 /button // 用户点击授权后拿到手机号数据 onGetPhoneNumber(e) { if (e.detail.errMsg ! getPhoneNumber:ok) { wx.showToast({ title: 已取消授权, icon: none }); return; } wx.request({ url: ${baseUrl}${apiPrefix}/auth/phone, method: POST, data: { code: this.data.loginCode, encryptedData: e.detail.encryptedData, iv: e.detail.iv }, success: (resp) { // 绑定成功刷新页面状态 wx.setStorageSync(userInfo, resp.data.userInfo); } }); }逻辑说明wx.login返回的code五分钟内有效且只能用一次所以后端必须把它当成一次性凭证处理换完openid就作废。手机号数据在后端解密不要在纯前端解解密的session_key必须保密存储。前端只做转发拿到成功回调后决定跳转还是停留在当前页。后端解密这一步源码里通常有一个auth/phone接口PHP侧用openssl_decrypt对encryptedData做AES-128-CBC解密。如果之后发现手机号一直拿不到除了权限问题外还要检查服务器时间是否准确——微信加解密对时间戳校验很敏感服务器时间偏差超过一定范围就会解密失败。这已经是老生常谈但每次排查都还能遇到。5. 避坑部署WiFi大师常见的五个翻车现场与排查路径5.1 手机号授权一直报“无权获取”问题不在代码在权限现象点击“一键登录”按钮弹窗提示“该小程序无权获取用户的手机号”代码逻辑看着没问题接口也没报错。原因微信从2023年起把手机号获取能力收紧成了付费接口且要求小程序账号完成微信认证。如果你的小程序主体没有认证或者认证了但没有开通手机号快速验证组件权限前端怎么调都是无权。解决登录微信公众平台在“设置-服务内容声明”里找到“用户手机号验证”能力发起开通按提示完成认证和付费签约。注意这个能力是按调用次数计费的所以源码里如果有直接用getPhoneNumber的页面联调通过后要评估一下每月的调用量在代码里加一个“未授权用户允许跳过手机号登录”的降级路径避免每个游客都触发一次计费调用。5.2 真机请求全部失败开发者工具里却一切正常现象开发者工具里列表页数据展示正常点真机预览页面转圈圈Console里一片request:fail。原因开发者工具里勾了“不校验合法域名”请求被放行真机上微信强制走合法域名校验你的接口域名没在公众后台“开发管理-开发设置-服务器域名”里配请求直接被拦。解决把https://wifi.yourdomain.com分别加进request合法域名和downloadFile合法域名如果有图片上传或文件下载功能。加完域名后每次更新配置需要等几分钟生效另外开发者工具里的urlCheck一定要确保关掉否则本地调试验证不了真实配置效果。经常有人加了域名还在真机上失败最后发现是把request合法域名加到了uploadFile合法域名里三个域名配置类别各管各的对号入座即可。5.3 二维码扫了没反应iPhone跳不出连接窗现象同一个二维码安卓手机系统相机扫完可以直接弹出“连接到WiFi”iPhone扫完后要么没反应要么只显示一段文本。原因iOS对WIFI:这个uri scheme支持不完整系统相机只识别网络配置描述文件不直接识别WIFI:格式。这里并不是源码写错了而是iOS平台的行为差异。解决在二维码详情页加一个“复制密码”按钮iOS用户扫码后看页面提示手动复制密码去系统设置里连接。另外很多WiFi大师类源码会在二维码上方显示SSID和密码明文就是给iOS用户留的后门。如果店主希望iOS用户也能自动连可以额外生成一个Apple配置文件描述.mobileconfig但那个需要证书签名部署复杂度高小店铺场景不推荐提示用户手动连最简单可靠。5.4 SQL导入只成功一半phpMyAdmin导入藏着的坑现象用phpMyAdmin导入.sql文件界面提示“导入成功”但打开表一看WiFi表有数据账号表是空的或者某些中文内容变成了问号。原因phpMyAdmin对超大SQL文件有执行时间限制超过max_execution_time后脚本被掐断但页面还显示成功另一个原因是sql文件头尾的注释里写了utf8mb4_unicode_ci排序规则phpMyAdmin当前连接的字符集没同步导致中文乱码。解决一律用命令行导入mysql -uroot -p wifi_db wifi_db.sql执行时间由MySQL自身控制不会中途断。导入后立即用SELECT * FROM xx_account LIMIT 5;抽查几条数据确认中文内容和表记录数完整。如果命令行报Unknown collation错误把sql文件里的utf8mb4_unicode_ci全局替换成utf8mb4_general_ci再导入这是老源码常见的不兼容点。5.5 后端接口返回“系统繁忙”错误日志里却什么也没有现象小程序端请求接口返回“系统繁忙”或“请求失败”但PHP错误日志和Nginx错误日志里都没有对应记录。原因很多PHP源码会在全局异常处理里把真正的错误信息吞掉对外统一返回“系统繁忙”给用户真实错误写进了项目自定义的日志文件或者被error_reporting(0)关掉了。解决两步走。第一步打开后端入口文件常见是index.php或api.php临时把错误显示打开// 临时打开错误显示排查完务必改回 error_reporting(E_ALL); ini_set(display_errors, 1);第二步重新请求接口大概率能看到具体的报错行。常见的有三类PHP版本函数不兼容比如each()在PHP 8.0被移除、某个目录缺少写权限、数据库连接配置里密码带特殊字符没转义。看到具体报错后对症处理。这个方法算是我个人的习惯任何黑盒接口问题第一件事都是关掉错误掩盖让真实报错浮出水面再谈修不修。6. 进阶部署完成后用一条完整链路验证这套WiFi源码能不能落地后端上线了、小程序端也配置完成别急着发给店长。花十分钟做一条端到端验证模拟真实用户路径确认这套源码的“WiFi连接手机号沉淀”价值闭环是通的。准备两台手机一台当“顾客”负责扫码连网一台当“店主”负责录入WiFi信息、查看数据。第一步用店主手机登录小程序的后台页面通常源码会带一个简易的商家管理入口新增一个店铺WiFi名称故意用中文加emoji比如“咖啡店-2F”密码设置成含特殊字符的值。第二步用顾客手机打开小程序先不登录查看WiFi列表确认能看到这条测试数据点击详情页用另一台手机的微信扫详情页二维码。安卓机物理扫码后应当弹出连接提示iPhone则至少能复制密码。第三步顾客手机点“微信手机号登录”授权后看后台用户列表里是否出现该手机号且与此条扫码记录关联。这一步走通说明小程序端、PHP接口、数据库、HTTPS链路全部打通。我个人的一个教训是第一次部署这类源码时把WiFi密码硬编码在了页面上店主后来改了路由器密码只能找我来改代码重发版本来回折腾了三次。后来我在后台加了一个WiFi编辑表单把配置从代码挪到数据库里这才算真正把主动权交还给了使用者。这也是独立版源码最值得改的第一个需求点——先做配置后台再做花哨功能。调整完这里的逻辑后回到开发者工具跑一遍微信开发者工具-代码质量检查顺便看下接口请求耗时首屏接口建议控制在300毫秒以内超过的话优先给后端PHP配个OPcache小程序端图片资源改用云存储链接。每一步验证都留有痕迹手机号登录成功了记录一下返回耗时二维码扫不了了先怀疑uri格式再怀疑证书。这套链路走顺了源码才算真正属于你之后加会员积分、加营销活动都只在这套底子上累加。希望帮到你。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →