\application\api\service\Pay.php中:
use app\api\service\Order as OrderService;
//。。。
public function pay()
{
//1.订单号可能就不存在。
//2.订单号虽然存在,但是订单号和当前用户不匹配。
//3.订单有可能已经被支付过。
//4.进行库存量检测。
$this->checkOrderValid();
$orderService = new OrderService();
$status = $orderService->checkOrderStock($this->orderID);
if (!$status['pass'])
{
return $status;
}
return $this->makeWxPreOrder($status['orderPrice']);
}
//。。。
if ($order->status != OrderStatusEnum::UNPAID)
{
throw new OrderException(
[
'msg' => '订单已支付',
'errorCode' => 80003,
'code' => 400
]);
}
注记:
1、四个检测,其实没有先后顺序。注意两点:第一,把最有可能发生的,放在最前面。如果第一条发生了,后面的就不会执行,可以节约服务器的性能。第二,消耗服务器性能更多的,放在后面。把对数据库、服务器性能消耗小的,放在前面。
2、为了代码的可读性,订单状态一般用枚举。
class OrderStatusEnum
{
// 待支付
const UNPAID = 1;
// 已支付
const PAID = 2;
// 已发货
const DELIVERED = 3;
// 已支付,但库存不足
const PAID_BUT_OUT_OF = 4;
}
领取专属 10元无门槛券
私享最新 技术干货