简介:这份代驾小程序源码基于微信小程序与PHP后端构建,版本为135k代驾v1.2.24,附带前端代码、后端程序及配置教程,面向希望研究代驾业务逻辑或二次开发的开发者与创业者。资源完整覆盖了代驾下单、订单管理、支付结算等核心流程,并包含预售定金抵扣、尾款支付、报名信息填写与后台订单查看等业务模块,同时支持多核销员微信扫码一键核销,可省去人工记录成本。运行环境要求Linux或宝塔面板,兼容php5.6与php7.3,需认证服务号及Mysql数据库。压缩包共3153个文件,约50.95MB,以php业务代码、png与gif界面素材、js与wxss/wxml小程序页面文件为主,另含json配置、xlsx数据表及md说明文档,目录结构清晰便于按模块查阅。目前已有741人学习下载,适合具备一定小程序与PHP基础、需要完整代驾项目参考的开发者研究使用。
1. 代驾小程序源码到手之后:135k 代驾 v1.2.24 到底能跑出什么
拿到一份代驾小程序源码,最怕的不是代码看不懂,而是前后端跑不起来、订单流程走不通、司机端和用户端对不上。135k 代驾 v1.2.24 这套源码包含前端小程序、后端服务以及一份配置教程,核心解决的是同城代驾场景下的下单、派单、接单、计费、结算这条主链路。它适合想快速搭一套代驾业务原型的小团队,也适合接私活需要交付可演示系统的开发者。但要注意,源码能跑通和能上线是两回事,配置教程能帮你把环境搭起来,真正卡人的往往是数据库字段、接口鉴权、地图 Key 和支付回调这些细节。下面按实际落地顺序,把环境、后端、前端、联调和踩坑一次讲清楚。
2. 环境准备与后端服务启动:从零把接口跑通
2.1 运行环境选型与依赖清单
这套源码的后端常见做法是 PHP 或 Java 二选一,从热搜词里 php 后端框架、ruoyi 框架后端、springboot 这些词的高频出现来看,市面上代驾类源码用 PHP+MySQL 的组合居多,部署门槛低,虚拟主机也能跑。我一般会先确认三件事:PHP 版本、MySQL 版本、伪静态规则。PHP 建议 7.4 或 8.0,MySQL 用 5.7 或 8.0 都行,但要注意 8.0 的默认认证插件和旧代码里的mysql_connect不兼容。
先把依赖列成表,避免装到一半发现少东西:
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| PHP | 7.4 / 8.0 | 8.1 以上部分旧函数会报废弃警告 |
| MySQL | 5.7 / 8.0 | 8.0 需改认证方式为 mysql_native_password |
| Nginx | 1.20+ | 配伪静态,入口指向 public 目录 |
| Redis | 5.0+ | 用于订单队列和司机位置缓存 |
| Composer | 2.x | 装第三方 SDK,如支付、短信 |
装完 PHP 后,把fileinfo、curl、openssl、pdo_mysql、redis这几个扩展打开。很多人卡在fileinfo没开,上传司机证件照直接 500。MySQL 安装配置教程网上很多,重点是把字符集设成utf8mb4,否则司机姓名里的生僻字会变问号。
2.2 数据库导入与配置文件修改
源码根目录一般有个install文件夹或者.sql文件。先建库,再导入:
# 登录 MySQL 并创建数据库 mysql -u root -p CREATE DATABASE daijia DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; exit # 导入 SQL 文件,注意路径换成实际文件 mysql -u root -p daijia < /www/wwwroot/daijia/daijia.sql导入完成后,找到后端配置文件,通常在config/database.php或.env里。把数据库地址、库名、用户名、密码填进去。如果是宝塔面板,数据库名和用户名可能带前缀,别直接复制教程里的root。
// config/database.php 关键字段 return [ 'type' => 'mysql', 'hostname' => '127.0.0.1', 'database' => 'daijia', 'username' => 'daijia_user', 'password' => '你的密码', 'hostport' => '3306', 'charset' => 'utf8mb4', ];改完配置后,访问后端域名,如果看到接口返回 JSON 而不是 404,说明入口通了。如果报“数据库连接失败”,先检查 MySQL 是否允许本地连接,再检查密码里有没有特殊字符被转义。
2.3 伪静态与接口鉴权配置
Nginx 下必须配伪静态,否则接口路径会 404。常见规则是把所有请求转发到index.php:
location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } }配好后重启 Nginx。接着看鉴权,代驾类接口一般用 token,登录后返回一个access_token,后续请求放在 header 里。如果前端一直提示“未登录”,先抓包看 header 里有没有带 token,再检查后端 token 过期时间是不是设得太短。有些源码默认 7200 秒,测试时够用,上线要改成 7 天并加刷新机制。
提示:后端跑通的标准不是首页能打开,而是用 Postman 调通“用户登录→下单→司机接单”这三个接口。
3. 前端小程序配置与页面联调:把用户端和司机端接上
3.1 小程序项目导入与 AppID 替换
前端一般用微信开发者工具打开,目录里会有project.config.json。先把 AppID 换成你自己的,否则没法真机预览。如果源码里写死了别人的 AppID,直接改文件:
{ "appid": "wx你的AppID", "projectname": "daijia", "setting": { "urlCheck": false } }urlCheck设为 false 是为了本地调试时不校验合法域名。上线前必须改成 true,并在微信后台配置 request 合法域名,把后端接口域名加进去,否则真机上所有请求都会被拦截。
3.2 接口地址与地图 Key 配置
前端请求地址通常集中在utils/config.js或common/config.js。把baseUrl改成你后端实际域名:
// utils/config.js const config = { baseUrl: 'https://api.yourdomain.com', mapKey: '你的腾讯地图Key', amapKey: '你的高德地图Key' }; export default config;地图 Key 是代驾小程序的命门。用户端要定位起点终点,司机端要导航和算距离。腾讯地图和高德地图的 Key 申请时,要绑定小程序 AppID 和域名,否则会报“key 无效”。如果定位漂移严重,检查是不是用了 GPS 原始坐标没转 GCJ-02,国内地图都要转火星坐标系。
3.3 订单流程联调:从下单到接单的完整链路
联调时按这个顺序走,别跳步:
- 用户端登录,拿到 token。
- 用户端选起点终点,调“预估价格”接口。
- 用户端下单,后端生成订单号,状态为“待接单”。
- 司机端登录,开启接单开关,调“附近订单”接口。
- 司机端接单,后端把订单状态改成“已接单”,并绑定司机 ID。
- 用户端轮询订单状态,看到司机信息。
- 司机到达起点,点击“开始服务”,后端记录开始时间。
- 到达终点,点击“结束服务”,后端按里程和时间算最终价。
- 用户端支付,支付回调把订单状态改成“已完成”。
每一步都要看后端返回的code和msg。如果第 4 步司机端看不到订单,先查订单表的status和city_id,再看司机的位置有没有上报到 Redis。很多源码用 GeoHash 存司机位置,如果 Redis 没开或 key 过期,附近订单永远是空的。
注意:支付回调必须用公网可访问的域名,本地调试可以用内网穿透工具,但上线前一定要换成正式域名并配好证书。
4. 避坑与常见问题排查:那些教程里不会写的翻车点
4.1 数据库导入报错“Unknown collation: utf8mb4_0900_ai_ci”
现象:导入 SQL 时直接中断,提示不认识的排序规则。 原因:SQL 文件是从 MySQL 8.0 导出的,而你的环境是 5.7,不支持utf8mb4_0900_ai_ci。 解决:用文本编辑器把 SQL 文件里的utf8mb4_0900_ai_ci全部替换成utf8mb4_general_ci,再重新导入。或者直接升级到 MySQL 8.0,但记得改认证插件。
4.2 司机端定位不更新,附近订单一直为空
现象:司机端显示定位成功,但用户下单后司机看不到订单。 原因:司机位置没有写入 Redis,或者写入的 key 和读取的 key 不一致。 解决:先查 Redis 里有没有driver:location:司机ID这类 key,再看后端读取时用的 GeoHash 半径是不是太小。默认 5 公里,测试时可以改成 50 公里。另外检查司机端的“接单开关”有没有真正调接口把状态改成“在线”。
4.3 支付回调收不到,订单一直显示“待支付”
现象:用户付了钱,但订单状态不变。 原因:回调地址配错,或者回调接口没有做签名验证导致被拦截。 解决:先在支付平台后台看回调日志,确认有没有发出请求。如果没有,检查notify_url是不是公网 HTTPS 地址。如果有请求但返回失败,看后端日志是不是签名校验没过。测试阶段可以临时把签名校验关掉,但上线前必须打开。
4.4 小程序真机预览白屏,开发者工具正常
现象:开发者工具里一切正常,真机上打开白屏。 原因:合法域名没配,或者用了不支持的 API。 解决:打开微信开发者工具的“真机调试”,看控制台报错。如果是“request 合法域名校验失败”,去微信后台把后端域名加进 request 合法域名。如果是某个 API 不支持,查微信文档换写法。另外检查project.config.json里的urlCheck是不是 true。
4.5 订单金额算出来是 0 或者负数
现象:结束服务后,最终价格显示 0 元。 原因:计费规则没配,或者里程计算返回了 0。 解决:先看后台有没有“计费规则”配置页,把起步价、每公里单价、每分钟时长费填上。再看结束服务时传的经纬度是不是空的,如果司机端没拿到终点坐标,里程就是 0。可以在后端加日志,把计算过程的起步价、里程、时长都打出来,一眼就能看出哪一步丢了。
5. 上线前必须做的三件事:从能跑到能用
5.1 把测试数据清干净,别把演示订单带上线
源码里通常带一批测试用户、测试司机和测试订单。上线前执行几条 SQL 清掉:
-- 清空测试订单,保留表结构 TRUNCATE TABLE dj_order; -- 清空测试司机位置缓存 -- Redis 里执行:DEL driver:location:* -- 清空测试用户,注意外键 DELETE FROM dj_user WHERE mobile LIKE '1380000%';清完后再注册一个真实手机号走一遍完整流程,确认没有残留的测试逻辑。有些源码在订单表里加了is_test字段,上线前要把默认值改成 0,否则新订单也会被标记成测试单。
5.2 接口加频率限制,防止短信和下单被刷
代驾小程序的短信验证码和下单接口是最容易被刷的。上线前在 Nginx 或后端加一层限制:
# Nginx 限制同一 IP 每分钟最多 10 次请求 limit_req_zone $binary_remote_addr zone=api:10m rate=10r/m; location /api/sms/send { limit_req zone=api burst=5 nodelay; proxy_pass http://127.0.0.1:8080; }后端也要做手机号维度的限制,比如同一手机号 60 秒内只能发一次验证码,同一 IP 一天最多发 20 条。下单接口可以加图形验证码或者行为验证,别等被刷了才后悔。
5.3 日志和监控:出问题能查到原因
至少把 PHP 错误日志、Nginx 访问日志、MySQL 慢查询日志打开。订单状态变更、支付回调、司机接单这几个关键节点,在后端写文件日志:
// 记录订单状态变更 file_put_contents( '/www/logs/order.log', date('Y-m-d H:i:s') . ' 订单' . $orderId . ' 状态变更为' . $newStatus . PHP_EOL, FILE_APPEND );日志按天切割,别让一个文件涨到几个 G。有条件的话接个简单的监控,比如用 UptimeRobot 监控接口是否返回 200,出问题能第一时间知道。
我自己的习惯是:每次改完配置,先重启 PHP 和 Nginx,再清一遍 Redis 缓存,然后走一遍完整下单流程。这套动作重复三遍,基本能覆盖 90% 的配置问题。希望帮到你。
本文还有配套的精品资源,点击获取