简介面向商家与开发者的NFC碰一碰爆店码贴牌部署源码覆盖餐饮、零售、展会、美业、健身及旅游等线下场景。借助一键发布抖音、小红书、快手、视频号笔记以及大众点评、美团、高德、百度打卡收藏能力门店可高效完成引流、互动与二次转化。压缩包共包含1037个文件整体约6.32MB核心为707个PHP业务逻辑文件同时配套HTML页面、JS交互脚本、JSON配置、WXML与WXSS小程序代码、图片及字体素材目录划分清楚适合具备基础PHP开发能力的技术人员直接部署或二次定制。已有494人学习下载部署门槛不高能够快速跑通完整的碰一碰营销链路。各场景模块互相独立又有机联动从餐厅门口引流、餐桌抽奖、试衣镜搭配建议到健身房打卡、景区语音导览等均有对应功能可灵活配置会员、优惠券、预约等能力帮助商家搭建属于自己的私域运营工具。1. 碰碰卡部署不是装个软件是整条链路的事第一次拿到碰碰卡贴牌源码的时候我也以为它就是一个普通网站上传代码、配个域名、导入数据库就能交差。真正动手部署才知道这套系统是把服务端、域名备案、HTTPS 证书、NFC 标签和各平台跳转规则串成了一条长链路。任一个环节断掉商家手里的 NFC 碰一碰就是坏的落地页打不开打卡收藏跳不过去前面做的一切都白搭。最典型的翻车发生在标签上写卡时把 URL 写成了纯文本手机碰上去什么弹窗都没有商家还以为是顾客手机不支持 NFC。实际上标签格式、域名可信度、跳转参数这三样才是碰一碰能不能跑通的关键。这套贴牌部署方案放本地跑没用必须放到公网服务器配好已备案的域名再用安卓机写卡验证。适合正在给商家做赋能、接贴牌项目、需要自己控制源码和部署权的开发者、运维下面是我的完整落地记录。2. 部署前先定三件事服务器规格、域名、NFC 标签2.1 服务器为什么贴牌源码最低要 2 核 4G这套系统不只是跑一个后台它同时要承担懒人版管理后台、碰一碰落地页、静态资源分发、数据库读写以及后续对接各平台跳转时的中转请求。我第一次给模拟项目X试部署时图便宜上了一台 1 核 2G 的机器结果后台登录都要转几秒落地页首次打开慢得明显PHP-FPM 进程一多直接 502。后来老老实实换了 2 核 4G整个链路才稳定下来。我一般会选择 Ubuntu 22.04 LTS 作为系统长期维护省心。如果只做单店试点2 核 4G、5M 带宽够用如果同时给几十家商家做贴牌建议直接上 4 核 8G 并把数据库单独放一台。数据库连接池、FPM 进程数、Nginx 缓存这些参数在高并发场景下全都要跟着调不是你代码写好就自动能撑住的。场景CPU/内存带宽适用阶段单店试用、功能验证2 核 4G5M刚接项目、内测贴牌给 10~30 家商家4 核 8G10M正常商用多城市、大量落地页8 核 16G 起20M 或按量计费规模化运营2.2 域名与 HTTPS跳转被拦截最隐蔽的原因这个坑我踩过之后才明白NFC 标签里写的是网址手机碰一下、点卡片实际上就是一次普通的浏览器跳转。如果这个域名没有备案或者没有配 HTTPS微信、手机浏览器会直接弹“已停止访问”落地页根本进不去不是你的代码问题是域名可信度问题。我一般会准备一个主域名单独用于碰一碰服务不跟商家原有营销域名混用。证书用 certbot 申请 Let‘s Encrypt三个月续期一次配合定时任务自动续。命令是sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d card.example.com第一条命令装的是 certbot 的 Nginx 插件第二条会自动改写 Nginx 配置并申请证书。把card.example.com换成你自己的域名执行前确保域名已经解析到这台服务器80 端口可以访问。证书下来后Nginx 会自动带上 SSL 配置不需要手动改。HTTPS 到期是最容易漏的后台能打开手机碰一碰却提示证书无效用户根本不会等你解释。我习惯在服务器 crontab 里加一行每天跑一次续期命令省得某天半夜证书过期被商家夺命连环 call。2.3 NFC 标签选型NTAG213 和 NTAG215 怎么选标签是这套系统里最容易忽略但最不能出错的硬件。市面上常见的碰碰卡贴片大多用 NXP 的 NTAG 系列我推荐 NTAG213容量 144 字节存一个几十个字符的短链接绰绰有余NTAG215 容量更大能存更多扩展信息但价格差不多翻倍普通碰一碰场景用不上只有你想把门店信息、卡片序列号一起写进标签时才考虑。写卡工具我固定用安卓手机上的 NFC Tools或者 NXP 官方的 TagWriter。iPhone 也能读碰一碰但很多老型号不能主动写标签所以团队里至少留一台安卓机专门写卡这是所有部署碰碰卡的团队都会遇到的需求。写卡时选择“URL”记录类型而不是“Text”这个选择决定了手机碰上去是弹网页卡片还是显示一行纯文本。标签型号容量推荐场景单张参考价NTAG213144 字节碰一碰跳落地页存短链最低NTAG215504 字节存门店信息跳转链接中等FeliCa / 国产兼容芯片不等特殊门店、定制卡面视供应商标签选型定下来服务器和域名也准备好就可以进入下一步装环境了。3. 搭建 LNMP 环境把源码跑起来3.1 Nginx、PHP 8.1、MySQL 的安装与配置这套贴牌源码常见交付形态是 PHP 写的我用 LNMP 组合Nginx 负责静态文件和反向代理PHP-FPM 跑业务逻辑MySQL 存数据。PHP 版本我推荐 8.1 起步源码里如果用了新语法老版本 PHP 7.4 会直接报语法错误你排查半天还以为代码坏了。Ubuntu 22.04 自带 PHP 8.1直接 apt 装就行不需要额外加 PPA。完整命令sudo apt update sudo apt install -y nginx mysql-server php8.1-fpm php8.1-mysql \ php8.1-gd php8.1-curl php8.1-mbstring php8.1-zip php8.1-xml unzip第一条命令刷新软件源索引第二条安装 Nginx、MySQL、PHP-FPM 以及常用扩展。php8.1-gd是生成落地页二维码和图片裁剪必须的php8.1-curl用于后台请求第三方跳转接口php8.1-mbstring处理中文门店名称缺了这些扩展后台很可能白屏或报“函数不存在”。装完之后把源码压缩包上传到服务器我习惯放在/data/www/card这个目录然后写 Nginx 站点配置。伪静态配置是关键很多源码的路由依赖 rewrite不配好所有页面都是 404server { listen 80; server_name card.example.com; root /data/www/card/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; } }这个配置里root指向public目录不是源码根目录。try_files的作用是当请求路径找不到对应文件时把请求交给index.php处理这是绝大多数 PHP 框架的入口规则。fastcgi_pass用的 socket 路径要和系统里 PHP-FPM 实际监听路径一致如果 502 报错先检查这一行。3.2 导入数据库与修改 .env 配置数据库是这套系统的黑匣子商家资料、落地页 token、跳转配置全在里面。我一般先建库建用户再导入源码附带的 SQL 文件。注意数据库排序规则一定用 utf8mb4门店名称里的生僻字、emoji 才不会存成乱码CREATE DATABASE card_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER ’card_user‘’localhost‘ IDENTIFIED BY StrongPassword; GRANT ALL PRIVILEGES ON card_db.* TO card_userlocalhost;第一行建库并指定字符集第二行创建专用数据库账号第三行授权。生产环境不要用 root 账号跑业务这是血泪经验一旦代码有注入漏洞root 能拖库专用账号只影响一个库。密码务必定得复杂点部署完改一次。库建好后导入初始数据然后修改项目里的环境配置文件。源码如果是 Laravel 系入口配置是根目录的.env换 ThinkPHP 系则是.env或config/database.php我这次装的这套是 Laravel 写法重点改这几项APP_URLhttps://card.example.com DB_HOST127.0.0.1 DB_DATABASEcard_db DB_USERNAMEcard_user DB_PASSWORDStrongPasswordAPP_URL直接影响落地页生成的绝对地址写错或者漏了 https生成出来的 NFC 链接就是 http 的微信里直接被拦。DB_HOST本机用 127.0.0.1 比 localhost 更稳避免走 socket 时权限出错。改完配置文件执行php artisan config:cache清一下配置缓存否则改动不生效。3.3 首次登录后台与初始化环境配好后浏览器访问https://card.example.com/admin正常会看到安装向导或登录页。首次安装按向导填管理员邮箱和密码即可如果访问白屏先看 Nginx 错误日志和 PHP-FPM 日志90% 是目录权限问题。源码根目录需要给 Web 运行用户写权限Laravel 系要能写 storage 和 bootstrap/cachesudo chown -R www-data:www-data /data/www/card sudo chmod -R 755 /data/www/card/storage /data/www/card/bootstrap/cache第一行把项目属主改成www-data第二行给日志和缓存目录放开写权限。权限问题最典型的症状是后台能打开但一提交表单就报 500日志里写着Permission denied。新环境初始化完成后顺手在后台把“生成落地页”“生成二维码”这些开关过一遍确认没有报错再往下走。4. 贴牌改造与 NFC 标签绑定4.1 品牌信息改三处后台标题、落地页 Logo、分享卡片贴牌的核心是让商家拿到手的东西看起来像他自己的品牌而不是一眼看出是个通用系统。常见做法是源码里有一份品牌配置后端管理界面里也能改。我一般改三个地方后台登录页和顶部标题、碰一碰落地页的店铺名称和 logo、分享到微信时的卡片标题和描述。如果源码允许在后台直接传 logo那最省事如果只能改配置我会找到项目里的.env或前端资源文件把默认的“碰碰卡”字样全局搜索替换成商家品牌名。注意除了页面上的文字还要检查小程序码和分享图的默认文案有些系统把这些东西写在数据库初始化数据里只改前端文件没用。改完后台没有实时生效的话记得做两步一是清框架缓存执行php artisan config:cache二是清浏览器缓存或强制刷新很多时候贴牌配好了但你看的还是旧文件。CDN 缓存更隐蔽我先在本地 host 指过去确认无误再等 CDN 刷新。4.2 生成碰一碰落地页并绑定 NFC 标签这套系统的核心对象是“落地页”每个商家、每个门店对应一个独立 token 链接比如https://card.example.com/p/abc123。后台创建门店后会自动生成这个链接它就是写进 NFC 标签的那个 URL。写卡这一步最容易翻车我强调一遍打开 NFC Tools选择“添加记录”里的“URL”把落地页链接粘贴进去再点“写入标签”手机贴近碰碰卡贴片完成写入。不要用“文本”类型不要顺手把 https 去掉否则手机碰上去要么不弹卡片要么跳转失败。写卡记录类型URL URL 值https://card.example.com/p/abc123写完卡不要立刻交付先用同一台手机重新读一下标签确认读回来的 URL 和配置完全一致。标签上的 URL 一旦写错贴到商家前台后再改就得撕下来重贴非常尴尬。批量写卡时我习惯把每个标签的 UID 记录下来和后端 token 做映射方便事后排查哪张卡对应哪家门店。4.3 一键发布与打卡收藏的跳转参数配置这里要理解一个现实没有任何源码能绕过各平台直接帮你发笔记所谓“一键发布”本质是配置好跳转参数落地页上点击对应按钮时拉起已安装的 App并预填好内容。所以部署前必须让商家在手机上装好抖音、小红书、快手、视频号这些 App 并登录否则跳过去是空白页。后台跳转配置一般长这样每个平台一个字段填从 App 分享功能里复制出来的链接或者平台开放平台申请的 scheme 参数。我一般会整理一张配置表发给商家让他们自己填免得我挨个问功能配置字段填什么抖音发布douyin_link从抖音 App 分享生成的短链小红书笔记xiaohongshu_link小红书 App 内分享链接快手/视频号kuaishou_link / channels_link对应 App 分享短链大众点评打卡dianping_link门店 POI 地址短链美团收藏meituan_link美团门店链接高德/百度打卡amap_link / baidu_link地图 POI 链接填完之后实际测一遍跳转重点看 iOS 上能不能拉起 App。iOS 对 scheme 跳转限制比较多常见做法是落地页里先做一层中转适配识别到 App 已安装就唤起 App没安装就跳到 App Store 或引导页。这套逻辑通常源码已经内置你只要把链接填对就行。5. 部署避坑五个最容易翻车的地方5.1 现象手机碰上去完全没反应什么弹窗都没有原因大概率不在手机而在写卡格式。写入内容类型是 Text 而不是 URL手机系统会把它当成一段普通文本只显示文字不触发跳转。另外标签贴在金属表面或者手机壳太厚也会让读卡距离变远。解决重新写卡选择“URL”记录类型写完立刻用手机读回校验。如果确认格式没问题把标签从金属面挪开或用 NFC 检测工具确认标签可读范围。5.2 现象落地页能打开但微信里提示“已停止访问”这是域名信任问题。域名没有备案或备案信息还没生效微信和手机浏览器会直接拦截。另一个隐蔽原因是证书过期页面外观正常但系统底层校验失败。解决确认域名已备案且备案号正确挂在页脚证书用 certbot 续期并检查nginx -t是否通过。这几个环节出问题没有代码层面的修复办法只能等备案或换证书。5.3 现象后台可以登录手机打开落地页却白屏后台正常说明 PHP 和数据库没问题白屏大概率是路由伪静态或目录权限。Nginx 的try_files没配好所有子路径都会 404 或 500。解决检查站点配置里location /是否把请求转发到index.php再看 storage 目录是否可写。我遇到过一次是上传源码时漏了public目录下的静态资源页面 HTML 回来了但 CSS、JS 全 404肉眼看起来就是白屏检查浏览器开发者工具 Network 面板立刻能定位。5.4 现象贴牌配置改了前台还是显示旧 Logo、旧名称大概率不是没改对而是缓存没清干净。框架配置缓存、浏览器缓存、CDN 缓存三层叠加前端资源被缓存的时间可以长达一天。解决依次执行配置缓存清理、浏览器无痕窗口验证最后刷新 CDN 缓存。如果用的是宝塔或类似面板记得站点“缓存”开关也关掉再调试。5.5 现象同一批标签有的手机能读有的读不了读不了的多半是 iPhone 或部分把 NFC 默认用作刷公交卡、门禁卡的安卓机。手机 NFC 芯片灵敏度不同贴片太小或位置太偏都影响识别。还有用户手机开启了“NFC 安全模块”把读卡请求劫持了。解决部署时把标签贴在手机上半部容易靠近的位置并且同时准备一个带二维码的辅助入口NFC 碰不了可以用扫码兜底。这是碰一碰系统必须做的降级方案别只依赖 NFC。6. 装完怎么验证一台手机走完碰一碰全流程部署完不能只看后台“配置成功”就交付必须拿真实设备走一遍完整链路。我每次都用一台安卓和一台 iPhone 做验证重点测这五条链路缺一不可。链路操作预期结果NFC 读取手机解锁后贴近标签弹出卡片显示落地页链接落地页打开点击卡片品牌页面正常、logo 正确、无白屏发布跳转依次点击抖音、小红书等按钮拉起对应 App 并进入发布页打卡收藏点击点评、美团、高德、百度按钮打开对应门店地址页服务端日志查看 Nginx access.log每步操作都有对应请求记录无 5xx如果服务端日志这一步之前你没看过现在补上。执行sudo tail -f /var/log/nginx/access.log然后自己碰一次标签能看到落地页请求、静态资源请求、跳转接口请求一条条打出来。没有日志说明请求根本没到服务器问题在标签或手机端日志 500 说明代码层面有异常去查 PHP 错误日志。从那以后我每部署一套碰一碰系统都强制自己走一遍上面的完整验证流程而不是复制一份配置就说完成。尤其是给商家交付前我会用一台没连过调试的普通手机把 NFC 碰一碰、扫码兜底、发布跳转、打卡收藏挨个点一遍。省下来的售后沟通时间比部署本身还多。希望帮到你。本文还有配套的精品资源点击获取