【愚公系列】《微信小程序与云开发从入门到实践》059-迷你商城小程序的开发(加入购物车与创建订单功能开发)
| 标题 | 详情 |
|---|---|
| 作者简介 | 愚公搬代码 |
| 头衔 | 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。 |
| 近期荣誉 | 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。 |
| 博客内容 | .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。 |
| 欢迎 | 👍点赞、✍评论、⭐收藏 |
文章目录
- 🚀前言
- 🚀一、加入购物车与创建订单功能开发
- 🔎1.购物车功能
- 🦋1.1 云函数开发
- ☀️1.1.1 添加商品到购物车 (`addToCar`)
- ☀️1.1.2 删除购物车中的商品 (`deleteCar`)
- ☀️1.1.3 获取购物车信息 (`carInfo`)
- 🦋1.2 小程序端 `server.js` 实现
- 🦋1.3 商品详情页 `addCar` 方法
- 🦋1.4 购物车页面
- ☀️1.4.1 购物车页面框架 `shopping.wxml`
- ☀️1.4.2 购物车页面样式 `shopping.wxss`
- ☀️1.4.3 购物车页面逻辑 `shopping.js`
- 🔎2.订单相关功能开发
- 🦋2.1 云函数开发
- ☀️2.1.1 创建订单云函数:`createOrder`
- ☀️2.1.2 获取订单详情云函数:`orderDetail`
- 🦋2.2 小程序端 `server.js` 实现
- 🦋2.4 订单详情页面
- ☀️1.4.1 订单详情页面框架 `orderDetail.wxml`
- ☀️2.4.2 订单详情页面样式 `orderDetail.wxss`
- ☀️2.4.3 订单详情页面逻辑 `orderDetail.js`
- 🔎3.地址选择和支付功能开发
- 🦋3.1 地址选择
- 🦋3.2 支付功能
- ☀️3.2.1 创建 `payOrder` 云函数
- ☀️3.2.2 `server.js` 中的支付方法
- ☀️3.2.3 订单详情页的支付功能
- 🦋3.3 模拟支付与订单状态
🚀前言
在数字化消费日益普及的今天,小程序已经成为商家与消费者互动的重要平台。迷你商城小程序凭借其快捷的访问和丰富的功能,正逐渐改变着传统购物的方式。在这一过程中,购物车与订单创建功能的开发尤为关键,它们不仅是用户购物流程中的重要环节,更直接影响着消费者的购买体验和商家的销售转化率。
购物车功能的实现,使用户能够轻松管理和选择商品,提升了购物的灵活性。而创建订单功能则是购物流程的最后一步,它涉及到用户信息的确认、支付方式的选择等一系列重要操作。如何设计一个直观易用的购物车,以及一个高效流畅的订单创建流程,是每个小程序开发者必须认真考虑的任务。
🚀一、加入购物车与创建订单功能开发
🔎1.购物车功能
在电商类小程序中,购物车是一个核心功能,用户可以将商品添加到购物车、删除不需要的商品,并最终创建订单进行结算。下面是如何通过云函数实现购物车功能的详细步骤,包括添加商品、删除商品、获取购物车信息,以及在小程序端实现相关功能。
🦋1.1 云函数开发
☀️1.1.1 添加商品到购物车 (addToCar)
此云函数用于将商品添加到用户的购物车。
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({env: '' // 填写您的云环境ID
})
const db = cloud.database();
// 云函数入口函数
exports.main = async (event, context) => {const wxContext = cloud.getWXContext()let openId = wxContext.OPENID;let gid = event.gid;let collection = db.collection("shop_car");return collection.add({data:{gid:gid,openId:openId}});
}
☀️1.1.2 删除购物车中的商品 (deleteCar)
此云函数用于删除购物车中的指定商品。
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({env: '' // 填写您的云环境ID
})
const db = cloud.database();
// 云函数入口函数
exports.main = async (event, context) => {const wxContext = cloud.getWXContext()let openId = wxContext.OPENID;let gid = event.gid;let collection = db.collection("shop_car");return collection.where({gid:gid,openId:openId}).remove();
}
☀️1.1.3 获取购物车信息 (carInfo)
此云函数用于获取当前用户的购物车信息,并结合商品信息返回详细数据。
const cloud = require('wx-server-sdk')
cloud.init({env: '' // 填写您的云环境ID
})
const db = cloud.database();
exports.main = async (event, context) => {const wxContext = cloud.getWXContext();let openId = wxContext.OPENID;let collection = db.collection("shop_car");let productC = db.collection("shop_product");let data = await collection.where({openId:openId}).get();let gArray = data.data;for (let j = 0; j < gArray.length; j++) {let v = gArray[j];let p = await productC.where({gid:v.gid}).get();v.detail = p.data[0];}return gArray;
}
🦋1.2 小程序端 server.js 实现
在小程序端,封装对云函数的调用,方便其他页面调用购物车相关功能。
// utils/server/server.js
const server = {addToCar:function(gid, callback) {wx.cloud.callFunction({name:"addToCar",data:{gid:gid}}).then(res=>{callback();}).catch(error=>{wx.showToast({title: `加入购物车失败`,icon:"none"})console.log(error);});},getCarInfo:function(callback) {wx.cloud.callFunction({name:"carInfo",}).then(res=>{callback(res.result);}).catch(error=>{wx.showToast({title: `获取购物车详情失败`,icon:"none"})console.log(error);});},deleteCar:function(gid, callback) {wx.cloud.callFunction({name:"deleteCar",data:{gid:gid}}).then(res=>{callback(res.result);}).catch(error=>{wx.showToast({title: `删除商品失败`,icon:"none"})console.log(error);});},
};module.exports = { server };
🦋1.3 商品详情页 addCar 方法
在商品详情页中,用户可以点击“加入购物车”按钮,将商品添加到购物车。这个方法会调用云函数 addToCar
相关文章:
【愚公系列】《微信小程序与云开发从入门到实践》059-迷你商城小程序的开发(加入购物车与创建订单功能开发)
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...
Mac Android studio :gradle 配置、代理设置、及各种环境变量配置;
mac 安装 AS,最烦人的就是这些配置了(吐槽一下:这软件真是垃圾的一批,同样的代码换了电脑就没法用,比 vscode 甚至比低评分的xcode还差劲!) --------------------- 一、 gradle 下载及环境变量…...
unity——Preject3——开始界面拼面板
目录 1.创建panel,去掉panel自带的image,自己加一个image,使用锚点分配好 2.锚点(快捷键点击后 ALTShift) 锚点是什么? 锚点的实际例子 例子1:固定在父容器的中心 例子2:对齐到…...
【达梦数据库(Oracle模式)】如何将视图中的数据导出
在某些情况下,我们需要将生产环境某个模式下的数据导入到开发电脑中,因为正式环境无法连接外网数据。 方式一:将视图查询出来,然后右键导出所有查询结果(不推荐) 优点:方便快捷 缺点࿱…...
GB44495-2024 汽车整车信息安全技术要求 - V2X部分前置要求
背景 GB 44495-2024《汽车整车信息安全技术要求》中关于V2X(车与外界通信)的部分,主要关注于通信安全要求,旨在确保车辆在与外部设备进行数据交互时的信息安全。其测试大致可分为消息层(数据无异常)、应用…...
FastAPI 应用的容器化与 Docker 部署:提升性能与可扩展性
FastAPI 应用的容器化与 Docker 部署:提升性能与可扩展性 目录 🐳 使用 Docker 容器化 FastAPI 应用⚙️ 使用 Docker Compose 管理多个服务的部署🚀 在 Docker 容器中部署与运行 FastAPI 应用 1. 🐳 使用 Docker 容器化 FastAPI…...
QT入门的一些吐槽
QT入门的一些吐槽 看了网上的一些介绍QT的课程,看了一些讲述qt的书籍,然而再想自己做一个项目的时候,却发现我好像什么都不会,QT对我来说就是一个黑盒子。 我只会: 使用QT Creator创建一个项目,再UI文件中…...
4.Spring AI Prompt:与大模型进行有效沟通
1.什么是提示词 在人工智能领域,提示词(Prompt)扮演着至关重要的角色,它宛如一把精准的钥匙,为 AI 大模型开启理解之门。作为向模型输入的关键信息或引导性语句,提示词能够助力模型迅速洞悉问题需求&#…...
深入内核讲明白Android Binder【二】
深入内核讲明白Android Binder【二】 前言一、Binder通信内核源码整体思路概述1. 客户端向服务端发送数据流程概述1.1 binder_ref1.2 binder_node1.3 binder_proc1.4 binder_thread 2. 服务端的binder_node是什么时候被创建的呢?2.1 Binder驱动程序为服务创建binder…...
Python基于Django的图像去雾算法研究和系统实现(附源码,文档说明)
博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇dz…...
TCP 连接状态标识 | SYN, FIN, ACK, PSH, RST, URG
注:本文为“TCP 连接状态标识”相关文章合辑。 TCP 的状态:SYN, FIN, ACK, PSH, RST, URG 简介及 ACK 确认机制 llzhang_fly 于 2020-09-19 05:25:26 发布 1、TCP 的状态 FLAGS 字段状态 在 TCP 层,有个 FLAGS 字段,这个字段有…...
WXML模版语法-事件绑定
知识点1:什么是事件 事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理。 知识点2:小程序中常用的事件 类型绑定方式事件描述tapbindtap或bind:tap手指触摸后马上离开,类似于…...
楚慧杯Web
WEB1 计算器 import requests rrequests.session() data{"answer":0} url"" for i in range(30):if i0:rrequests.get(url)dr.textdd.split(":")[22][1:].split("<br>")[0]data["answer"]str(eval(d))print(eval(d)…...
工商业储能电站能量管理本地系统及多站点云平台
一、储能站就地监控 Acre1-2000MG储能能量管理系统是针对工商业储能电站研制的本地化能量管理系统,可实现了储能电站的数据采集、数据处理、数据存储、数据查询与分析、可视化监控、报警管理、统计报表、策略管理、历史曲线等功能。其中策略管理,支持多…...
HTML标签笔记
黑马程序员视频地址:黑马程序员前端JavaScript入门到精通全套视频教程https://www.bilibili.com/video/BV1Y84y1L7Nn?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes 标题与段落 标题 <h1>~<h6> 段落 <p…...
pthread_create函数
函数原型 pthread_create 是 POSIX 线程(pthread)库中的一个函数,用于在程序中创建一个新线程。 #include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *a…...
C# 并发和并行的区别--16
目录 并发和并行 一.并发 定义 特点 代码示例 代码解释 二.并行 定义 特点 在C#中的体现 代码示例 代码解释 三.并发和并行的区别 四 .如何在C#中选择并发还是并行 1.考虑任务类型 2.代码示例 3.注意事项 五.总结 并发和并行 在编程领域,并发和并行是两个密切…...
Java日志配置
1.导入依赖 <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.23.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupI…...
python中的RPA->playwright自动化录制脚本实战案例笔记
playwright录制功能使用绕过登录操作 1、首先安装playwright pip install playwright2、 安装支持的浏览器 playwright install # 安装支持的浏览器:cr, chromium, ff, firefox, wk 和 webkit3、接着在自己的项目下运行录制命令: playwright codegen…...
Linux查看日志命令
问题排查过程: 1. 评估问题现象是否是操作问题,还是服务bug,页面出异常信息是后端,没抛异常信息有可能是前端渲染问题,F12抓包看那个字段没有数据(有时候需要前端帮忙确定是哪一个字段)&#x…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
