网约车系统搭建实录:uniapp双端+Fastadmin后台部署笔记

声明:本文仅供技术学习参考,不构成任何投资建议或运营指导;任何实际部署必须遵守当地法律法规,禁止用于任何违法违规用途。

上周帮一个做本地出行服务的客户把这套网约车系统落地了:乘客端和司机端都是 uniapp,后端是 Fastadmin。需求不复杂——市内约车、顺风拼车、代驾三个入口,司乘双端一套代码出小程序和 App。从拿到源码到跑通第一单,前后花了三天,中间在地图权限和支付回调上卡了大半天。这篇就把过程按我实际操作的顺序写下来,省得后面的人重复踩坑。

一、这套系统到底跑什么业务

先拆清楚结构,不然改代码会一团乱。源码分三块:乘客端、司机端、后台。乘客端和司机端都是 uniapp 工程,一套代码编译出微信小程序、H5 和 Android/iOS 包。司机端多几个原生能力调用,比如持续定位、后台听单、跳第三方导航,打包的时候要在 manifest 里把定位权限和后台运行权限勾上,不然熄屏就掉线。

司乘双端的目录差异

两个端共用了不少组件,比如计价展示、订单卡片、评价弹窗,我当时是把公共部分抽到 components 里,改样式只改一处。司机端有个独立的“任务分发”页面,负责接收附近订单推送,用的是 WebSocket 长连接,服务端每 5 秒推一次附近待接订单列表,客户端做倒计时。这块如果服务器没装 Redis 扩展,连接会一直握手失败,报错不明显,得看 runtime 日志才发现。

后台能管到什么程度

Fastadmin 后台熟了就好办,菜单、权限、CRUD 都是现成的。这套里比较关键的是几块:司机入驻审核(驾驶证、行驶证、车辆照片人工过审,还能设黑名单)、计价规则(起步价、里程费、时长费、夜间系数、供需调节系数都做成可配置表单,不用改代码)、订单管理(能看到行程轨迹打点、取消原因、退款记录)、资金流水(乘客支付、司机结算、平台抽成三栏分开记)。后台还有一块优惠券和邀请奖励的配置,做拉新活动挺方便。

二、部署要点:我实际走的顺序

环境和目录

服务器我用的 CentOS 7 + 宝塔,PHP 锁在 7.4(Fastadmin 这套在 8.x 上有些扩展方法会报错,别硬升),MySQL 5.7,Redis 6,Nginx 开伪静态。源码丢到站点根目录,跑 install 安装向导,装完记得手动删掉 install 目录,不然有安全提示。数据库字符集统一 utf8mb4,不然后面司机昵称里的表情符号会存成问号。

地图和支付这两处最容易卡

地图我配的腾讯地图,后台填 Key,同时要把小程序端的 request、uploadFile、socket 合法域名都加上。wx.getLocation 现在要申请接口权限,网约车类目需要资质材料,本地调试阶段我一般先切 H5 跑通流程,等资质下来再切小程序。

支付接的是微信支付 V3 和支付宝 APP 支付。V3 要配商户号、APIv3 密钥、证书文件,回调地址必须是 https 且不能带参数,我第一次把 query 带进去,回调一直 404,查了半小时。支付宝那边主要注意应用私钥和公钥别弄反,沙箱环境测完再切生产。

亮点提示:计价规则和抽成比例全部放在后台配置表里,改一次参数不用重新发版;司机审核和订单轨迹在同一个后台页面就能查完,排查客诉效率挺高。

三、二次开发和多语言

客户后来加了个企业用车模块:公司账户预充值,员工下单走月结,不走在线支付。做法是在订单表加个 biz_id 字段,支付回调里判断类型跳过支付直接置为已支付,结算走后台对账单。改动量不大,两小时搞定。

多语言用的是 uniapp 自带的 i18n 加 Fastadmin 的 lang 目录,前端语言包放 locales 里,后台错误提示放 application/lang。注意日期格式和金额单位,英文环境下金额要改成小数点后两位显示,不然“元”这个单位会露出来。数据库里如果有中文字段描述,建议改成语言 key,别直接存中文。

四、适合哪些人上手

想自己运营本地出行服务的小团队、做同城代驾的创业公司、需要给现有业务加一个约车入口的系统集成商,这套都比较合适。前提是有人能看懂 ThinkPHP 的控制器逻辑,纯小白建议先照着后台跑一遍订单流程再动代码。服务器起步 2 核 4G 够测试用,正式上线我一般建议 4 核 8G 加 Redis 独立部署,司机位置上报的频率不低,数据库压力比想象中大。

常见问题

问:司机端在小程序里熄屏后收不到新订单推送怎么办?
答:小程序的 WebSocket 在后台会被系统挂起,这是平台限制。做法是切到订阅消息推送,司机被派单时由服务端发一条订阅消息,点进来再拉列表。App 端没这个问题,长连接加前台服务就能稳住。

问:只想要乘客端小程序,司机端用 App,能拆开编译吗?
答:可以。两个工程本来就是独立的,乘客端编译小程序,司机端打包安卓包。要注意的是接口域名得配两套,小程序端的那套必须备案且 https,App 端可以走同一域名。

问:后台改了计价规则,已经在行程中的订单会跟着变吗?
答:不会。下单时会把当时的计价参数快照存进订单表,行程中按快照算,后台改配置只影响新订单。这个设计挺重要,不然中途改价容易引起纠纷。

问:系统支持多城市运营吗?
答:支持,后台能按城市维度配计价模板和运营范围,用多边形围栏圈区域。司机注册时选城市,超出围栏范围不能接单。

最后提一句,源码拿去做技术演示和自有业务没问题,请遵守法律法规,禁止任何违法违规用途。上线前把司机资质审核和行程录音授权这两块做扎实,别嫌麻烦。

声明:本文仅供技术学习参考,不构成任何投资建议或运营指导;任何实际部署必须遵守当地法律法规,禁止用于任何违法违规用途。

#网约车系统 #uniapp #Fastadmin #小程序开发 #部署笔记