简介:这是一套面向微信小程序开发者、废品回收行业技术实施人员及初学者的实战型源码资源,专为快速搭建废品回收线上服务平台而设计。v2.7.1版本已实现废品分类浏览、预约上门回收、实时价格查询、微信一键登录、地图导航等核心功能,并预留云开发、评价系统与营销模块(如积分、优惠券)的扩展接口,显著降低行业数字化转型门槛。压缩包共588个文件,涵盖101个JS逻辑文件、51个WXML页面结构、58个WXSS样式、51个JSON配置及49个PHP后端脚本,辅以Bootstrap、jQuery-WeUI等成熟前端库,整体体积仅4.14MB,轻量易部署。目前已有496人学习下载,资源结构规范:pages目录分层清晰,app.js与app.json完整管理全局生命周期,project.config.json适配开发者工具,便于二次开发与本地调试。
1. 零象废品回收 v2.7.1.zip 是一套可直接上手的微信小程序模板源码,专为本地化再生资源服务设计
它不是空壳 Demo,而是已集成用户端核心动线的完整工程:扫码投递、预约上门、积分兑换、订单追踪、废品种类分级展示、回收员接单调度(模拟态)、微信授权登录与手机号绑定。v2.7.1 版本明确基于原生微信小程序框架开发(非 uni-app 或 Taro),目录结构清晰符合官方规范,app.js入口、project.config.json配置、sitemap.json权限声明均就位。压缩包解压后即为可导入开发者工具的合法项目根目录,无需二次构建或转译。对中小再生资源企业、社区回收站点或环保类创业团队而言,这是比从零写wx.request更快落地的起点——你只需替换 logo、修改回收品类数据、配置自己的云开发环境或对接自有后端 API 地址,3 小时内就能在真机预览中看到带真实交互的回收小程序。它不解决支付合规问题(标题已注明“支付功能暂时无法使用”),但把「用户怎么找到你、怎么下单、怎么查进度」这三件事做成了开箱即用的闭环。
2. 解压即运行:在微信开发者工具中快速验证源码完整性与基础交互
2.1 环境准备与项目导入流程
微信开发者工具需为稳定版(v1.06.2308310 及以上),确保已登录与小程序 AppID 绑定的微信账号。解压零象废品回收 v2.7.1.zip后,得到名为lingxiang-waste的文件夹。打开开发者工具 → 「+ 新建项目」→ 填写你的测试 AppID(若无,可选「测试号」模式)→ 项目路径选择该文件夹 → 开发类型选「小程序」→ 不勾选「建立普通快速启动项目」→ 点击「确定」。工具将自动识别app.json并加载页面路由。首次加载可能提示「未找到 app.wxss」,这是因部分样式被内联至app.js或页面 WXML 中,属正常现象,不影响运行。
提示:若出现
Cannot find module 'weui-miniprogram'报错,说明依赖未安装。此时不要手动 npm install —— 微信小程序原生项目不支持 npm 包管理。应检查miniprogram_npm/目录是否存在。若不存在,需进入项目根目录执行npm init -y && npm install weui-miniprogram@1.0.10 --production,再在开发者工具中点击「工具」→「构建 npm」,勾选「使用 npm 模块」并重新编译。
2.2 核心页面结构与关键文件定位
项目采用标准分包结构:主包pages/下含index/index(首页)、order/list(订单列表)、user/profile(个人中心);subPackages/recycle/存放回收相关子包(如scan/扫码页、schedule/预约页)。重点关注以下文件:
app.json:定义"tabBar"底部导航栏图标与文字("list"对应订单页,"recycle"对应回收入口);"subNVue"字段为空,确认非 nvue 渲染;"sitemapLocation"指向sitemap.json,用于 SEO 配置。project.config.json:"miniprogramRoot"值为"./",确认主包路径正确;"setting"中"es6"为true,"enhance"为true,启用增强编译。utils/request.js:封装了wx.request的统一请求方法,baseUrl默认指向https://api.lingxiang.com,此为需替换的关键地址。
2.3 运行首个交互:修改刚进入的加载页面并触发首页渲染
小程序启动时默认显示pages/index/index。其 WXML 中<view class="loading">区域即为初始加载页。要修改该页面,直接编辑pages/index/index.wxml:
<!-- pages/index/index.wxml --> <view class="loading" wx:if="{{!loaded}}"> <image src="/assets/images/logo.png" mode="aspectFit" class="logo"></image> <text class="tip">正在连接回收网络...</text> </view> <view wx:else> <!-- 首页主体内容 --> </view>对应 JS 文件pages/index/index.js中控制loaded状态:
// pages/index/index.js Page({ data: { loaded: false }, onLoad() { // 模拟初始化耗时操作(如检查登录态、拉取 banner) setTimeout(() => { this.setData({ loaded: true }); }, 1200); } });注意:此处
setTimeout仅为演示加载逻辑。实际项目中应替换为wx.checkSession()或wx.getStorage检查本地 token,失败则跳转登录页。1200ms是合理加载阈值,低于 1s 用户感知不到加载,高于 2s 易引发流失。
3. 数据驱动改造:替换回收品类、修改顶部导航栏高度与自定义 picker 联动
3.1 替换废品种类数据:从静态 JSON 到动态接口对接
首页轮播图与品类卡片数据来自pages/index/index.js中的categoryList:
data: { categoryList: [ { id: 1, name: "纸类", icon: "/assets/icons/paper.png", unit: "公斤" }, { id: 2, name: "塑料", icon: "/assets/icons/plastic.png", unit: "公斤" }, { id: 3, name: "金属", icon: "/assets/icons/metal.png", unit: "公斤" } ] }要接入真实数据,需改写onLoad方法:
onLoad() { wx.showLoading({ title: '加载中' }); wx.request({ url: 'https://your-api.com/v1/categories', // 替换为你自己的后端地址 method: 'GET', success: (res) => { if (res.data.code === 200) { this.setData({ categoryList: res.data.data }); } }, fail: () => { wx.showToast({ title: '加载失败', icon: 'none' }); }, complete: () => { wx.hideLoading(); } }); }提示:
wx.request默认不携带 cookie,若后端需鉴权,请在header中添加Authorization字段。同时检查app.json中"requestPayment"权限是否已移除(因支付功能禁用),避免审核风险。
3.2 微信小程序顶部导航栏高度适配与自定义标题栏实现
微信原生导航栏高度固定为44px(iPhone X 及以上为44px + 安全区),但零象模板使用了自定义导航栏("navigationStyle": "custom")。查看app.json全局配置:
{ "window": { "navigationStyle": "custom", "navigationBarBackgroundColor": "#ffffff", "navigationBarTextStyle": "black" } }这意味着所有页面需自行实现顶部区域。pages/index/index.wxml中:
<view class="nav-bar" style="height: {{statusBarHeight + 44}}px;"> <view class="status-bar" style="height: {{statusBarHeight}}px;"></view> <view class="nav-title">零象废品回收</view> </view>对应 JS 中获取状态栏高度:
onLoad() { const menuButtonObject = wx.getMenuButtonBoundingClientRect(); const systemInfo = wx.getSystemInfoSync(); const statusBarHeight = systemInfo.statusBarHeight; const navHeight = statusBarHeight + 44; this.setData({ statusBarHeight, navHeight }); }menuButtonObject用于计算右上角胶囊按钮位置,确保自定义标题栏右侧留白足够。
3.3 weui picker 自定义联动:实现「省-市-区」三级地址选择
模板中pages/user/address-add.js使用了weui-miniprogram的picker组件。原始代码为单列选择:
<weui-picker bind:change="onProvinceChange" range="{{provinces}}" value="{{provinceIndex}}" ></weui-picker>要升级为三级联动,需引入weui-miniprogram的cascade-picker:
<weui-cascade-picker bind:change="onAddressChange" range="{{addressRange}}" value="{{addressValue}}" ></weui-cascade-picker>JS 中初始化addressRange:
data: { addressRange: [ [ { label: '北京市', value: 'bj' }, { label: '上海市', value: 'sh' } ], [ { label: '朝阳区', value: 'cy' }, { label: '海淀区', value: 'hd' } ], [ { label: '建国路88号', value: 'jd88' } ] ], addressValue: [0, 0, 0] }, onAddressChange(e) { console.log('选中地址:', e.detail.value); // [0, 0, 0] 对应北京市-朝阳区-建国路88号 }注意:
weui-cascade-picker的range是三维数组,每一维代表一级选项。实际项目中需通过接口动态加载下级数据,例如监听第一级变化后请求第二级城市列表,再更新addressRange[1]和addressRange[2]。
4. 接口对接与调试:抓包验证请求链路、修复图片提取与跳转链接异常
4.1 使用 Charles 抓取 PC 端微信小程序真实请求(非模拟器)
PC 版微信内置小程序运行于 WebView 内核,Charles 可直接捕获其 HTTPS 流量。步骤如下:
- 在 Charles 中启用 Proxy → SSL Proxying Settings → 添加
*到 Locations; - 微信 PC 客户端设置代理:设置 → 通用设置 → 代理服务器 → HTTP 代理 → 填写本机 IP 与 Charles 端口(默认 8888);
- 手机微信扫描 PC 端「调试」二维码,此时小程序流量经由 Charles;
- 在 Charles 中过滤
api.lingxiang.com,查看GET /v1/orders等请求的 Request Headers 与 Response Body。
关键验证点:
Authorization头是否携带有效 token;Content-Type是否为application/json;- 响应
code字段是否为200,data结构是否匹配前端setData逻辑。
提示:若抓包无数据,检查 PC 微信是否开启「开发者模式」(设置 → 辅助功能 → 开启开发者模式),并确认手机与 PC 在同一局域网。
4.2 微信小程序内嵌 H5 工具栏左侧返回箭头消失的修复方案
模板中pages/webview/index.js使用web-view加载外部 H5 页面,但部分安卓机型会隐藏左上角返回按钮。解决方案是添加bindmessage监听 H5 发送的postMessage:
<!-- pages/webview/index.wxml --> <web-view src="{{url}}" bindmessage="handleMessage" ></web-view>// pages/webview/index.js Page({ data: { url: 'https://h5.yourdomain.com/recycle' }, handleMessage(e) { if (e.detail.data[0].action === 'navigateBack') { wx.navigateBack(); // 主动触发返回 } } });H5 页面中需调用wx.miniProgram.postMessage:
// H5 页面 JS document.querySelector('.back-btn').addEventListener('click', () => { wx.miniProgram.postMessage({ data: { action: 'navigateBack' } }); });4.3 修复weixin://dl/business协议跳转兼容性问题
模板中pages/index/index.wxml存在<navigator url="weixin://dl/business?username=gh_xxx">跳转公众号链接。该协议在 iOS 15+ 及安卓新版微信中受限。替代方案为:
- 后台生成带参数的公众号文章页(如
https://mp.weixin.qq.com/s?__biz=xxx&mid=xxx); - 前端改为
wx.navigateToMiniProgram跳转同主体公众号关联的小程序(需提前在公众号后台绑定); - 或降级为
wx.openCustomerServiceConversation启动客服对话:
wx.openCustomerServiceConversation({ extInfo: { url: 'https://your-service-page.com' }, corpId: 'your-corp-id' });注意:
weixin://dl/business仅适用于已认证服务号且用户已关注该号的场景,新用户点击无效。生产环境必须切换为上述任一兼容方案。
5. 生产部署前必检:云开发迁移、图片资源优化与 sitemap 权限收敛
5.1 将本地 API 迁移至微信云开发环境
若放弃自建后端,可利用云开发托管静态资源并提供云函数。步骤:
- 在开发者工具中开通云开发(环境 ID 记为
lingxiang-prod); - 将
utils/request.js中baseUrl改为云函数名:
const baseUrl = 'https://lingxiang-prod.service.tcloudbase.com'; // 云调用域名 // 或直接使用 wx.cloud.callFunction- 创建云函数
getCategories:
// cloudfunctions/getCategories/index.js exports.main = async (event, context) => { return { code: 200, data: [ { id: 1, name: "纸类", icon: "cloud://lingxiang-prod.6c69-lingxiang-prod-130xxxxx/paper.png" } ] }; };- 前端调用:
wx.cloud.callFunction({ name: 'getCategories', success: res => { this.setData({ categoryList: res.result.data }); } });5.2 图片资源优化与提取工具链
模板中/assets/images/存放大量 PNG 图标,未压缩。使用imagemin批量处理:
npx imagemin assets/images/*.{png,jpg} --out-dir build/images/同时,将min.css替换为weui-miniprogram提供的精简版:
- 删除
app.wxss中重复的@import "weui/weui.wxss";; - 在
project.config.json中setting下添加"useStaticServer": true,启用静态资源 CDN。
5.3 sitemap.json 权限收敛与 SEO 可索引性验证
sitemap.json当前配置为:
{ "desc": "零象废品回收小程序站点地图", "rules": [{ "action": "allow", "page": "*" }] }此配置允许所有页面被微信搜索收录,但存在风险。应按页面敏感度分级:
| 页面路径 | action | 理由 |
|---|---|---|
pages/index/index | allow | 首页必须可索引 |
pages/order/detail | disallow | 订单详情含用户隐私 |
pages/user/profile | disallow | 个人中心禁止索引 |
最终sitemap.json: |
{ "rules": [ { "action": "allow", "page": "pages/index/index" }, { "action": "allow", "page": "pages/recycle/scan" }, { "action": "disallow", "page": "pages/order/detail" }, { "action": "disallow", "page": "pages/user/profile" } ] }验证方式:在微信公众平台「小程序管理」→ 「推广」→ 「微信搜索」中提交 sitemap,24 小时后查看收录状态。
本文还有配套的精品资源,点击获取