上节课我们成功调起了小程序的抖音支付,这说明我们在抖音平台创建了一个订单。然而,这个订单在自己的数据库中并没有留痕,因此需要编写一个创建订单的方法。
创建订单的方法需要传入四个参数,包括用户的open ID、小程序填写的描述性信息、本地订单号和抖音测订单号。
pay state和create state有两个状态,分别代表支付状态和AI绘画状态。0代表未支付,0代表未进行AI绘画。
将创建订单的数据组装起来,然后调用order模型的create方法即可创建订单。直接返回抖音音的创建结果,让小程序调取抖音支付。来到小程序提交订单,可以看到接口返回成功。来到数据库查看订单是否已经创建成功。
接下来,需要编写抖音支付成功回调的接口。在控制器中编写一个call back方法。在服务中也需要编写一个call back方法。看一下抖音支付回调成功的接口文档,可以看到这里有几个回调参数,详细信息都在message字段中。需要注意验签过程,字段为抖音加签结果,需要验证其合法性。将json字符串转换为数组并进行加签,如果加签结果不等于抖音传过来的加签段,则抛出异常验签失败,这样就得到了支付成功的订单号。将数据表中的订单状态改为支付成功。可以直接写order where,抖音测的订单号find save,将支付状态设置为paystate等于1,然后返回更新结果。在控制层的call back方法中添加一个拆包操作。
需要在call back方法中添加AI call back。AI control中的callback方法支付成功后无需鉴权,因此需要新建一个控制器DY Controller,继承baseController,而非authController,因为它不需要鉴权。将callback方法转移到这里,无需传递用户opid,因为我们也不需要。将这里的callback路由对应的控制器改为DY Controller,选择支付成功,这样就会触发支付成功的回调。支付成功后,我们需要将响应格式调整为抖音期望的格式,否则小程序将认为通知失败,并进行重试。因此,我们需要返回这样的格式,以确保响应成功。