作者:知晓云- 小程序开发快人一步
来源:知晓课堂
本文主要侧重于讲述小程序在线支付功能中的编程思想和编程模式,并在必要的地方提供关键代码示例。
为方便演示,这里将实现一个最简单的虚拟商品的订单支付功能,订单略去了收货地址和多规格、多数量的情况,示例中仅讨论在商品详情页中直接创建订单并发起支付的情况。需要分别定义 Product 表和 Order 表进行数据存取,在 BaaS 后台中创建两张数据表。
一、数据表结构设计
Product 表:
数据表录入权限:所有人
数据行读写权限:创建者可写,所有人可读
Order 表:
数据表录入权限:所有人
数据行读写权限:创建者可写,创建者可读
商品的订单结算和支付流程一般包括“创建订单 -> 支付 -> 更新订单状态”三个步骤。下文中将分析几种实现该流程的方案,供我们一起探讨。
关注「知晓云」微信公众号,在微信后台回复「源码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(transa