作者:知晓云- 小程序开发快人一步
来源:知晓课堂
本文主要侧重于讲述小程序在线支付功能中的编程思想和编程模式,并在必要的地方提供关键代码示例。
为方便演示,这里将实现一个最简单的虚拟商品的订单支付功能,订单略去了收货地址和多规格、多数量的情况,示例中仅讨论在商品详情页中直接创建订单并发起支付的情况。需要分别定义 Product 表和 Order 表进行数据存取,在 BaaS 后台中创建两张数据表。
一、数据表结构设计
Product 表:
数据表录入权限:所有人
数据行读写权限:创建者可写,所有人可读

Order 表:
数据表录入权限:所有人
数据行读写权限:创建者可写,创建者可读
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QTuOEx8z-1591240483124)(/img/bVbHYud)]](https://i-blog.csdnimg.cn/blog_migrate/41dfd55c29bab052b1944959bad93a06.png)
商品的订单结算和支付流程一般包括“创建订单 -> 支付 -> 更新订单状态”三个步骤。下文中将分析几种实现该流程的方案,供我们一起探讨。
关注「知晓云」微信公众号,在微信后台回复「源码1」,获取完整的商品详情页 JS 代码。
二、客户端创建订单,客户端更新订单状态
我们先来看下只在客户端中如何处理这些逻辑。
1) 创建订单:Order 表中创建一条新记录,status 字段默认值为 “no_paid”,保存订单金额,商品快照和商品 id 以及订单创建者,其中订单创建者由 BaaS 的用户系统自动处理,值为创建订单的用户 id:
/**
* 创建订单处理函数
*/
createOrderHandle() {
const orderTableId = 12345678
const tableObject = new wx.BaaS.TableObject(orderTableId)
const createObject = tableObject.create()
const product = this.data.product
const data = {
product_id: product.id,
product_snapshot: product,
total_cost: product.price,
status: 'no_paid',
}
// 客户端创建订单,客户端更新订单状态
return createObject.set(data).save().then(res => {
this.order = res.data || {}
return this.pay(this.order)
}).then

本文详细介绍了小程序支付功能的实现,从客户端创建订单和更新状态开始,逐步揭示了其中的安全隐患。通过引入云函数和触发器,文章探讨了四种不同的实现方案,以增强支付流程的安全性和准确性,最终提出了一个基于云函数校验的最安全实现方式。
最低0.47元/天 解锁文章
2530

被折叠的 条评论
为什么被折叠?



