|
小程序之后的异步验证和订单处理
$orderNo])->lock(true)->find();
// $order = Order::get(['order_no'=>$orderNo]);
//如果未支付
if ($order->status == 1) {
$service = new \app\api\service\Order();
//查询到该订单号的商品和库存量信息
$stockStatus = $service->checkOrderStock($order->id);
//如果库存量有,更新订单状态,以及减去商品库存
if ($stockStatus['pass']) {
$this->updateOrderStatus($order->id, true);
$this->reduceStock($stockStatus);
//如果没有库存,订单状态修改为已支付,但订单未处理
} else {
$this->updateOrderStatus($order->id, false);
}
}
Db::commit();
//返回给微信
return true;
}catch (Exception $e){
Db::rollback();
return fasle;
}
}else{
//如果微信返回失败的处理信息,那我们这里依然返回true,向微信表明态度
return true;
}
}
//支付成功,减去商品库存
private function reduceStock($stockStatus)
{
//遍历减去
foreach ($stockStatus['pStatusArray'] as $v) {
//使用tp5的setDec方法
Product::where(['id'=>$v['id']])->setDec('stock',$v['count']);
}
}
//success为真,则订单修改为PAID,如果为假则修改为已支付,但订单未处理的状态,对应枚举信息修改
private function updateOrderStatus($orderID,$success)
{
$status = $success?OrderStatusEnum:AID:OrderStatusEnum:AID_BUT_OUT_OF;
Order::where(['id'=>$orderID])->update(['status'=>$status]);
}
}
|
|